С выходом обновлений для конфигураций «Управление торговлей 11» (релизы ветки 11.4.13.х) многие пользователи столкнулись с критической проблемой: синхронизация с «Бухгалтерией предприятия 3.0» формально проходит без ошибок, но данные фактически не передаются. В журнале регистрации УТ мы видим отчет об отправке десятков объектов, но в БП загрузка показывает «0 объектов». При этом файл обмена (если использовать выгрузку в файл) оказывается практически пустым или содержит только заголовок сообщения.
В данной статье мы подробно разберем, почему возникает этот сбой, проанализируем техническую подоплеку ошибки и рассмотрим несколько способов восстановления работоспособности обмена: от простых настроек интерфейса до использования расширений и официальных патчей.
Проанализируем ситуацию с технической точки зрения. В последних релизах УТ 11.4.13 разработчики 1С начали внедрять поддержку новой версии универсального формата обмена — EnterpriseData 1.10. Однако возникла программная коллизия: в модулях обмена (например, ОбменДаннымиУТ) код уже настроен на использование версии 1.10 как приоритетной, но соответствующий XDTO-пакет EnterpriseData_1_10_2 в метаданных конфигурации УТ либо отсутствует, либо реализован некорректно.
В результате система попадает в логический тупик: она «видит», что доступна версия 1.10, пытается сформировать XML-сообщение по этой схеме, но, не находя описания структуры пакета, выгружает пустой файл. При этом механизмы регистрации изменений считают объекты «отправленными», что вводит пользователя в заблуждение.
Если нам не требуется функционал версии 1.10 (а для стабильной работы БП 3.0 версии 1.8 вполне достаточно), мы можем вручную переключить версию формата в настройках синхронизации. Проблема в том, что по умолчанию это поле скрыто. Разберем по шагам, как его активировать:
Важно: Подобную операцию желательно выполнить в обеих информационных базах (и в УТ, и в БП), чтобы исключить автоматическое согласование версий, которое может снова «поднять» формат до 1.10.
Зачастую ручная смена версии в настройках не помогает, так как программный код УТ при каждом обмене динамически определяет доступные версии и сбрасывает настройку. В этом случае эффективным решением будет создание небольшого расширения, которое исключит версию 1.10 из списка доступных. Рассмотрим пример кода, который необходимо разместить в расширении в модуле ОбменДаннымиУТ:
&Вместо("ДоступныеВерсииУниверсальногоФормата")
Процедура Расш1_ДоступныеВерсииУниверсальногоФормата(ВерсииФормата)
// Мы явно прописываем поддерживаемые версии, исключая 1.10
ВерсииФормата.Вставить("1.3", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.4", МенечникОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.5", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.6", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.7", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.8", МенеджерОбменаЧерезУниверсальныйФормат);
// Строку с версией 1.10 намеренно комментируем или удаляем
// ВерсииФормата.Вставить("1.10", МенеджерОбменаЧерезУниверсальныйФормат);
КонецПроцедуры
При подключении расширения обязательно обратите внимание на следующие моменты:
&Вместо) может не сработать.Фирма 1С признала данную проблему и выпустила официальный патч под номером EF_00_00385576. Рассмотрим, как его применить:
СинхронизацияДанныхЧерезУниверсальныйФормат.Проанализируем ситуацию: даже после установки патча иногда требуется «толкнуть» обмен. Для этого рекомендуется зайти в Состав отправляемых данных, вручную зарегистрировать один документ и попробовать выполнить синхронизацию. Если объекты начали уходить, значит, проблема решена.
В обсуждениях часто упоминается платформа 8.3.18.1483. Данная версия платформы имеет специфические проблемы с работой comcntr.dll (COM-соединителя) при прямом подключении между базами. Если вы используете прямое подключение и вышеописанные способы с форматом не помогли, попробуйте следующее:
regsvr32 "C:\Program Files\1cv8\8.3.18.1483\bin\comcntr.dll".<Body>, значит, проблема была в COM-соединении, а не в версии EnterpriseData.Бывают случаи, когда документы загружаются в Бухгалтерию, но у них заполнены только дата и номер, а табличные части и реквизиты пусты. Это происходит из-за несоответствия пространств имен (Namespace). Если УТ выгружает данные в формате 1.10 (даже если вы пытались поставить 1.8, но код проигнорировал это), а БП ожидает строго 1.8, то загрузчик БП не сможет сопоставить поля XML и просто их пропустит.
Посмотрим на решение: в таких случаях помогает только жесткое прописывание версии формата в модуле объекта плана обмена через расширение. Добавим в расширение процедуру ПередЗаписью для плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат:
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
// Принудительно фиксируем версию формата перед сохранением настроек узла
ЭтотОбъект.ВерсияФорматаОбмена = "1.8";
КонецПроцедуры
Этот «костыль» гарантирует, что при выполнении обмена система всегда будет использовать стабильную версию 1.8, независимо от того, что пытается навязать программный код конфигурации.
Подводя итог, можно сказать, что основная причина сбоя — временное отсутствие XDTO-пакетов для версии 1.10 в релизах УТ 11.4.13.х. Для исправления ситуации мы рекомендуем сначала попробовать установить патч EF_00_00385576. Если это не помогает — применить расширение для фиксации формата 1.8 и обязательно проверить работоспособность COM-соединения. Помните, что после любых манипуляций с версиями формата полезно очистить кэш регистрации изменений и зарегистрировать данные заново, чтобы убедиться в чистоте эксперимента.