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

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

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

Разберем подробно архитектурные особенности формата, а также способы настройки переноса независимых и подчиненных регистров сведений.

Архитектурные особенности формата EnterpriseData

Проанализируем специфику работы с регистрами сведений в новой концепции обмена:

  1. Отсутствие ссылочной целостности: У записей регистра сведений нет уникального идентификатора (GUID). Идентификация записи происходит исключительно по значениям ключевых измерений (и по периоду для периодических регистров).
  2. Ориентация на бизнес-сущности: Формат EnterpriseData содержит описания справочников, документов и некоторых предопределенных сущностей (например, штрихкодов, цен или курсов валют), но не дублирует структуру произвольных таблиц конфигурации 1С.

Способ 1. Использование типовых типов XDTO и правил конвертации

Если данные регистра соответствуют объектам, поддержанным форматом EnterpriseData (например, регистр сведений ШтрихкодыНоменклатуры в типовых конфигурациях вроде «Управление торговлей 11»), перенос настраивается по стандартной схеме:

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

Способ 2. Перенос данных регистра через структуры и связанные объекты

Если для регистра сведений нет прямого соответствия в схеме формата EnterpriseData, перенос можно реализовать через обработчики событий ПОД и ПКО, упаковывая записи регистра в состав связанного ссылочного объекта (например, номенклатуры, контрагента или документа):

  1. На стороне источника: В обработчике ПКО ссылочного объекта (например, «Перед выгрузкой» или «При отправке») считываем данные регистра сведений и помещаем их в дополнительное свойство XDTO-объекта (узел AdditionalInfo в виде строки JSON) либо в подходящую табличную часть.
  2. На стороне приемника: В обработчике «После загрузки» или «После обработки» извлекаем переданные данные и программно записываем их в целевой регистр сведений.

Посмотрим на пример программного считывания записей в источнике:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	РС.Номенклатура КАК Номенклатура,
    |	РС.ЗначениеПараметра КАК ЗначениеПараметра
    |ИЗ
    |	РегистрСведений.ДополнительныеСведения КАК РС
    |ГДЕ
    |	РС.Номенклатура = &ОбъектСсылка";
Запрос.УстановитьПараметр("ОбъектСсылка", Источник);
ТаблицаДанных = Запрос.Выполнить().Выгрузить();

Рассмотрим пример загрузки и записи набора в базе-приемнике:


НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ПолученныйОбъектСсылка);

Для Каждого Стр Из ТаблицаДанных Цикл
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Номенклатура = ПолученныйОбъектСсылка;
    НоваяЗапись.ЗначениеПараметра = Стр.ЗначениеПараметра;
КонецЦикла;

НаборЗаписей.Записать(Истина);

Особенности регистрации изменений

Выясним, как обеспечить корректную передачу данных при регулярном обмене:

  1. Для независимых регистров: Регистр необходимо включить в состав плана обмена, используемого для синхронизации, либо использовать подписки на события ПриЗаписи для регистрации связанных ссылочных объектов.
  2. Для подчиненных регистров: Регистрация набора записей обычно не требуется отдельно — достаточно зарегистрировать к обмену сам документ-регистратор. При проведении документа в базе-приемнике движения сформируются автоматически.
  3. Установка отборов при записи: При программной записи через СоздатьНаборЗаписей() всегда обязательно устанавливать строгий отбор по ключевым измерениям, чтобы метод Записать(Истина) не стер сторонние данные регистра.
← На главную