При настройке синхронизации данных между конфигурациями «1С:Бухгалтерия предприятия 3.0» с использованием механизмов Конвертации данных 3.0 и Универсального формата (EnterpriseData) разработчики часто сталкиваются с ситуацией, когда требуемого объекта метаданных нет в стандартном формате обмена. Например, необходимо передать справочник РасходыБудущихПериодов.
Если добавить объект формата вручную в КД 3.0, настроить ПKO (правила конвертации объектов) и ПОД (правила обработки данных), при выгрузке или загрузке может возникать ошибка «Объект не найден». Разберем подробнее причинно-следственные связи этой проблемы и проанализируем варианты ее решения.
В технологическом стеке обмена через Универсальный формат схема данных определяется пакетами XDTO конфигурации. Если создать виртуальный объект формата только внутри конфигурации КД 3.0, платформы источника и приемника не смогут его сериализовать или десериализовать. Основные причины возникновения ошибки:
EnterpriseData обеих баз, механизм обмена не распознает сущность.СинхронизацияДанныхЧерезУниверсальныйФормат).Рассмотрим два основных способа решения этой задачи: проекцию на существующий тип формата и полноценное расширение формата XDTO.
Чтобы не изменять типовую конфигурацию и XDTO-пакеты, проанализируем возможность использования уже имеющихся объектов формата EnterpriseData. Если необходимо передать только основные реквизиты (например, Код и Наименование), целесообразно сопоставить справочник источника с близким по структуре типовым объектом формата — например, Справочник.ПрочиеДоходыИРасходы или Справочник.СтатьиДоходов.
В модуле менеджера обмена через универсальный формат формируются стандартные процедуры регистрации ПОД и ПКО. Посмотрим на пример кода заполнения правил для выгрузки справочника РасходыБудущихПериодов:
#Область ПОД
Процедура ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных) Экспорт
Если НаправлениеОбмена = "Отправка" Тогда
Если ПравилаОбработкиДанных.Колонки.Найти("ОчисткаДанных") = Неопределено Тогда
ПравилаОбработкиДанных.Колонки.Добавить("ОчисткаДанных");
КонецЕсли;
ДобавитьПОД_СправочникСсылка_РасходыБудущихПериодов(ПравилаОбработкиДанных);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьПОД_СправочникСсылка_РасходыБудущихПериодов(ПравилаОбработкиДанных)
ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
ПравилоОбработки.Имя = "СправочникСсылка_РасходыБудущихПериодов";
ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Справочники.РасходыБудущихПериодов;
ПравилоОбработки.ОчисткаДанных = Ложь;
ПравилоОбработки.ИспользуемыеПКО.Добавить("СправочникСсылка_РасходыБудущихПериодов_Справочник");
КонецПроцедуры
#КонецОбласти
#Область ПКО
Процедура ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации) Экспорт
Если НаправлениеОбмена = "Отправка" Тогда
ДобавитьПКО_СправочникСсылка_РасходыБудущихПериодов_Справочник(ПравилаКонвертации);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьПКО_СправочникСсылка_РасходыБудущихПериодов_Справочник(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "СправочникСсылка_РасходыБудущихПериодов_Справочник";
ПравилоКонвертации.ОбъектДанных = Метаданные.Справочники.РасходыБудущихПериодов;
// Используем существующий объект формата вместо несуществующего
ПравилоКонвертации.ОбъектФормата = "Справочник.ПрочиеДоходыИРасходы";
ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору";
НоваяСтрока = ПравилоКонвертации.Свойства.Добавить();
НоваяСтрока.СвойствоКонфигурации = "Код";
НоваяСтрока.СвойствоФормата = "Код";
НоваяСтрока = ПравилоКонвертации.Свойства.Добавить();
НоваяСтрока.СвойствоКонфигурации = "Наименование";
НоваяСтрока.СвойствоФормата = "Наименование";
КонецПроцедуры
#КонецОбласти
На стороне приемника в аналогичном модуле настраивается обратное правило (ПКО на получение), где ОбъектФормата «Справочник.ПрочиеДоходыИРасходы» сопоставляется с локальным объектом метаданных Метаданные.Справочники.РасходыБудущихПериодов.
Если сопоставление с существующими типами формата не подходит и требуется передавать специфический состав реквизитов, выполним правильное расширение формата обмена по шагам:
РасходыБудущихПериодов в обеих конфигурациях был добавлен в состав используемого плана обмена (СинхронизацияДанныхЧерезУниверсальныйФормат).ОбменДаннымиПереопределяемый регистрируем расширение формата, чтобы БСП подключала его к базовой схеме EnterpriseData.Применение первого способа позволяет быстро настроить обмен без осложнения последующих обновлений типовых конфигураций. Второй способ оправдан при выгрузке сложных специфических справочников с уникальным набором реквизитов и табличных частей.