Как передать ссылочный параметр и выгрузить записи регистра сведений в Конвертации данных 2.1?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Суть проблемы и механика работы со ссылками

Разберем типичную ситуацию: при выгрузке элемента справочника требуется записать данные в регистр сведений в разрезе номенклатуры, серии и самого сертификата. Ссылка на переносимый объект должна быть корректно преобразована на стороне приемника.

Главная особенность заключаются в следующем: в обработчике ПослеВыгрузки переменная Источник представляет собой объект (СправочникОбъект), а не ссылку (СправочникСсылка). Передача объекта напрямую вместо ссылки может привести к ошибкам сериализации в XML или некорректной загрузке измерений регистра. Если обмен выполняется через планы обмена, передавать объект вместо ссылки вовсе недопустимо.

Шаг 1. Настройка ПКО целевого регистра сведений

Проанализируем порядок настройки Правила Конвертации Объектов (ПКО) для регистра сведений:

  1. Создадим новое ПКО для регистра сведений (например, ОбластьДействияСертификатов).
  2. В таблице Правил Конвертации Свойств (ПКС) для каждого измерения или ресурса, значение которого будет передаваться извне, установим флаг «Получить из входящих данных».
  3. Для ссылочных измерений (Номенклатура, Серия, Сертификат) укажем соответствующие ПКО. Это позволит платформе при загрузке автоматически сконвертировать переданную ссылку в объект приемника.

Шаг 2. Выгрузка данных в обработчике «ПослеВыгрузки»

Посмотрим, как правильно сформировать структуру данных и передать ее в функцию ВыгрузитьПоПравилу. Вызов выполняется в обработчике ПослеВыгрузки ПКО исходного справочника.

Ключи передаваемой структуры должны строго совпадать с именами свойств (ПКС) в целевом ПКО регистра сведений.

Рассмотрим пример кода:


// Формируем структуру входящих данных для ПКО регистра сведений
ВходящиеДанныеРС = Новый Структура;
ВходящиеДанныеРС.Вставить("Номенклатура", Источник.Владелец);
ВходящиеДанныеРС.Вставить("Серия", Источник.Серия);
ВходящиеДанныеРС.Вставить("СертификатНоменклатуры", Источник.Ссылка); // Обязательно передаем Ссылку!

// Выгружаем данные по правилу конвертации регистра сведений
ВыгрузитьПоПравилу(, , ВходящиеДанныеРС, , "ОбластьДействияСертификатов");

Важные технические нюансы

Выясним несколько существенных моментов, которые нужно учитывать при реализации этого подхода:

  1. Передача ссылки: В структуру входящих данных обязательно передаем именно Источник.Ссылка, а не Источник. В обработчиках КД Источник — это объект записи, и передача его целиком вызывает ошибки при выгрузке.
  2. Порядок объектов в XML: При использовании ВыгрузитьПоПравилу внутри выгрузки справочника узел регистра в итоговом XML-файле может встать раньше узла самого ссылочного объекта. Из-за этого при загрузке регистра объект-приемник может еще не создаться, и измерение заполнится пустой ссылкой.
  3. Альтернативное решение (создание записей при загрузке): Чтобы избежать проблем с порядком узлов в XML, записи регистра сведений можно создавать на стороне приемника в обработчике ПослеЗагрузки основного ПКО через менеджер записи (РегистрыСведений.<ИмяРегистра>.СоздатьМенеджерЗаписи()). К моменту выполнения ПослеЗагрузки ссылка на объект-приемник гарантированно существует.
← На главную