При настройке прямого подключения между информационными базами через COM-соединение (например, при синхронизации «1С:Управление торговлей 10.3» и «1С:Бухгалтерия предприятия 3.0») после обновления платформы 1С часто возникает критический сбой. Система прерывает обмен сообщением: Версия компоненты comcntr (X.X.X.X) отличается от версии корневого модуля core83 (Y.Y.Y.Y). Разберем по шагам, почему возникает эта коллизия, как правильно перерегистрировать нужную библиотеку в операционной системе Windows и какие нюансы разрядности следует учесть.
Проанализируем механику работы прямого подключения. Когда одна информационная база 1С подключается к другой по протоколу COM, вызывается системный объект через команду Новый COMОбъект("V83.COMConnector"). Windows обращается к системному реестру по глобальному идентификатору ProgID и загружает динамическую библиотеку comcntr.dll, путь к которой был зарегистрирован последним.
В памяти процесса вызывающей программы уже загружены базовые модули запущенной платформы (в частности, core83.dll). Если версия вызывающего клиента 1С не совпадает с версией зарегистрированной в реестре Windows библиотеки comcntr.dll, операционная система сталкивается с конфликтом: два модуля разных сборок технологической платформы не могут параллельно сосуществовать внутри одного адресного пространства. В результате процесс аварийно прерывает установку сеанса.
К этой ошибке обычно приводят следующие факторы:
Рассмотрим основной способ решения проблемы — ручную регистрацию нужной версии библиотеки с помощью системной утилиты regsvr32.exe. Важно зарегистрировать компоненту именно того релиза платформы, под управлением которого выполняется сеанс 1С.
Разберем по шагам порядок действий:
cmd, нажмем правой кнопкой мыши на значок командной строки и выберем пункт «Запуск от имени администратора».
regsvr32 /u "C:\Program Files (x86)\1cv8\8.3.7.1917\bin\comcntr.dll"
regsvr32 "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll"
Проанализируем ситуацию, когда стандартная регистрация не дает результата. В 64-разрядных операционных системах Windows присутствуют два экземпляра утилиты regsvr32.exe, и запуск их без указания точного пути может зарегистрировать библиотеку не для той архитектуры.
Посмотрим на правила вызова утилиты с учетом разрядности установленной платформы:
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.9.2170\bin\comcntr.dll"
System32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.9.2170\bin\comcntr.dll"
Обратите внимание: если информационная база работает в клиент-серверном режиме, а синхронизация данных запускается по расписанию регламентным заданием, то COM-соединение инициализируется процессом сервера rphost.exe. В этом случае регистрировать comcntr.dll требуется непосредственно на сервере приложений 1С под учетной записью администратора и строго с той разрядностью, которую имеет служба ragent.
Если на одном сервере вынужденно соседствуют базы разных релизов или клиентские приложения имеют разрядность 32 бит, а сервер 1С работает в 64-битном режиме, стандартная регистрация в реестре приводит к постоянным конфликтам версий. В такой ситуации применим механизм COM+ (DLL Surrogate), который запускает comcntr.dll в отдельном изолированном процессе dllhost.exe.
Разберем процедуру настройки службы компонентов:
Win + R, введем dcomcnfg и нажмем Enter.1C_V83_COMConnector) и установим переключатель в положение «Серверное приложение».USR1CV8).comcntr.dll требуемой версии платформы 1С.Такая изоляция снимает ограничения на смешивание разрядностей и позволяет разным версиям ядра 1С обращаться к коннектору через интерфейсы межпроцессного взаимодействия без падения сеансов.
Рассмотрим варианты обхода проблемы, если перерегистрация библиотек невозможна или нежелательна: