Как передать нетиповой справочник через КД 3.0 в Универсальном формате и исправить ошибку «Объект не найден»?

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

При настройке синхронизации данных между конфигурациями «1С:Бухгалтерия предприятия 3.0» с использованием механизмов Конвертации данных 3.0 и Универсального формата (EnterpriseData) разработчики часто сталкиваются с ситуацией, когда требуемого объекта метаданных нет в стандартном формате обмена. Например, необходимо передать справочник РасходыБудущихПериодов.

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

Выясним причину ошибки «Объект не найден»

В технологическом стеке обмена через Универсальный формат схема данных определяется пакетами XDTO конфигурации. Если создать виртуальный объект формата только внутри конфигурации КД 3.0, платформы источника и приемника не смогут его сериализовать или десериализовать. Основные причины возникновения ошибки:

  1. Объект отсутствует в XDTO-пакете: Платформа 1С использует XDTO-схемы для проверки и формирования XML/JSON-сообщений. Если описание типа отсутствует в XDTO-пакете EnterpriseData обеих баз, механизм обмена не распознает сущность.
  2. Справочник не включен в план обмена: Для корректной регистрации изменений и выгрузки ссылки объект конфигурации должен быть добавлен в состав используемого плана обмена (например, СинхронизацияДанныхЧерезУниверсальныйФормат).
  3. Незаписанный объект или отсутствие ссылки: Ошибка «Объект не найден» при считывании формата также может сигнализировать о попытке записать подчиненные данные до момента создания самого объекта в базе-приемнике.

Рассмотрим два основных способа решения этой задачи: проекцию на существующий тип формата и полноценное расширение формата XDTO.

Способ 1. Проекция на существующий объект формата (без снятия с поддержки)

Чтобы не изменять типовую конфигурацию и XDTO-пакеты, проанализируем возможность использования уже имеющихся объектов формата EnterpriseData. Если необходимо передать только основные реквизиты (например, Код и Наименование), целесообразно сопоставить справочник источника с близким по структуре типовым объектом формата — например, Справочник.ПрочиеДоходыИРасходы или Справочник.СтатьиДоходов.

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


#Область ПОД
Процедура ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных) Экспорт
    Если НаправлениеОбмена = "Отправка" Тогда
        Если ПравилаОбработкиДанных.Колонки.Найти("ОчисткаДанных") = Неопределено Тогда
            ПравилаОбработкиДанных.Колонки.Добавить("ОчисткаДанных");
        КонецЕсли;
        ДобавитьПОД_СправочникСсылка_РасходыБудущихПериодов(ПравилаОбработкиДанных);
    КонецЕсли;
КонецПроцедуры

Процедура ДобавитьПОД_СправочникСсылка_РасходыБудущихПериодов(ПравилаОбработкиДанных)
    ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
    ПравилоОбработки.Имя = "СправочникСсылка_РасходыБудущихПериодов";
    ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Справочники.РасходыБудущихПериодов;
    ПравилоОбработки.ОчисткаДанных = Ложь;
    ПравилоОбработки.ИспользуемыеПКО.Добавить("СправочникСсылка_РасходыБудущихПериодов_Справочник");
КонецПроцедуры
#КонецОбласти

#Область ПКО
Процедура ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации) Экспорт
    Если НаправлениеОбмена = "Отправка" Тогда
        ДобавитьПКО_СправочникСсылка_РасходыБудущихПериодов_Справочник(ПравилаКонвертации);
    КонецЕсли;
КонецПроцедуры

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

На стороне приемника в аналогичном модуле настраивается обратное правило (ПКО на получение), где ОбъектФормата «Справочник.ПрочиеДоходыИРасходы» сопоставляется с локальным объектом метаданных Метаданные.Справочники.РасходыБудущихПериодов.

Способ 2. Добавление объекта через расширение формата XDTO

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

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

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

← На главную