При настройке правил обмена в конфигурации «Конвертация данных 2.1» часто возникает необходимость при выгрузке основного объекта (например, справочника) одновременно сформировать записи в связанном регистре сведений. Измерения регистра при этом требуют корректного ссылочного типа, а не примитивного значения или УИД. Рассмотрим, как правильно передавать ссылочные данные и выгружать записи с использованием механизма входящих данных и функции ВыгрузитьПоПравилу.
Разберем типичную ситуацию: при выгрузке элемента справочника требуется записать данные в регистр сведений в разрезе номенклатуры, серии и самого сертификата. Ссылка на переносимый объект должна быть корректно преобразована на стороне приемника.
Главная особенность заключаются в следующем: в обработчике ПослеВыгрузки переменная Источник представляет собой объект (СправочникОбъект), а не ссылку (СправочникСсылка). Передача объекта напрямую вместо ссылки может привести к ошибкам сериализации в XML или некорректной загрузке измерений регистра. Если обмен выполняется через планы обмена, передавать объект вместо ссылки вовсе недопустимо.
Проанализируем порядок настройки Правила Конвертации Объектов (ПКО) для регистра сведений:
ОбластьДействияСертификатов).Посмотрим, как правильно сформировать структуру данных и передать ее в функцию ВыгрузитьПоПравилу. Вызов выполняется в обработчике ПослеВыгрузки ПКО исходного справочника.
Ключи передаваемой структуры должны строго совпадать с именами свойств (ПКС) в целевом ПКО регистра сведений.
Рассмотрим пример кода:
// Формируем структуру входящих данных для ПКО регистра сведений
ВходящиеДанныеРС = Новый Структура;
ВходящиеДанныеРС.Вставить("Номенклатура", Источник.Владелец);
ВходящиеДанныеРС.Вставить("Серия", Источник.Серия);
ВходящиеДанныеРС.Вставить("СертификатНоменклатуры", Источник.Ссылка); // Обязательно передаем Ссылку!
// Выгружаем данные по правилу конвертации регистра сведений
ВыгрузитьПоПравилу(, , ВходящиеДанныеРС, , "ОбластьДействияСертификатов");
Выясним несколько существенных моментов, которые нужно учитывать при реализации этого подхода:
Источник.Ссылка, а не Источник. В обработчиках КД Источник — это объект записи, и передача его целиком вызывает ошибки при выгрузке.ВыгрузитьПоПравилу внутри выгрузки справочника узел регистра в итоговом XML-файле может встать раньше узла самого ссылочного объекта. Из-за этого при загрузке регистра объект-приемник может еще не создаться, и измерение заполнится пустой ссылкой.ПослеЗагрузки основного ПКО через менеджер записи (РегистрыСведений.<ИмяРегистра>.СоздатьМенеджерЗаписи()). К моменту выполнения ПослеЗагрузки ссылка на объект-приемник гарантированно существует.