|   |   | 
| 
 | v7: Перемещение элементов справочника из одной группы в другую | ☑ | ||
|---|---|---|---|---|
| 0
    
        Izuchayu1C7 30.04.15✎ 12:48 | 
        При перемещении сотрудников из одной группы в другую пишет ошибку "Код не уникален!". Понятно что встречаются элементы в одинаковым кодом. Как сделать так чтобы элементы переносились с новый кодом?
 СпрСотр=СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.НайтиПоНаименованию("Приходящие"); Приходящие=СпрСотр.ТекущийЭлемент(); СпрСотр.НайтиПоНаименованию("Работающие"); Работающие=СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл СпрСотр.Родитель=Приходящие; СпрСотр.Записать(); КонецЦикла; | |||
| 1
    
        Новый участник 30.04.15✎ 12:50 | 
        "Понятно что встречаются элементы в одинаковым кодом".
 Это путь армянского комсомола - сначала создать проблему, потом с жертвами её решить. | |||
| 2
    
        Izuchayu1C7 30.04.15✎ 12:50 | 
        Прикинул что нужно использовать что то типа, и не могу это состыковать
 Процедура ВводНового() СпрСотр=СоздатьОбъект("Справочник.Сотрудники"); СвободныйКод=0; Для К=1 По 99999 Цикл Если СпрСотр.НайтиПоКоду(К)=1 Тогда Продолжить; Иначе СвободныйКод=К; Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры | |||
| 3
    
        Эльниньо 30.04.15✎ 13:23 | 
        (2) Мдяяя..
 СпрСотр.УстановитьНовыйКод(); | |||
| 4
    
        lavalit 30.04.15✎ 13:25 | 
        Скорее всего установлены серии кодов "в пределах подчнения"
 и ето есть не на пользу как выяснилось. так что при переносе используйте "попытку" и в исключении можно использовать "УстановитьНовыйКод(<префикс>)" префикс не обязалово | |||
| 5
    
        Izuchayu1C7 06.05.15✎ 13:34 | 
        (4) (3) 
 СпрСотр=СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.НайтиПоНаименованию("Приходящие"); Приходящие=СпрСотр.ТекущийЭлемент(); СпрСотр.НайтиПоНаименованию("Работающие"); Работающие=СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл СпрСотр.Родитель=Приходящие; СпрСотр.УстановитьНовыйКод(); СпрСотр.Записать(); КонецЦикла; Переносит по одному сотруднику. Как сделать чтобы сразу всех, их там сотни. | |||
| 6
    
        Андрей_Андреич naïve 06.05.15✎ 13:37 | 
        А программно не решить - в момент переноса объект заблокирован. Так что делай полную перенумерацию справочника и включай уникальность.     | |||
| 7
    
        Izuchayu1C7 06.05.15✎ 13:42 | 
        (6) подскажите как сделать полную перенумерацию программно?     | |||
| 8
    
        DCKiller 06.05.15✎ 13:48 | 
        (7) Обработку пиши     | |||
| 9
    
        Builder 06.05.15✎ 13:52 | 
        (7) Код текстовый или числовой? 
 Если текстовый - перекодируешь всех с префиксом и делаешь уникальные коды. Потом в конфигураторе делаешь коды на весь справочник. Можешь потом перекодировать обратно без префиксов. Как то так: К=1; СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл СпрСотр.Код="А"+К; К=К+1; СпрСотр.Записать(); КонецЦикла; | |||
| 10
    
        Izuchayu1C7 06.05.15✎ 13:53 | 
        (8) я так понял там все сложно? с разбегу не решить по-быстрому...     | |||
| 11
    
        Builder 06.05.15✎ 13:55 | 
        (10) См. (9) 
 Если код не текстовый - делаешь его в конфигураторе текстовым, так проще будет. | |||
| 12
    
        1Сергей 06.05.15✎ 13:56 | 
        (5) сначала занеси всех сотров из папки-источника в СписокЗначений или массив (или ТЗ), потом обходя Этот список меняй родителя, устанавливай новый код, записывай     | |||
| 13
    
        Андрей_Андреич naïve 06.05.15✎ 13:56 | 
        На ИТС UCRefRen.ert - все написано до вас.     | |||
