Как устранить ошибку преобразования XML и настроить синхронизацию между БП 3.0 и ERP 2 по правилам конвертации

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

Настройка обмена данными между современными конфигурациями, такими как Бухгалтерия предприятия 3.0 и ERP Управление предприятием 2, часто вызывает сложности, даже если используются привычные правила, созданные в Конвертации данных 2.1. Одной из самых коварных проблем является ошибка вида Ошибка преобразования данных XML: [22,4], возникающая в самый момент начала синхронизации. Разберем по шагам, как диагностировать причины сбоя, правильно подготовить комплект файлов и запустить обмен.

Анализируем причину ошибки преобразования XML

Когда система выдает ошибку с указанием координат (например, [22,4]), это означает, что парсер XML споткнулся на определенной строке и позиции символа. В контексте обмена через библиотеку стандартных подсистем (БСП) это чаще всего происходит на этапе вызова метода ПрочитатьXML(ЧтениеXML) в общем модуле ОбменДаннымиСервер. Рассмотрим основные причины возникновения этой ситуации:

  1. Несоответствие версии формата: БСП ожидает определенную структуру заголовка XML-сообщения. Если ваши правила генерируют файл, не соответствующий схеме, загрузка прервется.
  2. Скрытые символы (BOM): При сохранении файлов правил из текстовых редакторов может добавиться метка порядка байтов, которую парсер 1С внутри потока sfile:// воспринимает как ошибку в начале файла.
  3. Пустые или некорректные файлы корреспондента: Механизм синхронизации БСП всегда ищет три файла, даже если обмен односторонний. Если файл правил корреспондента отсутствует или полностью пуст (0 байт), система не сможет его прочитать.

Для детальной диагностики рекомендуется найти временный файл в папке AppData/Local/Temp/Exchange82.... Проанализируем содержимое строки, указанной в ошибке, с помощью текстового редактора (например, Notepad++), включив отображение всех символов.

Подготовка обязательного комплекта файлов правил

Для работы штатного механизма «Синхронизация данных» в конфигурациях на базе БСП необходимо подготовить и загрузить три типа файлов. Выясним роль каждого из них:

Важный нюанс: Если вы планируете строго односторонний обмен (например, только из БП в ERP), файл CorrespondentExchangeRules.xml все равно должен существовать и иметь корректную XML-структуру. Рассмотрим пример «минимально необходимых» пустых правил, которые не вызовут ошибку парсера:


<?xml version="1.0" encoding="UTF-8"?>
<ПравилаОбмена>
    <ВерсияФормата РежимСовместимости="РежимСовместимостиСБСП20">2.01</ВерсияФормата>
    <Ид>00000000-0000-0000-0000-000000000000</Ид>
    <Наименование>Пустые правила для синхронизации</Наименование>
    <ДатаВремяСоздания>2023-10-27T12:00:00</ДатаВремяСоздания>
    <Источник ВерсияПлатформы="8.0" ВерсияКонфигурации="" СинонимКонфигурации="">Источник</Источник>
    <Приемник ВерсияПлатформы="8.0" ВерсияКонфигурации="" СинонимКонфигурации="">Приемник</Приемник>
    <ПравилаКонвертацииОбъектов/>
    <ПравилаВыгрузкиДанных/>
    <ПравилаОчисткиДанных/>
</ПравилаОбмена>

Интеграция плана обмена в конфигурацию

Если вы используете не типовой, а созданный вручную план обмена, просто добавить его в дерево объектов метаданных недостаточно. Разберем, что необходимо сделать в коде, чтобы БСП «увидела» ваш обмен:

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

Методика тестирования «От простого к сложному»

Когда синхронизация не запускается из-за ошибок XML, проанализируем ситуацию, упростив задачу до минимума. Это позволит исключить ошибки в самих правилах и сосредоточиться на инфраструктуре обмена.

Рассмотрим алгоритм проверочного обмена на примере справочника Организации:

  1. Создадим в Конвертации данных 2.1 правила только для одного справочника Организации, сопоставив его по реквизиту ИНН.
  2. Сформируем правила регистрации, включив в них только этот справочник без дополнительных условий.
  3. Загрузим полученные файлы в обе базы (Источник и Приемник).
  4. В базе-источнике внесем изменение в наименование организации и проверим, появилась ли запись в таблице регистрации изменений (через обработку «Регистрация изменений для обмена»).
  5. Запустим синхронизацию. Если обмен справочником прошел успешно, значит, каркас обмена настроен верно, и проблему следует искать в сложных правилах конвертации документов (например, в обработчиках ПередВыгрузкой или ПриЗагрузке).

Типичные ошибки при регистрации изменений

Если синхронизация проходит без ошибок, но данные не передаются, проанализируем настройки регистрации. В современных планах обмена часто добавляются дополнительные реквизиты-фильтры, такие как ДатаНачалаВыгрузкиДокументов или Организация.

Важно: Если вы добавили такие реквизиты в план обмена, они должны быть заполнены в конкретном узле обмена. Если реквизит Организация в узле пуст, стандартный механизм БСП может заблокировать регистрацию любого документа, так как он не будет соответствовать фильтру «пустая организация».

Проверим код в правилах регистрации. Если вы используете стандартную выборку, убедитесь, что в XML-файле правил регистрации корректно прописаны узлы <ОбъектВыборки> для каждого типа метаданных. Пример структуры правила регистрации для КД 2.1:


<Правило Отключить="false">
    <Код>Организации</Код>
    <Наименование>Организации</Наименование>
    <Порядок>50</Порядок>
    <ОбъектВыборки>СправочникСсылка.Организации</ОбъектВыборки>
    <СпособОтбораДанных>СтандартнаяВыборка</СпособОтбораДанных>
</Правило>

Соблюдение этих структурных правил и использование методики последовательного усложнения позволит вам успешно запустить синхронизацию между БП 3.0 и ERP 2.4, минуя ошибки XML-преобразования.

← На главную