Как правильно настроить перенос регистра сведений в Конвертации данных 3.0?

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

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

Понимание архитектуры переноса

Основное отличие заключается в том, что в КД 3.0 обмен данными происходит не между таблицами базы данных, а через промежуточный формат — XML-схему. Если вы не видите нужного регистра в объектах формата, это означает, что стандартная схема EnterpriseData не содержит прямого соответствия для вашего регистра.

Для реализации обмена данными регистра сведений мы используем «объект формата». Чаще всего это Справочник, который выступает контейнером для передачи записей регистра. Рассмотрим, как это реализовать на практике.

Шаг 1: Подготовка объектов формата

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

  1. Откройте структуру формата в КД 3.0.
  2. Найдите объект формата, который будет соответствовать вашему регистру.
  3. Если подходящего нет, расширьте формат, добавив Справочник, содержащий реквизиты, соответствующие измерениям и ресурсам вашего регистра.

Шаг 2: Настройка правил конвертации объектов (ПКО)

После того как объект формата определен, переходим к настройке ПКО.

Важно: Для ключевых свойств достаточно настроить ПКС, которые обеспечат однозначную идентификацию записи. Если измерений конфигурации больше, чем реквизитов формата, или у вас возникла необходимость передать специфичные данные, переходим к следующему шагу.

Шаг 3: Использование AdditionalInfo для передачи данных

Если структура формата жестко ограничена, а вам необходимо передать дополнительные измерения или реквизиты, используйте свойство AdditionalInfo. Это универсальный механизм, позволяющий передавать произвольные данные в формате JSON.

Рассмотрим, как реализовать этот механизм:

  1. В обработчике ПередВыгрузкой (или ПриВыгрузке) сформируйте структуру с необходимыми данными.
  2. Преобразуйте эту структуру в JSON-строку.
  3. Запишите полученную строку в свойство AdditionalInfo объекта формата.

Пример кода для выгрузки данных в AdditionalInfo:


// В обработчике события ПКО
СтруктураДопДанных = Новый Структура;
СтруктураДопДанных.Вставить(\"ДополнительноеИзмерение\", Объект.ДополнительноеИзмерение);
СтруктураДопДанных.Вставить(\"ТипДанных\", \"GUID\");

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураДопДанных);

Источник.AdditionalInfo = ЗаписьJSON.Закрыть();

Шаг 4: Обработка данных на стороне приемника

После того как данные были успешно выгружены в XML, на стороне приемника их нужно правильно считать и распределить по полям регистра. Для этого используем обработчик ПослеЗагрузки в ПКО.

В этом обработчике вам нужно выполнить следующие действия:

  1. Прочитать значение из AdditionalInfo.
  2. Десериализовать JSON обратно в структуру 1С.
  3. Заполнить свойства объекта регистра сведений значениями из структуры.

Пример кода для обработки на приемнике:


// В обработчике ПослеЗагрузки ПКО
Если ЗначениеЗаполнено(Объект.AdditionalInfo) Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Объект.AdditionalInfo);
    ДанныеСтруктура = ПрочитатьJSON(ЧтениеJSON);
    
    // Присвоение значений в поля регистра
    Объект.ДополнительноеИзмерение = ДанныеСтруктура.ДополнительноеИзмерение;
КонецЕсли;

Заключение и рекомендации по отладке

Работа с КД 3.0 требует внимательного отношения к XDTO-пакетам. Если вы столкнулись с необходимостью работы с составными типами, помните, что в описании формата EnterpriseData можно указывать несколько типов в поле «Тип» или использовать anyType. Однако наиболее надежным подходом остается расширение формата или использование AdditionalInfo.

Совет: Всегда анализируйте файлы обмена, которые генерирует система. Выгрузите любой типовой объект в XML, посмотрите структуру тегов и используйте этот подход как образец для ваших правил конвертации. Это самый быстрый способ разобраться в сложной структуре обмена КД 3.0.

← На главную