При настройке синхронизации данных между конфигурациями (например, Управление торговлей 11 и Бухгалтерия предприятия 3.0) через универсальный формат EnterpriseData часто возникает ситуация, когда одна из баз продолжает слать данные в старом формате (например, 1.3), в то время как принимающая сторона ожидает более современную версию (например, 1.5). В этой статье мы подробно разберем механизм согласования версий и выясним, как принудительно обновить настройки, если автоматика дала сбой.
Для начала проанализируем ситуацию: как 1С определяет, какую версию формата использовать? Технология синхронизации через универсальный формат построена на принципе автоматического согласования. При выполнении обмена базы передают друг другу информацию о поддерживаемых версиях (от минимальной до максимальной). Система должна выбрать максимально возможную общую версию для обеих конфигураций.
Однако на практике случается «эффект памяти». Если БП 3.0 один раз успешно обменялась с УТ 11.3 в формате 1.3, она фиксирует эту версию в настройках узла обмена. После обновления УТ до версии 11.4 (которая поддерживает 1.5), БП может «не заметить» изменений и продолжать использовать старый протокол, так как он всё еще числится в списке допустимых.
Выясним, где в структуре метаданных и данных хранятся эти «заклинившие» настройки. Информация распределена по нескольким местам:
ВерсияФормата.EnterpriseData_1_5_..., то база физически не сможет сформировать сообщение в этом формате.Разберем, как попытаться изменить версию без программирования. Для этого выполним следующие шаги:
Перейдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации данных. Выберем нужную настройку и откроем ее. Нам необходимо найти служебную вкладку. В некоторых версиях конфигураций она скрыта. Чтобы ее увидеть, можно воспользоваться обработкой «Регистрация изменений для обмена»:
РегистрацияИзмененийДляОбмена.Проанализируем ситуацию, когда базы нужно «подтолкнуть» к пересчету версий. Иногда помогает двухсторонний обмен сообщениями без данных. Рассмотрим алгоритм:
msg:Header, БП должна считать тег msg:Format и осознать, что партнер умеет работать с новой версией.Важно: Если загрузка прерывается ошибкой еще на этапе чтения файла (например, из-за несоответствия пространства имен), автоматического обновления не произойдет. В этом случае придется прибегнуть к программным методам.
Если интерфейсные методы не помогают, мы можем программно воздействовать на узел плана обмена. Для этого воспользуемся внешней консолью кода или обработкой. Посмотрим на пример кода, который принудительно устанавливает версию формата для узла:
// Выбираем нужный узел плана обмена (замените ИмяПланаОбмена и КодУзла)
УзелОбъекта = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("001").ПолучитьОбъект();
// Устанавливаем версию формата вручную
УзелОбъекта.ВерсияФормата = "1.5";
// В некоторых версиях БСП параметры хранятся в структуре ПараметрыОбмена
Если УзелОбъекта.Метаданные().Реквизиты.Найти("ПараметрыОбмена") <> Неопределено Тогда
СтруктураПараметров = УзелОбъекта.ПараметрыОбмена.Получить();
Если ТипЗнч(СтруктураПараметров) = Тип("Структура") Тогда
СтруктураПараметров.Вставить("ВерсияФормата", "1.5");
УзелОбъекта.ПараметрыОбмена = Новый ХранилищеЗначения(СтруктураПараметров);
КонецЕсли;
КонецЕсли;
УзелОбъекта.Записать();
После выполнения такого кода база будет обязана использовать указанную версию при формировании следующего сообщения выгрузки.
Выясним причину, по которой база может игнорировать версию 1.5, даже если мы ее указали. В каждой современной конфигурации 1С существует общий модуль, отвечающий за логику EnterpriseData. Обычно он называется МенеджерОбменаЧерезУниверсальныйФормат или имеет схожее имя в составе БСП.
Найдем в этом модуле функцию ПолучитьДоступныеВерсииФормата(). Рассмотрим ее содержимое:
Функция ПолучитьДоступныеВерсииФормата() Экспорт
Версии = Новый Массив;
Версии.Добавить("1.0");
Версии.Добавить("1.1");
Версии.Добавить("1.2");
Версии.Добавить("1.3");
// Версии.Добавить("1.5"); // Если эта строка отсутствует или закомментирована, формат 1.5 не поддерживается
Возврат Версии;
КонецФункции
Если после обновления БП вы обнаружили, что в коде версии 1.5 нет, значит, данная редакция программы (релиз) еще не поддерживает этот формат, и «заставлять» её бесполезно. В таком случае необходимо обновить конфигурацию Бухгалтерия предприятия до актуального релиза.
Подводя итог, если ваша БП «заклинило» на старом формате:
ВерсияФормата узла плана обмена.Помните, что синхронизация — это всегда двусторонний процесс, и иногда для перехода на 1.5 в БП нужно сначала временно понизить версию в УТ до 1.3, совершить успешный цикл обмена, а затем снова поднять обе до 1.5.