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

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

При настройке синхронизации данных между конфигурациями 1С часто возникает необходимость добавить в стандартный обмен новые объекты метаданных (документы или справочники). Технология EnterpriseData (универсальный формат) предоставляет для этого гибкие инструменты, но процесс настройки включает множество этапов: от изменения XDTO-пакетов до написания обработчиков в менеджере обмена. Распространенной проблемой является ситуация, когда объект успешно регистрируется на узле плана обмена, его описание появляется в заголовке XML-файла, но сам блок данных в теле сообщения отсутствует. Рассмотрим подробно, как диагностировать и устранить причины такого поведения.

Особенности отладки механизмов обмена

Проанализируем первую проблему, с которой сталкивается разработчик: точки останова в процедурах ПКО_..._ПриОтправкеДанных или ПКО_..._ПриКонвертацииXDTO не срабатывают. Выясним причину этого явления. В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) обмен данными практически всегда выполняется в фоновом задании.

Для успешной отладки выполним следующие шаги:

  1. Откроем конфигуратор и перейдем в меню Сервис — Параметры.
  2. На вкладке Запуск 1С:Предприятия — Отладка установим флажок Отлаживать фоновые задания.
  3. Если обмен запускается из пользовательского интерфейса кнопкой "Синхронизировать", создается отдельный сеанс на сервере, к которому отладчик должен подключиться автоматически.
  4. В некоторых случаях удобнее использовать обработку "Регистрация изменений для обмена", где можно выбрать конкретный объект и запустить выгрузку непосредственно в текущем сеансе (если конфигурация позволяет выгрузку без фонового задания).

Регистрация ПКО в менеджере обмена

Даже если мы создали процедуры обработчиков в модуле МенеджерОбменаЧерезУниверсальныйФормат, система не узнает о них автоматически. Процесс регистрации правил конвертации объектов (ПКО) требует строгого соблюдения структуры. Рассмотрим, как правильно объявить новый документ в коде.

В модуле менеджера обмена найдем или переопределим процедуру ЗаполнитьПравилаКонвертацииОбъектов. В ней обязательно должен присутствовать вызов вашей процедуры инициализации правила:


Процедура ЗаполнитьПравилаКонвертацииОбъектов(ПравилаКонвертации) Экспорт
    // Стандартные правила...
    
    // Добавляем вызов нашего нового правила
    ДобавитьПКО_Документ_ВашНовыйДокумент_Выгрузка(ПравилаКонвертации);
КонецПроцедуры

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


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

Проверка версионирования формата

Механизм EnterpriseData поддерживает работу с разными версиями формата (например, 1.10, 1.13, 1.15). Если вы расширили XDTO-пакет и добавили правила в код, но используете версию формата, которая была настроена в узле обмена ранее, ваши изменения могут не подтянуться. Проанализируем функцию ВерсииФормата() в менеджере обмена.

Убедимся, что:

  1. Новый документ добавлен в состав правил именно для той версии, которая выбрана в настройках синхронизации в пользовательском режиме.
  2. В расширении XDTO-пакета правильно указан URI пространства имен. Даже небольшое расхождение в строке URI (например, лишний слэш в конце или разный регистр) приведет к тому, что система не найдет определение типа.

Нюансы работы через расширения конфигурации

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

Иногда система кэширует структуру правил. После внесения изменений в код расширения или в XDTO-пакет рекомендуется выполнить следующие действия:

Соответствие пространства имен (Namespace) и структуры XDTO

Если в заголовке XML-файла (секция Header или FormatDescription) документ упоминается, а в секции Data его нет — это явный признак того, что объект был выбран из базы, но не прошел сериализацию. Проанализируем возможные причины:

  1. Минимальное количество (Lower Bound): В XDTO-пакете для свойств документа или для самого элемента в списке может стоять некорректное значение.
  2. Ошибки в URI: Проверьте, что в коде менеджера обмена при выгрузке используется именно тот URI, который указан в вашем расширении XDTO-пакета.
  3. Логика фильтрации: Загляните в процедуру ПКО_..._ПриОтправкеДанных. Если в ней по какой-то причине устанавливается Отказ = Истина, объект будет удален из очереди регистрации как "обработанный", но в файл не попадет. Попробуйте временно закомментировать весь код в обработчиках, оставив их пустыми, чтобы проверить базовую выгрузку.

Выясним, как проверить состав данных перед отправкой. В типовых конфигурациях в форме настройки синхронизации есть кнопка "Состав отправляемых данных". Откройте ее, найдите свой документ и убедитесь, что он зарегистрирован. Если регистрация есть, а в файле данных нет — проблема кроется именно в сопоставлении ПКО и XDTO-типа в модуле менеджера обмена.

← На главную