Имя: Пароль:
1C
1С v8
Копирование элементов справочника из одной группы в другую
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) Спасибо вам большое, все работает как надо. Я поняла, что присваивать необходимо ссылку, а не строку.