Как изменить версию формата EnterpriseData, если 1С «зависла» на старой версии?

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

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

Механизм согласования версий формата

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

Однако на практике случается «эффект памяти». Если БП 3.0 один раз успешно обменялась с УТ 11.3 в формате 1.3, она фиксирует эту версию в настройках узла обмена. После обновления УТ до версии 11.4 (которая поддерживает 1.5), БП может «не заметить» изменений и продолжать использовать старый протокол, так как он всё еще числится в списке допустимых.

Где именно хранятся данные о формате?

Выясним, где в структуре метаданных и данных хранятся эти «заклинившие» настройки. Информация распределена по нескольким местам:

  1. План обмена (реквизиты узла): В большинстве современных конфигураций на базе БСП (Библиотека стандартных подсистем) у узла плана обмена есть скрытые или служебные реквизиты. Рассмотрим подробнее вкладку «Служебная информация» в настройках синхронизации. Там часто можно найти поле ВерсияФормата.
  2. Регистр сведений «Параметры объектов программы»: Здесь 1С кэширует настройки корреспондента. Если в этом регистре для конкретного узла записана старая версия, база будет ориентироваться на нее.
  3. Скрытый реквизит ПараметрыОбмена: Это хранилище значений (Binary Data), где в упакованном виде (в структуре) лежат настройки обмена, включая текущую согласованную версию.
  4. Пакеты XDTO: Сами определения схем хранятся в метаданных. Если в конфигурации отсутствует пакет XDTO с именем вроде EnterpriseData_1_5_..., то база физически не сможет сформировать сообщение в этом формате.

Способ 1: Ручное изменение через интерфейс

Разберем, как попытаться изменить версию без программирования. Для этого выполним следующие шаги:

Перейдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации данных. Выберем нужную настройку и откроем ее. Нам необходимо найти служебную вкладку. В некоторых версиях конфигураций она скрыта. Чтобы ее увидеть, можно воспользоваться обработкой «Регистрация изменений для обмена»:

  1. Откроем обработку РегистрацияИзмененийДляОбмена.
  2. Выберем наш узел обмена.
  3. Нажмем кнопку изменения свойств узла (обычно это иконка карандаша или кнопка «Изменить»).
  4. В открывшейся форме найдем реквизит, отвечающий за версию формата, и установим нужное значение (например, 1.5).

Способ 2: Принудительное согласование через «пустые» сообщения

Проанализируем ситуацию, когда базы нужно «подтолкнуть» к пересчету версий. Иногда помогает двухсторонний обмен сообщениями без данных. Рассмотрим алгоритм:

  1. В базе УТ 11 убедимся, что она готова отправлять 1.5.
  2. Выполним выгрузку из УТ.
  3. Загрузим это сообщение в БП. В момент загрузки заголовка msg:Header, БП должна считать тег msg:Format и осознать, что партнер умеет работать с новой версией.
  4. Если загрузка прошла успешно, БП обновит внутренний кэш и при следующей выгрузке сама сформирует файл в формате 1.5.

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

Способ 3: Программный сброс настроек версии

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


// Выбираем нужный узел плана обмена (замените ИмяПланаОбмена и КодУзла)
УзелОбъекта = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("001").ПолучитьОбъект();

// Устанавливаем версию формата вручную
УзелОбъекта.ВерсияФормата = "1.5";

// В некоторых версиях БСП параметры хранятся в структуре ПараметрыОбмена
Если УзелОбъекта.Метаданные().Реквизиты.Найти("ПараметрыОбмена") <> Неопределено Тогда
    СтруктураПараметров = УзелОбъекта.ПараметрыОбмена.Получить();
    Если ТипЗнч(СтруктураПараметров) = Тип("Структура") Тогда
        СтруктураПараметров.Вставить("ВерсияФормата", "1.5");
        УзелОбъекта.ПараметрыОбмена = Новый ХранилищеЗначения(СтруктураПараметров);
    КонецЕсли;
КонецЕсли;

УзелОбъекта.Записать();

После выполнения такого кода база будет обязана использовать указанную версию при формировании следующего сообщения выгрузки.

Способ 4: Проверка поддержки формата в коде (Менеджер обмена)

Выясним причину, по которой база может игнорировать версию 1.5, даже если мы ее указали. В каждой современной конфигурации 1С существует общий модуль, отвечающий за логику EnterpriseData. Обычно он называется МенеджерОбменаЧерезУниверсальныйФормат или имеет схожее имя в составе БСП.

Найдем в этом модуле функцию ПолучитьДоступныеВерсииФормата(). Рассмотрим ее содержимое:


Функция ПолучитьДоступныеВерсииФормата() Экспорт
    Версии = Новый Массив;
    Версии.Добавить("1.0");
    Версии.Добавить("1.1");
    Версии.Добавить("1.2");
    Версии.Добавить("1.3");
    // Версии.Добавить("1.5"); // Если эта строка отсутствует или закомментирована, формат 1.5 не поддерживается
    Возврат Версии;
КонецФункции

Если после обновления БП вы обнаружили, что в коде версии 1.5 нет, значит, данная редакция программы (релиз) еще не поддерживает этот формат, и «заставлять» её бесполезно. В таком случае необходимо обновить конфигурацию Бухгалтерия предприятия до актуального релиза.

Резюме

Подводя итог, если ваша БП «заклинило» на старом формате:

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

← На главную