| 14
    
        Izuchayu1C7 07.05.15✎ 09:09 | 
        (13) Переименовал с помощью обработки UCRefRen.ert 
 (12) Пробовал использовать СписокЗначений, может ошибся в синтаксисе, но все равно переносит по одному | |||
| 15
    
        Izuchayu1C7 07.05.15✎ 09:10 | 
        Серии кодов - стоит "во всем справочнике"
 Тип кода - "текстовый" | |||
| 16
    
        фобка 07.05.15✎ 09:11 | 
        (14) код со списком     | |||
| 17
    
        Izuchayu1C7 07.05.15✎ 09:12 | 
        СпрСотр=СоздатьОбъект("Справочник.Сотрудники"); 
 СписокЗнач = СоздатьОбъект("СписокЗначений"); СпрСотр.НайтиПоНаименованию("Приходящие"); Приходящие=СпрСотр.ТекущийЭлемент(); СпрСотр.НайтиПоНаименованию("Работающие"); Работающие=СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл СписокЗнач.ДобавитьЗначение(Работающие); СпрСотр.Родитель=Приходящие; СпрСотр.УстановитьНовыйКод(); СпрСотр.Записать(); КонецЦикла; | |||
| 18
    
        фобка 07.05.15✎ 09:13 | 
        (17) нужно два цикла, сначала добавляешь в список, потом бежишь по списку и меняешь родителя     | |||
| 19
    
        Izuchayu1C7 07.05.15✎ 13:56 | 
        (18) что то я не догоняю, подскажите в чем ошибка
 СпрСотр=СоздатьОбъект("Справочник.Сотрудники"); СписокЗнач = СоздатьОбъект("СписокЗначений"); СпрСотр.НайтиПоНаименованию("Приходящие"); Приходящие=СпрСотр.ТекущийЭлемент(); СпрСотр.НайтиПоНаименованию("Работающие"); Работающие=СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл СписокЗнач.ДобавитьЗначение(СпрСотр.ТекущийЭлемент()); КонецЦикла; Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл Значение = СписокЗнач.ПолучитьЗначение(Номер); СпрСотр.Родитель=Приходящие; СпрСотр.УстановитьНовыйКод(); СпрСотр.Записать(); КонецЦикла; | |||
| 20
    
        Izuchayu1C7 07.05.15✎ 13:56 | 
        СпрСотр.Родитель=Приходящие; 
 {Справочник.Сотрудники.ФормаСписка.ФормаСписка.Модуль(77)}: Не выбран элемент! | |||
| 21
    
        DCKiller 07.05.15✎ 14:08 | 
        (20) У тя в справочнике группа-то с таким наименованием есть?     | |||
| 22
    
        Izuchayu1C7 07.05.15✎ 14:10 | 
        (21) есть     | |||
| 23
    
        DCKiller 07.05.15✎ 14:11 | 
        (22) А ты все-таки проверь, на всякий случай, что у тебя возвращает метод СпрСотр.НайтиПоНаименованию("Приходящие"). И если 1, то убедись, что нашел он действительно группу, а не элемент.     | |||
| 24
    
        Izuchayu1C7 07.05.15✎ 14:15 | 
        (23) думаю что он находит действительно то что нужно, т.к. элементы до появления 2го цикла туда добавлялись.
 см. пост выше | |||
| 25
    
        DCKiller 07.05.15✎ 14:16 | 
        (24) Почему у тебя в (19) цикл внутри не закрывается?     | |||
| 26
    
        DCKiller 07.05.15✎ 14:18 | 
        (25) а, блин... короче:
 В цикле по СЗ сделай такую хрень: СпрСотр = СоздатьОбъект("Справочник.КакойТоТамСправочник"); СпрСотр.НайтиЭлемент(Значение); СпрСотр.Родитель = Приходящие; ... и дальше как у тебя там есть | |||
| 27
    
        Izuchayu1C7 07.05.15✎ 14:22 | 
        (26) СПАСИБО Дружище! выручил, не хватает пока у меня тямы.     | |||
| 28
    
        Izuchayu1C7 07.05.15✎ 14:22 | 
        СпрСотр.НайтиЭлемент(Значение);
 этой строчки мне не хватало | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |