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

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

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

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

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

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

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

Служебный реквизит в базе-источнике

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

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

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

Создание служебного ПКО

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

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

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

Создание ПКС

Сохраняем.

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

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

На картинке это выглядит следующим образом:

Настройка ПКС

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