При переходе на конфигурацию «Конвертация данных 3.0» (КД 3.0) и формат EnterpriseData многие разработчики сталкиваются с вопросом выгрузки и загрузки регистров сведений. В отличие от КД 2.0, где правила настраивались напрямую для таблиц базы данных, в КД 3.0 обмен строится на основе бизнес-сущностей XDTO-пакета.
Разберем подробно архитектурные особенности формата, а также способы настройки переноса независимых и подчиненных регистров сведений.
Проанализируем специфику работы с регистрами сведений в новой концепции обмена:
GUID). Идентификация записи происходит исключительно по значениям ключевых измерений (и по периоду для периодических регистров).Если данные регистра соответствуют объектам, поддержанным форматом EnterpriseData (например, регистр сведений ШтрихкодыНоменклатуры в типовых конфигурациях вроде «Управление торговлей 11»), перенос настраивается по стандартной схеме:
Если для регистра сведений нет прямого соответствия в схеме формата EnterpriseData, перенос можно реализовать через обработчики событий ПОД и ПКО, упаковывая записи регистра в состав связанного ссылочного объекта (например, номенклатуры, контрагента или документа):
AdditionalInfo в виде строки JSON) либо в подходящую табличную часть.Посмотрим на пример программного считывания записей в источнике:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РС.Номенклатура КАК Номенклатура,
| РС.ЗначениеПараметра КАК ЗначениеПараметра
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК РС
|ГДЕ
| РС.Номенклатура = &ОбъектСсылка";
Запрос.УстановитьПараметр("ОбъектСсылка", Источник);
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
Рассмотрим пример загрузки и записи набора в базе-приемнике:
НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ПолученныйОбъектСсылка);
Для Каждого Стр Из ТаблицаДанных Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = ПолученныйОбъектСсылка;
НоваяЗапись.ЗначениеПараметра = Стр.ЗначениеПараметра;
КонецЦикла;
НаборЗаписей.Записать(Истина);
Выясним, как обеспечить корректную передачу данных при регулярном обмене:
ПриЗаписи для регистрации связанных ссылочных объектов.СоздатьНаборЗаписей() всегда обязательно устанавливать строгий отбор по ключевым измерениям, чтобы метод Записать(Истина) не стер сторонние данные регистра.