Почему не работает обмен между БП 3.0 и ERP 2.4 через планы обмена при использовании правил КД 2.1

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

При настройке синхронизации между современными конфигурациями 1С, такими как Бухгалтерия предприятия 3.0 и ERP Управление предприятием 2.4, разработчики часто сталкиваются с ситуацией, когда правила, созданные в Конвертации данных 2.1, успешно отрабатывают в ручном режиме через универсальную обработку, но вызывают критические ошибки при попытке запустить их через штатный план обмена. Рассмотрим причины этого явления и разберем способы решения проблемы.

Анализ технологического разрыва версий БСП

Первым делом проанализируем версии используемых библиотек. В современных конфигурациях вся логика обмена сосредоточена в Библиотеке стандартных подсистем (БСП). В рассматриваемом примере БП 3.0 базируется на БСП версии 3.1.2, в то время как старая ERP 2.4 использует БСП версии 2.4.4.

Выясним причину конфликта: за годы развития БСП механизмы транспорта данных претерпели радикальные изменения. БСП 3.0+ полностью переориентирована на использование формата EnterpriseData (КД 3.0). Хотя поддержка правил КД 2.1 формально сохраняется для обратной совместимости, программные интерфейсы (API) модулей обмена в версии 3.1 сильно отличаются от версии 2.4. Когда ОбменДаннымиСервер в новой БП пытается сформировать пакет для старой ERP, структура заголовков или методов вызова может быть не распознана приемником, что ведет к ошибкам десериализации данных.

Разбор ошибки записи объекта (Код ошибки 26)

Проанализируем текст ошибки из журнала регистрации: КСообщенияОбОшибках = 26. В коде встроенной обработки КонвертацияОбъектовИнформационныхБаз этот код напрямую указывает на отказ системы при вызове метода Записать() для конкретного объекта (в нашем случае — Авансовый отчет).

Посмотрим на ситуацию глубже: почему универсальная обработка УниверсальныйОбменДаннымиXML записывает объект, а план обмена — нет? Рассмотрим основные отличия:

  1. Режим загрузки: Универсальная обработка по умолчанию устанавливает свойство ОбменДанными.Загрузка = Истина. Это отключает почти все проверки бизнес-логики в модулях объекта и подписках на события.
  2. Контроль в планах обмена: Встроенная синхронизация БСП часто выполняет дополнительные проверки целостности данных. Если в ERP 2.4 документ АвансовыйОтчет требует заполнения специфических реквизитов (например, подразделение, статья ДДС или данные по НДС), которые не были переданы из БП 3.0 из-за упрощенных правил КД 2.1, платформа просто не даст записать объект, возвращая ошибку записи.

Варианты решения проблемы

Выделим три основных стратегии решения задачи в зависимости от возможности обновления систем и квалификации разработчика.

Решение 1: Обновление конфигураций до актуальных релизов

Это самый правильный путь. Если ERP версии 2.4.2 (выпуска 2017 года) работает в паре с БП 3.0 выпуска 2020 года, количество ошибок в типовых правилах будет только расти. Разберем, что дает обновление:

Решение 2: Использование формата EnterpriseData (КД 3.0)

Рассмотрим переход на современную технологию обмена. В отличие от КД 2.1, где правила жестко привязаны к структуре метаданных конкретных версий, EnterpriseData использует промежуточный формат XSD-схемы. Это позволяет базам обмениваться данными, даже если их внутренняя структура различается.

Для реализации этого подхода выполним следующие шаги:

  1. Настроим синхронизацию через "Универсальный формат".
  2. Если типовых полей не хватает, используем технологию расширений для изменения логики в модуле МенеджерОбменаЧерезУниверсальныйФормат (или аналогичном в вашей версии ERP).
  3. В КД 3.0 настроим сопоставление объектов через форматную строку, что гораздо стабильнее для планов обмена БСП.

Решение 3: Программная отладка и доработка правил КД 2.1

Если обновление невозможно, проанализируем ситуацию с помощью отладки. Чтобы "поймать" конкретную причину отказа в записи объекта в приемнике, выполним следующие действия:

  1. Запустим ERP в режиме отладки.
  2. Найдем в обработке КонвертацияОбъектовИнформационныхБаз (модуль объекта) процедуру записи.
  3. Установим точку останова на строке Объект.Записать();.
  4. Проверим содержимое переменной ОписаниеОшибки() или перейдем внутрь процедуры ПередЗаписью модуля документа в ERP.

Скорее всего, вы обнаружите незаполненный обязательный реквизит. Пример кода, который можно добавить в обработчик "После загрузки" в КД 2.1 для устранения таких проблем:


// Пример заполнения обязательных реквизитов для ERP в правилах КД 2.1
Если Не ЗначениеЗаполнено(Объект.Подразделение) Тогда
    Объект.Подразделение = Справочники.СтруктураПредприятия.НайтиПоНаименованию("Основное подразделение");
КонецЕсли;

Если Не ЗначениеЗаполнено(Объект.СтатьяДвиженияДенежныхСредств) Тогда
    Объект.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ОплатаПоставщику;
КонецЕсли;

Решение 4: Автоматизация через внешнюю обработку

Если штатные планы обмена БСП 3.1 отказываются работать с заголовками файлов КД 2.1, можно обойти механизм синхронизации. Проанализируем возможность использования регламентного задания:

  1. Создадим расширение или внешнюю обработку, которая будет вызывать Обработка.УниверсальныйОбменДаннымиXML программно.
  2. Настроим расписание в консоли заданий.
  3. В коде укажем путь к файлу правил и параметры выгрузки/загрузки.

Пример программного вызова выгрузки:


ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = "C:\Exchange\Rules.xml";
ОбработкаОбмена.ИмяФайлаДанных = "C:\Exchange\Data.xml";
ОбработкаОбмена.РежимОбмена = "Выгрузка";
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
ОбработкаОбмена.ВыполнитьВыгрузку();

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

← На главную