1С:Конвертация данных. Как заполнить реквизит в приемнике определенным значением
Рубрика: 1С:Предприятие -> Программирование
Метки: 1С:Предприятие | инструменты | Конвертация данных | примеры | программирование
Просмотров: 46368
При разработке правил конвертации данных, нередко возникают ситуации, когда требуется заполнить определенные реквизиты конвертируемого объекта в приемнике. Рассмотрим пример. В конфигурациях (Источник, Приемник) есть справочники «Контрагенты». Отличаются они набором реквизитов. В конфигурации «Приемник» - у справочника «Контрагенты» есть обязательный для заполнения реквизит «Организация». В «Источник» такого реквизита нет, поэтому как вариант решения задачи можно заполнять реквизит «Организация» непосредственно при загрузке в приемник.
Как решить эту задачу с минимальными затратами? Есть несколько способов. Самый простой случай – передать предопределенное значение. Вариант «прокатит», если в конфигурации «Приемник» справочник «Организации» содержит нужный нам предопределенный элемент. В этом случае мы должны создать для соответствующего правила конвертации объекта (в нашем случае для ПКО «Контрагенты») обработчик события «После загрузки» и в нем обратиться к предопределенному элементу:
Объект.Организация = Справочники.Организации.МояОрганизация;
Либо сделать это в обработчике "При выгрузке" нужно нам свойства, воспользовавшись выражением:
Выражение = "Справочники.Организации.ИмяПредопределенногоЭлемента";
Аналогичным образом можно выполнить поиск или получение значения из какого-либо другого места. Тут как душа пожелает.
Однако, бывают более сложные случаи переноса данных. Пример из реальной практикb. В базе «Приемник» у справочника есть реквизит «Подразделение», а в базе «источник» ничего похожего нет. Более того, подразделение должно ставиться элементам не одно и то же, а выбираться на основе определенного ключа. Сам же этот ключ содержится в одноименном реквизите справочника «Контрагенты» базы «Источник». На практике это может выглядеть так:
Наша задача во время конвертации брать значение из реквизита «КОНТ_Подразделение» и по нему выполнять поиск в справочнике «Подразделения» базы приемник. Для упрощения договоримся, что значение «КОНТ_Подразделение» совпадает с кодом элемента справочника «Подразделения».
Первым делом нам понадобится служебное правило конвертации объекта. Добавляем ПКО и в мастере создания заполняем:
- Объект информационной базы источника. Оставляем пустым.
- Объект информационной базы приемника. Выбираем ссылку на объект метаданных (в моем случае «СправочникСсылка.ПодразделенияОрганизаций»).
- Имя правила конвертации объектов. Указываем имя правила. Я в качестве имени указал «Агенты_ПодразделениеОрганизаций».
Нажимаем "далее" и в следующем окне мастера обязательно снимаем флажок с «Искать объект приемника по внутреннему идентификатору объекта источника». Сохраняем получившееся правило конвертации объекта.
Отлично, ПКО есть. Теперь создадим для него одно правило конвертации свойств (ПКС). В окне создания нового ПКС необходимо заполнить:
- Источник. Оставляем поле пустым.
- Приемник. Выбираем «Код».
- Ставим флаг «Поиск объекта при загрузке по свойству»;
- В обработчике события «Перед выгрузкой» пишем незамысловатую строчку кода:
Значение = Источник;
Сохраняем.
Теперь остается только создать ПКС для переносимого объекта (в моем случае справочник «Агенты») и указать для свойства правило конвертации объекта, которое мы только что создали. Выбираем ПКО «Агенты» (вы можете проделать подобный трюк для другого ПКО) и добавляем новое ПКС. В окне создания ПКС заполняем:
На картинке это выглядит следующим образом:
Все, на этой ноте можно поставить жирную точку. Нестандартное правило готово и можно приступать к тестированию.