Почему не выгружаются документы при использовании Конвертации данных 3.0 и как это исправить?

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

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

Разберем механизм «рукопожатия» в EnterpriseData

В отличие от классической Конвертации данных 2.1, где источник просто выгружает всё, что велят правила, технология EnterpriseData (XDTO) работает более избирательно. Основная причина «пустой» выгрузки заключается в механизме согласования составов данных. Проанализируем, как это устроено внутри системы.

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

Проверяем и обновляем регистр настроек обмена

Выясним причину, по которой объект может отсутствовать в списке поддерживаемых. Проблема чаще всего кроется в том, что в регистре НастройкиОбменаДаннымиXDTO не заполнен реквизит, отвечающий за поддерживаемые типы объектов со стороны приемника. Чтобы исправить это, выполним следующие шаги:

  1. Откроем регистр НастройкиОбменаДаннымиXDTO через «Все функции» или «Функции для технического специалиста».
  2. Найдем запись, соответствующую нашему узлу обмена.
  3. Проанализируем содержимое колонок с составом поддерживаемых объектов.
  4. Чтобы принудительно обновить этот кэш, можно временно очистить записи в этом регистре для конкретного узла. При следующем сеансе синхронизации (или при нажатии кнопки «Проверить подключение» в настройках) базы должны заново обменяться своими возможностями.

Важный нюанс: правила должны быть симметричными. Даже если вы не планируете ничего загружать в приемник, минимальное ПКО на стороне приема должно существовать, чтобы база-приемник сообщила источнику: «Да, я поддерживаю этот тип данных».

Анализируем модуль менеджера обмена

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

Во-первых, процедура ВыполнитьПроцедуруМодуляМенеджера. Именно она является диспетчером, который направляет поток данных к вашим ПКО и ПОД. Если вызов не добавлен, система не «увидит» ваш код. Пример правильного добавления вызова:


Процедура ВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры) Экспорт
    Если ИмяПроцедуры = "ПКО_Документ_ПередачаМатериаловВПроизводство_Отправка_ПриОтправкеДанных" Тогда
        ПКО_Документ_ПередачаМатериаловВПроизводство_Отправка_ПриОтправкеДанных(Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена);
    КонецЕсли;
КонецПроцедуры

Во-вторых, обратим внимание на версионность. В некоторых конфигурациях (например, БП 3.0) существует несколько модулей обмена: МенеджерОбменаЧерезУниверсальныйФормат и МенеджерОбменаЧерезУниверсальныйФормат13. Если ваша база использует версию формата 1.3 или выше, редактировать нужно именно модуль с суффиксом 13.

Настройка функции ПоддерживаемыеОбъектыФормата

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


Функция ПоддерживаемыеОбъектыФормата(ВерсияФормата) Экспорт
    МассивОбъектов = Новый Массив;
    // ... существующие объекты ...
    МассивОбъектов.Добавить("Документ.ПередачаМатериаловВПроизводство");
    Возврат МассивОбъектов;
КонецФункции

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

Как отладить процесс выгрузки

Если данные все равно не попадают в файл, нам поможет отладка. Однако в КД 3.0 отладка осложнена тем, что обмен часто выполняется в фоновом задании. Разберем по шагам, как попасть в нужную точку кода:

  1. Зайдем в настройки параметров учета и временно отключим использование фоновых заданий (или используем запуск с параметром /Debug).
  2. Установим точку останова в процедуре ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки. Это «узкое горлышко», через которое проходят все объекты.
  3. Если мы хотим понять, почему объект отсекается на самом раннем этапе, поставим точку останова в ОбменДаннымиXDTOСервер.ВыполнитьВыгрузкуЗарегистрированныхДанных.

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

Особенности работы с расширениями

Если вы разрабатываете правила обмена внутри расширения конфигурации, убедитесь, что ваши обработчики корректно перехватывают вызовы. Используйте аннотации &Вместо или &После для процедуры ВыполнитьПроцедуруМодуляМенеджера. Если расширение не «подцепилось» к основному механизму, система просто выполнит стандартный код без ваших доработок.

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

← На главную