|
Копирование элементов справочника из одной группы в другую | ☑ | ||
---|---|---|---|---|
0
palima
29.01.18
✎
10:34
|
Здравствуйте, помогите пожалуйста разобраться с моей проблемой...
Пишу небольшую обработку, которая должна скопировать все элементы справочника из одной группы в другую. Пытаюсь сделать так: Док = Справочники.ЗемельныйНалог.Выбрать(); Пока Док.Следующий() Цикл ДокОбъект = Док.ПолучитьОбъект(); Если ДокОбъект.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04202").Код Тогда НовыйЭлем = ДокОбъект.Скопировать(); НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код; КонецЕсли; НовыйЭлем.Записать(); КонецЦикла; КонецПроцедуры ничего не выходит( |
|||
1
lodger
29.01.18
✎
10:39
|
во 1) никогда не используйте поиски и прочие чтения бд в цикле.
т.е. надо убрать Справочники.ЗемельныйНалог.НайтиПоКоду("04202") из цикла. 2) ограничьте выборку добавив отбор по родителю в Выбрать(). 3) вы уверены, что надо проводить сравнение по Коду? может достаточно сами ссылки сравнивать? 4) НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код; вы вообще понимаете куда и что вы пытаетесь записать? |
|||
2
vicof
29.01.18
✎
10:56
|
ДокОбъект = Док.ПолучитьОбъект();
ДокОбъект.Родитель = Родитель; ДокОбъект.Записать(); |
|||
3
Buster007
29.01.18
✎
11:09
|
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
Выбрать (Select) Синтаксис: Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>) Параметры: <Родитель> (необязательный) Тип: СправочникСсылка.<Имя справочника>. Отбор по родителю. Имеет смысл только для многоуровневых справочников. Если параметр не задан, то отбор по родителю не производится. Чтобы отобрать элементы верхнего уровня, нужно в качестве данного параметра указать пустую ссылку на элемент справочника. <Владелец> (необязательный) Тип: СправочникСсылка.<Имя справочника>. Отбор по владельцу. Имеет смысл только для подчиненных справочников. Если параметр не задан, то отбор по владельцу не производится. <Отбор> (необязательный) Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю. В качестве полей для отбора могут задаваться только поля "Код", "Наименование" и реквизиты справочника, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядоч.". Важно! Структура может содержать только один элемент. Если параметр не указан, то отбор не используется. <Порядок> (необязательный) Тип: Строка. Строка с именем реквизита справочника, определяющая упорядочивание элементов в выборке. Может быть указано "Код", "Наименование" или имя одного из реквизитов примитивного типа (Число, Строка, Дата, Булево), для которого установлен признак "Индексирование" в значение "Индексировать" или в "Индексировать с дополнительным упорядочиванием" в конфигураторе. После имени реквизита через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Если параметр не указан, то порядок определяется основным представлением справочника. Значение по умолчанию: Пустая строка. Возвращаемое значение: Тип: СправочникВыборка.<Имя справочника>. Описание: Формирует выборку элементов справочника по заданным условиям. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Пример: Номенклатура = Справочники.Номенклатура; Отбор = Новый Структура("ТипНоменклатуры"); Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка(); Отбор.ТипНоменклатуры = Пусто; Выборка = Номенклатура.Выбрать(,,Отбор, "Наименование Убыв"); Пока Выборка.Следующий() Цикл Объект = Выборка.ПолучитьОбъект(); Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар; Попытка Объект.Записать(); Исключение Предупреждение(НСтр("ru = 'Невозможно записать объект';" + " en = 'Can't write object'") +" '" + Объект + '" |" + ОписаниеОшибки(),60); КонецПопытки; КонецЦикла; |
|||
4
Buster007
29.01.18
✎
11:11
|
Вообще странно, вроде когда не понимаешь как работает что-то, то лезешь почитать в первую очередь в СП, а потом в гуглы, и только потом на форум... но похоже это долгий путь и проще сразу написать на форум, а потом скопипастить предложенное решение.
|
|||
5
palima
29.01.18
✎
12:37
|
сп читала, гугл тоже спрашивала. В основном есть примеры переноса элементов, или копирования в неиерархическом справочнике. А у меня поставлена задача скопировать и сменить родителя, поэтому не хватает навыка додумать, чтобы получить желаемый результат(
|
|||
6
Darych
29.01.18
✎
12:43
|
(5) эээ.. кто ж тебе такие задачи ставит? тебе б от силы кофе принести задачу осилить
|
|||
7
palima
29.01.18
✎
12:55
|
(6) мне жаль, что вы вынуждены посещать этот форум ради самоутверждения за счет таких, как я
|
|||
8
1Сергей
29.01.18
✎
12:55
|
Для начала попробуй исправить
//НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код; НовыйЭлем.Родитель = Справочники.ЗемельныйНалог.НайтиПоКоду("04211"); |
|||
9
palima
29.01.18
✎
12:59
|
(8) Спасибо вам большое, все работает как надо. Я поняла, что присваивать необходимо ссылку, а не строку.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |