При работе с распределенными системами или при постепенном переходе со старых версий платформы 1С на новые часто возникает необходимость программного взаимодействия между ними. Одной из классических задач является подключение из базы на платформе 8.1 к базе на платформе 8.2 (или наоборот) с использованием технологии COM-соединения. Однако именно в таких сценариях разработчики нередко сталкиваются с ошибкой: «Произошла исключительная ситуация (V82.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия».
В данной статье мы подробно разберем, почему возникает эта ошибка, как правильно настроить строку подключения и на что обратить внимание при администрировании серверов с несколькими версиями платформ.
Рассмотрим ситуацию, когда в базе 1С 8.1 создается обработка для получения данных из базы 8.2. Типичный код инициализации соединения выглядит следующим образом:
V82COMConnector = Новый COMОбъект("V82.COMConnector");
Попытка
Соединение = V82COMConnector.Connect(СтрокаПодключения);
Возврат Соединение;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
При выполнении этого кода система выдает ошибку, указывая на различие версий клиента и сервера. Например: (8.2.19.83 - 8.1.15.14). На первый взгляд сообщение кажется странным: клиент (COM-объект) имеет версию 8.2, а сервер почему-то определяется как 8.1, хотя мы пытаемся подключиться к базе 8.2.
Разберем по шагам, что происходит в момент вызова метода Connect. Когда мы используем V82.COMConnector, операционная система обращается к зарегистрированной в реестре библиотеке comcntr.dll версии 8.2. Клиентская часть соединения (сам COM-объект) работает корректно.
Проблема кроется в строке подключения. По умолчанию менеджер кластера 1С:Предприятия использует порт 1541. Если на одном физическом сервере установлены и 8.1, и 8.2, то порт 1541 обычно занят той платформой, которая была установлена или настроена первой (в нашем случае — 8.1).
Когда COM-объект версии 8.2 пытается установить соединение, он обращается по адресу сервера. Если в строке подключения не указан порт явно, запрос уходит на стандартный порт 1541. Там его «встречает» служба ragent версии 8.1. Происходит попытка авторизации, но версии протоколов не совпадают, о чем система и сообщает в тексте ошибки.
Это самый простой и эффективный способ решения проблемы. Проанализируем настройки сервера 1С 8.2. Скорее всего, для работы второй платформы были назначены альтернативные порты (например, основной порт 1640 и порт менеджера кластера 1641).
Вам необходимо изменить параметр Srvr в строке подключения, добавив номер порта через двоеточие. Рассмотрим пример правильной строки подключения для клиент-серверного варианта:
// Было:
СтрокаПодключения = "Srvr=""MyServer"";Ref=""MyBase82"";";
// Стало (указываем порт кластера 8.2):
СтрокаПодключения = "Srvr=""MyServer:1641"";Ref=""MyBase82"";";
Важно: убедитесь, что вы указываете порт именно менеджера кластера (по умолчанию для 8.2 это 1541, если порты смещены — часто 1641 или 1441). После этого COM-объект 8.2 обратится к «родному» серверу 8.2, и конфликт версий исчезнет.
Если вы уверены, что порты указаны верно, но ошибка сохраняется, нужно проверить, какая именно версия V82.COMConnector зарегистрирована в системе. Это особенно актуально, если на компьютере установлено несколько релизов платформы 8.2 (например, 8.2.19.83 и 8.2.18.102).
Для принудительной регистрации нужной библиотеки выполните следующие действия:
bin нужной версии платформы.
regsvr32 "C:\Program Files (x86)\1cv82\8.2.19.83\bin\comcntr.dll"
Обратите внимание на разрядность. Платформа 8.1 является 32-битной. Если вы вызываете COM-объект из процесса 8.1, вам необходимо, чтобы в системе была корректно зарегистрирована 32-битная библиотека comcntr.dll от версии 8.2.
В сложных случаях, когда прямая регистрация DLL не помогает или возникают проблемы с правами доступа, рекомендуется настроить соединение через Службы компонентов (Component Services). Это позволит «изолировать» COM-объект в отдельном процессе dllhost.exe.
Проанализируем шаги настройки:
1C_COM_82).comcntr.dll версии 8.2.Этот метод гарантирует, что даже при вызове из 32-битной среды 8.1, система сможет корректно инициализировать окружение для 8.2.
При «обратном» соединении (из более старой платформы в новую) следует помнить о нескольких нюансах:
УникальныйИдентификатор или ссылки на новые типы метаданных), 8.1 может их «не понять».File="C:\Bases\MyBase82";. В этом случае ошибка «Несоответствие версий» практически невозможна, так как COM-объект сам открывает файлы базы без участия серверного процесса.Подводя итог, можно сказать, что в большинстве случаев проблема решается простым уточнением порта в строке соединения. Внимательно проверяйте настройки консоли администрирования серверов 1С, чтобы знать, на каких портах «слушают» ваши службы ragent для каждой из установленных платформ.