Вход | Регистрация

1С:Предприятие ::

Метки: 

Копирование элементов справочника из одной группы в другую

Я
   palima
 
29.01.18 - 10:34
Здравствуйте, помогите пожалуйста разобраться с моей проблемой...
Пишу небольшую обработку, которая должна скопировать все элементы справочника из одной группы в другую. Пытаюсь сделать так:

  Док = Справочники.ЗемельныйНалог.Выбрать();
  Пока Док.Следующий() Цикл
      ДокОбъект = Док.ПолучитьОбъект();
      Если ДокОбъект.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04202").Код Тогда
          НовыйЭлем = ДокОбъект.Скопировать();
          НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код;
      КонецЕсли;
      НовыйЭлем.Записать();
  КонецЦикла;
КонецПроцедуры



ничего не выходит(
 
 
   lodger
 
1 - 29.01.18 - 10:39
во 1) никогда не используйте поиски и прочие чтения бд в цикле.
т.е. надо убрать Справочники.ЗемельныйНалог.НайтиПоКоду("04202") из цикла.
2) ограничьте выборку добавив отбор по родителю в Выбрать().

3) вы уверены, что надо проводить сравнение по Коду? может достаточно сами ссылки сравнивать?

4) НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код;
вы вообще понимаете куда и что вы пытаетесь записать?
   vicof
 
2 - 29.01.18 - 10:56
ДокОбъект = Док.ПолучитьОбъект();
ДокОбъект.Родитель = Родитель;
ДокОбъект.Записать();
   Buster007
 
3 - 29.01.18 - 11:09
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
Выбрать (Select)
Синтаксис:

Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Параметры:

<Родитель> (необязательный)

Тип: СправочникСсылка.<Имя справочника>.
Отбор по родителю. Имеет смысл только для многоуровневых справочников. Если параметр не задан, то отбор по родителю не производится. Чтобы отобрать элементы верхнего уровня, нужно в качестве данного параметра указать пустую ссылку на элемент справочника.
<Владелец> (необязательный)

Тип: СправочникСсылка.<Имя справочника>. 
Отбор по владельцу. Имеет смысл только для подчиненных справочников. Если параметр не задан, то отбор по владельцу не производится. 
<Отбор> (необязательный)

Тип: Структура.
Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю. В качестве полей для отбора могут задаваться только поля "Код", "Наименование" и реквизиты справочника, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядоч.".
Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.
<Порядок> (необязательный)

Тип: Строка.
Строка с именем реквизита справочника, определяющая упорядочивание элементов в выборке. Может быть указано "Код", "Наименование" или имя одного из реквизитов примитивного типа (Число, Строка, Дата, Булево), для которого установлен признак "Индексирование" в значение "Индексировать" или в "Индексировать с дополнительным упорядочиванием" в конфигураторе. После имени реквизита через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Если параметр не указан, то порядок определяется основным представлением справочника.
Значение по умолчанию: Пустая строка.
Возвращаемое значение:

Тип: СправочникВыборка.<Имя справочника>.

Описание:

Формирует выборку элементов справочника по заданным условиям.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:

Номенклатура = Справочники.Номенклатура;
Отбор = Новый Структура("ТипНоменклатуры");
Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка();
Отбор.ТипНоменклатуры = Пусто;
Выборка = Номенклатура.Выбрать(,,Отбор, "Наименование Убыв");
Пока Выборка.Следующий()  Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    Попытка
        Объект.Записать();
    Исключение
        Предупреждение(НСтр("ru = 'Невозможно записать объект';"
           + " en = 'Can't write object'")
           +" '" + Объект + '"
           |" + ОписаниеОшибки(),60);
    КонецПопытки;
КонецЦикла;
   Buster007
 
4 - 29.01.18 - 11:11
Вообще странно, вроде когда не понимаешь как работает что-то, то лезешь почитать в первую очередь в СП, а потом в гуглы, и только потом на форум... но похоже это долгий путь и проще сразу написать на форум, а потом скопипастить предложенное решение.
   palima
 
5 - 29.01.18 - 12:37
сп читала, гугл тоже спрашивала. В основном есть примеры переноса элементов, или копирования в неиерархическом справочнике. А у меня поставлена задача скопировать и сменить родителя, поэтому не хватает навыка додумать, чтобы получить желаемый результат(
   Darych
 
6 - 29.01.18 - 12:43
(5) эээ.. кто ж тебе такие задачи ставит? тебе б от силы кофе принести задачу осилить
   palima
 
7 - 29.01.18 - 12:55
(6) мне жаль, что вы вынуждены посещать этот форум ради самоутверждения за счет таких, как я
   1Сергей
 
8 - 29.01.18 - 12:55
Для начала попробуй исправить

//НовыйЭлем.Родитель.Код = Справочники.ЗемельныйНалог.НайтиПоКоду("04211").Код;

НовыйЭлем.Родитель = Справочники.ЗемельныйНалог.НайтиПоКоду("04211");
   palima
 
9 - 29.01.18 - 12:59
(8) Спасибо вам большое, все работает как надо. Я поняла, что присваивать необходимо ссылку, а не строку.


Список тем форума
Рекламное место пустует Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит Тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует