При межпрограммной интеграции и обмене данными между конфигурациями 1С:Предприятия часто используется механизм COM-соединения с помощью объекта V83.COMConnector. Однако после планового обновления платформы на сервере или рабочих местах разработчики и администраторы нередко сталкиваются с ошибкой:
Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Client software code version does not match 1C:Enterprise server version. Различаются версии клиента и сервера, клиентское приложение: COM-соединение.
Разберем детально, почему возникает такая ситуация, почему ошибка может проявляться только в определенных конфигурациях (например, в «Бухгалтерии предприятия 2.0» в режиме толстого клиента) и как правильно перерегистрировать компоненты платформы с учетом разрядности операционной системы.
Проанализируем архитектуру вызова COM-соединения в 1С:Предприятии. Объект V83.COMConnector жестко привязан к конкретному релизу платформы вплоть до номера сборки. Если сервер 1С работает на версии, например, 8.3.10.2580, а инициализирующий соединение процесс загружает библиотеку comcntr.dll от версии 8.3.9.2170, сервер мгновенно блокирует подключение из-за несовпадения версий протокола.
Выделим ключевые причины, приводящие к этому сбою:
&НаСервере. На сервере установлена и зарегистрирована новая 64-битная платформа, поэтому базы успешно подключаются друг к другу. В конфигурациях на обычных формах (как «Бухгалтерия предприятия 2.0») при работе в толстом клиенте код выполняется локально на компьютере пользователя в 32-разрядном процессе. Локальный клиент обращается к реестру Windows текущего ПК, где по-прежнему прописан старый релиз библиотеки.regsvr32, запущенная по умолчанию из каталога System32, регистрирует 64-битные DLL. При этом 32-разрядный толстый клиент 1С ищет запись COM-компонента в ветке WOW6432Node. Если регистрация была выполнена без учета разрядности, 32-битный клиент продолжит запускать старую DLL.V83.COMConnector ранее настраивалось выделенное приложение COM+ (через оснастку dcomcnfg), стандартная перерегистрация через командную строку не изменит путь внутри существующего COM+ приложения, и оно продолжит удерживать старую версию.Рассмотрим по шагам процесс ручной перерегистрации библиотеки через командную строку Windows. Обязательно запускаем командную строку (cmd) от имени Администратора.
Для 32-разрядного клиента 1С (наиболее частый случай для обычных форм и толстого клиента) выполним отмену регистрации старой версии и зарегистрируем актуальную:
C:\Windows\SysWOW64\regsvr32.exe /u "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.10.2580\bin\comcntr.dll"
Если вы используете 64-разрядный клиент платформы или регистрируете компонент на 64-битном сервере, выполним команды для 64-разрядной версии:
C:\Windows\System32\regsvr32.exe /u "C:\Program Files\1cv8\8.3.9.2170\bin\comcntr.dll"
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.10.2580\bin\comcntr.dll"
После успешного выполнения команд система выдаст сообщение: «Успешное выполнение DllRegisterServer».
Если на рабочем компьютере или сервере установлено множество старых релизов 1С, операционная система может сохранять неактуальные ссылки в реестре. Проверенное решение — открыть «Панель управления» -> «Программы и компоненты» и удалить устаревшие версии платформы (в нашем примере — 8.3.9.2170).
После удаления старых версий рекомендуется выполнить восстановление (Repair) или повторную установку актуального релиза 8.3.10.2580, обязательно проверив в мастере установки, что выбран компонент «COM-соединение».
Если в системе настроен доступ через пул COM+ (приложение в dcomcnfg для обеспечения взаимодействия между 32-битным и 64-битным окружением), разберем порядок обновления компонента:
dcomcnfg и нажимаем Enter.V83_COMConnector или 1CV83).V83.COMConnector.1.comcntr.dll из каталога bin новой версии платформы.Проанализируем записи реестра, к которым обращается система при создании объекта Новый COMОбъект("V83.COMConnector"). Откроем редактор реестра regedit и проверим параметры:
HKEY_CLASSES_ROOT\V83.COMConnector\CLSID и смотрим значение идентификатора GUID.HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{GUID}\InprocServer32.HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32.comcntr.dll именно актуального релиза платформы.Посмотрим на пример стандартного кода создания подключения к информационной базе 1С:
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=""Server1C"";Ref=""Base30"";Usr=""Администратор"";Pwd=""Password"";";
БазаПриемник = COMСоединитель.Connect(СтрокаПодключения);
Исключение
Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;
Совет: В конфигурациях, где поддерживается клиент-серверная архитектура, всегда старайтесь выносить вызовы V83.COMConnector в общий серверный модуль или процедуры с директивой &НаСервере. Это позволит централизованно управлять версиями библиотек на сервере 1С и исключит зависимость от версий платформы, установленных на рабочих станциях пользователей.