Как исправить ошибки обмена между 1С:Бухгалтерией 3.0 и 1С:Управление торговлей 11 через универсальный формат?

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

После масштабных обновлений типовых конфигураций 1С многие специалисты столкнулись с тем, что привычный обмен данными между 1С:Бухгалтерия предприятия 3.0 и 1С:Управление торговлей 11 перестал работать. Основная причина кроется в переходе со старой технологии обмена по правилам (XML) на синхронизацию через универсальный формат (EnterpriseData). Рассмотрим подробнее, почему возникают ошибки и как их исправить.

Переход на универсальный формат данных

Первым делом проанализируем ситуацию: в современных редакциях УТ 11 и БП 3.0 обмен идет через ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат. Это означает, что теперь вместо файлов правил .xml используются XDTO-пакеты. Если в вашей базе обмен перестал работать после обновления, первым делом проверьте, какая технология используется. Если в настройках указано "через универсальный формат", то искать старые правила в папке tmplts бесполезно — их там больше нет.

Проблема 1: Ошибка проверки данных XDTO (FractionDigits = 2)

Разберем одну из самых частых ошибок, на которую жалуются пользователи: Ошибка проверки данных XDTO: Значение: '10087.875' не соответствует простому типу... Несоответствие фасету FractionDigits = '2'. Посмотрим, почему это происходит.

В схеме EnterpriseData (универсального формата) для большинства денежных реквизитов (цены, суммы, налоги) жестко установлено ограничение — 2 знака после запятой. Если в вашей конфигурации 1С:Управление торговлей включена возможность использования цен с точностью до 3-х и более знаков, либо при расчете автоматических скидок возникают дробные части копеек, система пытается передать эти данные «как есть».

Для решения этой задачи нам необходимо обеспечить принудительное округление данных при выгрузке. Рассмотрим, как это сделать в модуле МенеджерОбменаЧерезУниверсальныйФормат. Проанализируем код в обработчике ПКО_Документ_ПоступлениеТоваровУслуг_Отправка. Нам нужно найти место, где формируются данные для XDTO-объекта, и добавить округление:


// Пример исправления в менеджере обмена
ЗначениеСвойства = Окр(Источник.СуммаДокумента, 2);
// Аналогично для всех суммовых полей в табличных частях
Для Каждого СтрокаТЧ Из Источник.Товары Цикл
    ЦенаXDTO = Окр(СтрокаТЧ.Цена, 2);
    СуммаXDTO = Окр(СтрокаТЧ.Сумма, 2);
КонецЦикла;

Важный момент: если конфигурация находится на поддержке, крайне не рекомендуется править основной модуль. Лучше использовать механизм расширений или проверить настройки округления в самой базе УТ. Иногда достаточно просто перепровести документ, чтобы суммы пересчитались корректно.

Проблема 2: Ошибка преобразования к типу Булево (НДСПоСтавкам2и4)

Еще одна критическая ошибка, возникающая в релизах УТ 11.2, выглядит так: Преобразование значения к типу Булево не может быть выполнено Если НДСПоСтавкам2и4 Тогда. Выясним причину этого сбоя.

Эта переменная отвечает за определение налогового режима. Ошибка возникает из-за того, что система пытается получить этот признак из договора или соглашения, но если они не заполнены (например, в УТ отключена функциональная опция использования договоров), переменная принимает значение Неопределено. Проанализируем код модуля менеджера обмена и добавим проверку на заполненность:


// Находим проблемный участок кода в модуле МенеджерОбменаЧерезУниверсальныйФормат
// Вместо прямой проверки: Если НДСПоСтавкам2и4 Тогда...
// Используем безопасный вариант:
Если ЗначениеЗаполнено(НДСПоСтавкам2и4) И НДСПоСтавкам2и4 = Истина Тогда
    // Логика обработки ставок
КонецЕсли;

Чтобы оперативно решить эту проблему без изменения кода, попробуйте зайти в документ, в котором стопорится обмен, и проверить заполнение реквизитов Партнер, Контрагент и Договор/Соглашение. Часто «перевыбор» контрагента и перезаполнение договора устраняют ошибку, так как объект пересчитывает свои внутренние параметры.

Как эффективно отлаживать универсальный обмен?

Многие программисты сталкиваются с тем, что точки останова в модуле обмена не срабатывают. Выясним, как правильно настроить отладку:

  1. Синхронизация данных обычно выполняется в фоновом задании. Чтобы «поймать» ошибку, необходимо в конфигураторе зайти в меню Отладка — Подключение и включить автоматическое подключение к фоновым заданиям.
  2. Используйте специальную обработку «Регистрация изменений для обмена данными». С её помощью можно точечно зарегистрировать один проблемный документ и пытаться выгрузить только его, чтобы не ждать полной синхронизации.
  3. Воспользуйтесь журналом регистрации. Ищите события с типом Обмен данными. Там часто содержится полный стек ошибки, который указывает на конкретную строку в ОбщийМодуль.ОбменДаннымиXDTOСервер.

Особенности версий формата EnterpriseData

Проанализируем еще одну возможную причину сбоев — несоответствие версий формата. В настройках синхронизации (раздел Администрирование — Синхронизация данных) проверьте используемую версию формата (например, 1.3, 1.5, 1.10).

Если одна из конфигураций была обновлена до актуального релиза, а вторая осталась старой, они могут пытаться обмениваться данными через разные версии XDTO-пакетов. Рекомендуется:

Ошибки при удалении организаций

Рассмотрим ситуацию, упомянутую в ошибке 10161573. Если в информационной базе было создано две организации, а затем одна из них удалена, обмен может блокироваться из-за «битых» ссылок в регистре Соответствия объектов информационных баз.

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

Таким образом, мы видим, что большинство проблем обмена между БП 3.0 и УТ 11 после обновления связаны либо с жесткими рамками формата EnterpriseData по точности чисел, либо с ошибками в типовом коде менеджера обмена, который не всегда корректно обрабатывает пустые значения ссылочных типов. Последовательное исправление этих моментов позволит восстановить работоспособность синхронизации.

← На главную