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

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

В практике разработчика 1С часто встречается парадоксальная ситуация: файл обмена, сформированный при синхронизации данных (например, из «Бухгалтерии предприятия 3.0»), успешно загружается в приемник (например, «Управление торговлей 10.3») через стандартную кнопку «Синхронизировать», но при попытке загрузить этот же самый файл через «Универсальный обмен данными в формате XML» возникают ошибки алгоритмов или дублирование данных. Давайте подробно разберем, почему это происходит, и проанализируем внутренние механизмы платформы, которые определяют такое поведение.

Разберем разницу форматов: Конвертация данных 2.0 vs EnterpriseData (3.0)

Первое, на что мы должны обратить внимание — это формат самого XML-файла. В экосистеме 1С существуют два принципиально разных подхода к обмену:

  1. Правила обмена (Конвертация 2.0): Этот формат используется в старых конфигурациях и в универсальной обработке V8Exch82.epf. Он жестко привязан к структуре метаданных конкретных конфигураций.
  2. Универсальный формат (EnterpriseData / Конвертация 3.0): Современные конфигурации на базе БСП (Библиотеки стандартных подсистем), такие как БП 3.0, по умолчанию используют формат на основе XDTO-пакетов.

Проанализируем ситуацию: когда вы нажимаете «Синхронизировать» в БП 3.0, система формирует файл в формате EnterpriseData. Типовая универсальная обработка XML настроена на поиск узлов и тегов, специфичных для версии 2.0 (например, <ПравилаОбмена>, <Объект>). Если она встречает структуру XDTO, она либо не видит данных вовсе, либо пытается интерпретировать их некорректно, что и приводит к ошибкам алгоритмов.

Контекст выполнения и параметры обмена

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

В универсальной обработке эти параметры по умолчанию не заполнены. Рассмотрим пример кода, который может вызвать ошибку в универсальной загрузке, но отлично сработать в плане обмена:


// Ошибка возникнет, если Параметры.ОрганизацияПоУмолчанию не определена
Если Не ЗначениеЗаполнено(Параметры.ОрганизацияПоУмолчанию) Тогда
    ВызватьИсключение "Не задана организация для подстановки в документы!";
КонецЕсли;

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

Использование таблиц соответствия (GUID)

Посмотрим, как происходит поиск объектов. Планы обмена активно используют специализированный регистр сведений — «Соответствия объектов информационных баз». Когда загрузка идет через механизм синхронизации, система сначала выполняет поиск в этом регистре по паре «УникальныйИдентификатор (GUID) — ПланОбмена».

Универсальная обработка работает иначе:

Если в базе-приемнике объект уже существует, но его GUID отличается от того, что в файле, и при этом в регистре соответствий связь уже установлена, то план обмена найдет объект успешно. Универсальная же обработка либо создаст дубль, либо выдаст ошибку поиска, так как она игнорирует регистр соответствий планов обмена.

Режим записи объектов и флаг ОбменДанными.Загрузка

Важным отличием является режим записи объектов в базу данных. В планах обмена практически всегда устанавливается программный флаг ОбменДанными.Загрузка = Истина. Рассмотрим, на что это влияет:


// В модуле объекта (например, документа)
Процедура ПередЗаписью(Отказ)
    Если ОбменДанными.Загрузка Тогда
        Возврат; // Пропускаем типовые проверки при загрузке
    КонецЕсли;
    
    // Прикладная проверка, которая может выдать ошибку
    Если СуммаДокумента < 0 Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

В универсальной обработке есть галочка «Использовать режим записи - загрузка». Если пользователь забыл её установить, то при загрузке начнут срабатывать все подписки на события и встроенные проверки модулей объектов (проверка остатков, контроль заполнения реквизитов). Это часто становится причиной того, что через план обмена (где проверки отключены) данные «залетают», а через обработку — «отваливаются» с ошибками валидации.

Пространства имен (Namespace) в XML

Современные файлы обмена EnterpriseData используют пространства имен XML для типизации данных. План обмена в БСП умеет работать с XDTOДесериализатором, который корректно разбирает эти пространства. Старая универсальная обработка часто не обучена работе с Namespace, если они не были явно описаны в схеме правил конвертации 2.0. Это приводит к тому, что парсер XML видит теги, но не может сопоставить их с объектами метаданных, считая файл «пустым» или «битым».

Как правильно проводить отладку?

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

  1. Определите версию правил: Если вы работаете с БП 3.0 и УТ 10.3, скорее всего, используется «Конвертация данных 2.0», встроенная в план обмена. В этом случае для отладки в универсальной обработке вам нужно выгрузить из плана обмена именно файл правил (xml), а не использовать встроенные.
  2. Используйте регистрацию изменений: Вместо универсальной загрузки используйте обработку «Регистрация изменений для обмена». Она позволяет точечно выбрать объекты и запустить обмен именно через механизм плана обмена, сохраняя весь контекст и настройки поиска.
  3. Проверьте флаг загрузки: Всегда устанавливайте режим ОбменДанными.Загрузка = Истина в обработке, если хотите добиться идентичного с планом обмена поведения.
  4. Логирование ошибок: Включайте подробную отладку в правилах обмена (вкладка «Настройка отладки» в Конвертации данных), чтобы увидеть, на каком именно обработчике (ПослеЗагрузки, ПриЗагрузке) происходит сбой.

Таким образом, основная разница заключается не в самом файле, а в алгоритмах его обработки и окружении. План обмена — это комплексный механизм с памятью (регистры соответствий) и настройками (параметры), а универсальная обработка — это «чистый лист», который требует ручной настройки всех тех условий, которые план обмена выполняет автоматически.

← На главную