Персональный блог Игоря Антонова aka "spider_net"

1С:Конвертация данных. Как заполнить реквизит в приемнике определенным значением

1С:Конвертация данных. Как заполнить реквизит в приемнике определенным значением

При разработке правил конвертации данных, нередко возникают ситуации, когда требуется заполнить определенные реквизиты конвертируемого объекта в приемнике. Рассмотрим пример. В конфигурациях (Источник, Приемник) есть справочники «Контрагенты». Отличаются они набором реквизитов. В конфигурации «Приемник» - у справочника «Контрагенты» есть обязательный для заполнения реквизит «Организация». В «Источник» такого реквизита нет, поэтому как вариант решения задачи можно заполнять реквизит «Организация» непосредственно при загрузке в приемник.

Как решить эту задачу с минимальными затратами? Есть несколько способов. Самый простой случай – передать предопределенное значение. Вариант «прокатит», если в конфигурации «Приемник» справочник «Организации» содержит нужный нам предопределенный элемент. В этом случае мы должны создать для соответствующего правила конвертации объекта (в нашем случае для ПКО «Контрагенты») обработчик события «После загрузки» и в нем обратиться к предопределенному элементу:

Объект.Организация = Справочники.Организации.МояОрганизация;

Либо сделать это в обработчике "При выгрузке" нужно нам свойства, воспользовавшись выражением:

Выражение = "Справочники.Организации.ИмяПредопределенногоЭлемента";

Аналогичным образом можно выполнить поиск или получение значения из какого-либо другого места. Тут как душа пожелает.

Однако, бывают более сложные случаи переноса данных. Пример из реальной практикb. В базе «Приемник» у справочника есть реквизит «Подразделение», а в базе «источник» ничего похожего нет. Более того, подразделение должно ставиться элементам не одно и то же, а выбираться на основе определенного ключа. Сам же этот ключ содержится в одноименном реквизите справочника «Контрагенты» базы «Источник». На практике это может выглядеть так:

sluzhebnyjrekvizit.jpg

Наша задача во время конвертации брать значение из реквизита «КОНТ_Подразделение» и по нему выполнять поиск в справочнике «Подразделения» базы приемник. Для упрощения договоримся, что значение «КОНТ_Подразделение» совпадает с кодом элемента справочника «Подразделения».

Первым делом нам понадобится служебное правило конвертации объекта. Добавляем ПКО и в мастере создания заполняем:

  • Объект информационной базы источника. Оставляем пустым.
  • Объект информационной базы приемника. Выбираем ссылку на объект метаданных (в моем случае «СправочникСсылка.ПодразделенияОрганизаций»).
  • Имя правила конвертации объектов. Указываем имя правила. Я в качестве имени указал «Агенты_ПодразделениеОрганизаций».

Нажимаем "далее" и в следующем окне мастера обязательно снимаем флажок с «Искать объект приемника по внутреннему идентификатору объекта источника». Сохраняем получившееся правило конвертации объекта.

Отлично, ПКО есть. Теперь создадим для него одно правило конвертации свойств (ПКС). В окне создания нового ПКС необходимо заполнить:

  • Источник. Оставляем поле пустым.
  • Приемник. Выбираем «Код».
  • Ставим флаг «Поиск объекта при загрузке по свойству»;
  • В обработчике события «Перед выгрузкой» пишем незамысловатую строчку кода:
Значение = Источник;

Сохраняем.

Теперь остается только создать ПКС для переносимого объекта (в моем случае справочник «Агенты») и указать для свойства правило конвертации объекта, которое мы только что создали. Выбираем ПКО «Агенты» (вы можете проделать подобный трюк для другого ПКО) и добавляем новое ПКС. В окне создания ПКС заполняем:

  • Источник. Наш реквизит, содержащий код для поиска в другом справочнике (КОНТ_Подразделение);
  • Приемник. Реквизит приемник. В моем случае «ПодразделениеОрганизации»;
  • Правило. Созданное нами ПКО – «Агенты_ПодразделениеОрганизаций»;
  • На картинке это выглядит следующим образом:

    Все, на этой ноте можно поставить жирную точку. Нестандартное правило готово и можно приступать к тестированию.

    Оставьте комментарий!
    comments powered by HyperComments