Почему перестал работать обмен EnterpriseData после обновления и как исправить ошибку списания товаров

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

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

Выясним причину ошибки: анализ XDTO и версий формата

Проанализируем техническую сторону вопроса. Обмен через EnterpriseData строится на использовании XDTO-пакетов. Каждая версия формата (1.0, 1.1, 1.2... 1.15) имеет строго определенную структуру. Начиная с версии формата 1.3, фирма 1С произвела унификацию объектов обмена для программ ERP, УТ 11, КА 2 и БП 3.0.

В ходе этой унификации объект Документ.СписаниеТоваров был признан устаревшим и заменен на новые типы:

  1. Документ.СписаниеЗапасов — используется для общего отражения списания ТМЦ.
  2. Документ.СписаниеНедостач — используется, когда списание привязано к результатам инвентаризации.

Проблема возникает, когда конфигурация-источник (например, Общепит или БП 3.0) уже обновилась и начала использовать формат версии 1.3 или выше, отправляя данные под именем СписаниеЗапасов, а конфигурация-приемник (например, Розница 2.2) еще работает по старым правилам или содержит ошибку в модуле менеджера обмена, ожидая старое имя СписаниеТоваров.

Посмотрим на пример кода из общего модуля ОбменДаннымиXDTOСервер, где происходит сбой:


ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПОД.ОбъектВыборкиФормат);

Если ТипXDTO = Неопределено Тогда
    ПравилаОбработкиДанных.Удалить(ПОД);
    Продолжить;
КонецЕсли;

Здесь система пытается сопоставить правило обработки данных (ПОД) с типом в фабрике XDTO. Если в правилах указано старое имя, а в схеме XML (которая соответствует новой версии формата) этого имени больше нет, ТипXDTO становится Неопределено, и правило просто удаляется из очереди обработки. В результате документы игнорируются при загрузке.

Способ 1: Принудительное понижение версии формата (самый простой вариант)

Если вы столкнулись с такой проблемой в Базовой версии (где невозможно вносить изменения в код), самым эффективным решением будет заставить программы общаться на "старом языке", который понимают обе стороны. Рассмотрим, как это сделать:

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

Важное примечание: Версия 1.2 является стабильной и содержит объект СписаниеТоваров, который корректно распознается старыми правилами. После того как обе конфигурации будут обновлены до актуальных релизов, где эта ошибка исправлена разработчиками, можно будет вернуть версию формата на автоматическое определение.

Способ 2: Использование внешнего модуля менеджера обмена

Рассмотрим ситуацию, когда нам необходимо работать именно на актуальном формате (например, 1.5 или выше), но типовые правила в конфигурации содержат ошибку. Для ПРОФ-версий 1С предусмотрена возможность подключения внешних правил без снятия с поддержки.

Проанализируем алгоритм действий:

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

Это позволит системе успешно находить тип XDTO в фабрике даже на новых версиях формата:


// Пример исправления в правилах
ПОД = ПравилаОбработкиДанных.Добавить();
ПОД.Имя = "Документ_СписаниеЗапасов_Приемка";
ПОД.ОбъектВыборкиМетаданные = Метаданные.Документы.СписаниеТоваров;
ПОД.ОбъектВыборкиФормат = "Документ.СписаниеЗапасов"; // Было СписаниеТоваров

Способ 3: Ручной перенос через обработку EnterpriseData

Если документов немного и обмен нужно восстановить "здесь и сейчас", воспользуемся стандартной обработкой "Выгрузка загрузка данных EnterpriseData", которая входит в состав многих типовых решений и доступна на ИТС.

Разберем, как это помогает решить проблему:

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

Этот метод позволяет обойти жесткие настройки узла плана обмена и передать данные в обход сломавшихся автоматических алгоритмов.

Резюме и рекомендации

Подведем итог нашему анализу. Ошибки обмена в 1С при обновлении — это следствие эволюции формата EnterpriseData. Когда одна база "уходит вперед" по версии формата, а вторая не успевает обновиться, возникает конфликт имен объектов (СписаниеТоваров vs СписаниеЗапасов).

Рекомендации для стабильной работы:

← На главную