|
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
|
СпрСотр.НайтиЭлемент(Значение);
этой строчки мне не хватало |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |