Как устранить конфликт версий платформы при прямом обмене через Универсальный обмен данными в формате XML?

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

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

Проанализируем физику возникновения этой ошибки, разберем причины сбоя COM-соединения и подробно рассмотрим все доступные варианты решения проблемы.

Почему возникает конфликт релизов при прямом подключении

Прямое подключение к базе-приемнику в обработке обмена строится на базе технологии COM-соединения. В коде конфигурации или обработки инициализируется внутрипроцессный COM-сервер:


COMСоединитель = Новый COMОбъект("V83.COMConnector");
Соединение = COMСоединитель.Connect(СтрокаПодключения);

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

  1. Регистрация библиотеки в операционной системе. За создание объекта V83.COMConnector отвечает системная библиотека comcntr.dll. Windows вызывает ту версию DLL, которая была зарегистрирована в системном реестре последней (обычно при установке нового релиза платформы).
  2. Несовместимость в клиент-серверном варианте (SQL). Если целевая база работает в клиент-серверном режиме, версия COM-коннектора на клиенте обязана строго соответствовать версии службы ragent сервера «1С:Предприятия» вплоть до номера сборки. При несовпадении версий сервер отклоняет соединение с ошибкой различия версий клиента и сервера.
  3. Конфликт в файловом режиме. Если база-приемник файловая (формат 1Cv8.1CD), подключение через более старый релиз платформы при одновременно работающих в новом релизе пользователях вызывает ошибку блокировки или повреждения структуры данных из-за различий во внутреннем формате работы с базой.

Вариант 1. Переход на обмен через файл выгрузки XML

Рассмотрим самый надежный и простой способ, полностью устраняющий зависимость от релизов платформы, разрядности операционной системы и корректности регистрации COM-компонентов.

  1. В базе-источнике (Торговля) открываем обработку «Универсальный обмен данными в формате XML» на вкладке «Выгрузка данных».
  2. Выбираем файл правил обмена и указываем имя файла данных на диске (например, в общем сетевом каталоге).
  3. Выполняем выгрузку данных в файл XML.
  4. В базе-приемнике (Бухгалтерия) открываем ту же обработку на вкладке «Загрузка данных», указываем путь к созданному файлу и загружаем документы.

Этот процесс можно полностью автоматизировать с помощью стандартного механизма регламентных заданий или пакетного запуска «1С:Предприятия» с ключом командной строки /Execute.

Вариант 2. Выравнивание версии платформы

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

Разберем по шагам, почему это выгодно:

  1. Устраняются конфликты версий между клиентскими приложениями и сервером «1С:Предприятия».
  2. Исчезает необходимость тонкой настройки Windows-реестра для нескольких версий comcntr.dll.
  3. Обеспечивается корректная работа всех пользователей в актуальных релизах прикладных решений.

Вариант 3. Инициация обмена со стороны обновленной базы-приемника

Обработка «Универсальный обмен данными в формате XML» позволяет запускать процесс выгрузки/загрузки с обратной стороны. Разберем эту схему:

  1. Запуск процедуры выполняется непосредственно из базы Бухгалтерии, где установлена актуальная платформа.
  2. В обработке указываются параметры подключения к Торговле через COM-коннектор либо запускается контекст загрузки данных.
  3. Поскольку инициатором выступает обновленная платформа, вызовы COM-компонентов выполняются в рамках актуальной среды.

Вариант 4. Точечная регистрация библиотеки comcntr.dll

Если обновлять всех пользователей базы-источника нецелесообразно, а обмен выполняет конкретный администратор или выделенный служебный компьютер, можно зарегистрировать нужную версию COM-компонента точечно на этом рабочем месте.

  1. Закрываем все запущенные сеансы «1С:Предприятия».
  2. Запускаем командную строку от имени Администратора.
  3. Регистрируем библиотеку от той версии платформы, на которой развернута база Бухгалтерии: regsvr32 "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll" (где 8.3.XX.YYYY — точный номер релиза платформы Бухгалтерии).

После регистрации системный объект V83.COMConnector на данном ПК будет обращаться именно к требуемой версии платформы, что позволит успешно подключаться к Бухгалтерии, пока остальные пользователи Торговли продолжают работать на своих рабочих станциях под старыми версиями.

Вариант 5. Изоляция COM-компонентов через службу компонентов Windows (COM+)

Для серверов и терминальных станций, где одновременно требуются разные версии COM-соединений, можно изолировать компоненту через создание отдельного COM+-приложения в операционной системе:

  1. Открываем оснастку «Службы компонентов» (команда dcomcnfg).
  2. Переходим в раздел «Приложения COM+» и создаем новое приложение (тип: Серверное приложение).
  3. В созданное приложение добавляем компонент, указав путь к файлу comcntr.dll нужной версии платформы.
  4. Назначаем приложению уникальное имя и учетную запись для запуска процесса dllhost.exe.

Такой подход обеспечивает независимое исполнение COM-вызовов в изолированном адресном пространстве без конфликтов с другими установленными версиями платформы «1С:Предприятие».

← На главную