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