При настройке или выполнении прямого обмена данными между информационными базами 1С (например, между «Управление торговлей 10.3» и «Бухгалтерия предприятия 2.0 / 3.0») разработчики и администраторы нередко сталкиваются с критической ошибкой инициализации соединения:
Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован
Чаще всего эта неполадка возникает после обновления платформы 1С:Предприятие или при удалении старых версий платформы. Разберем по шагам, почему возникает данный сбой и как его быстро устранить.
Проанализируем типовую ситуацию. Базы успешно обменивались на платформе «1С:Предприятие 8.2». После перехода одной или обеих конфигураций на платформу 8.3 старая версия 8.2 была удалена с компьютера. При попытке синхронизации алгоритм обмена по-прежнему пытается создать COM-объект старой версии платформы.
Посмотрим на пример формирования программного вызова:
ОбъектПодключения = СтруктураПодключения.ВерсияПлатформы + ".COMConnector";
ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения);
Если в настройках узла обмена или параметров подключения указана версия 8.2, система пытается инициализировать COM-класс V82.COMConnector. Так как платформа 8.2 удалена, соответствующий класс в реестре Windows отсутствует, что и приводит к коду ошибки 0x80040154.
Для исправления этой проблемы выполним следующие действия:
// Было:
V8COMConnector = Новый COMОбъект("V82.COMConnector");
// Стало:
V8COMConnector = Новый COMОбъект("V83.COMConnector");
Если в настройках подключения указана корректная версия платформы, но ошибка сохраняется, выясним состояние системной регистрации библиотеки comcntr.dll. При установке новой версии платформы системная запись может не создаться автоматически или перезаписаться некорректно.
Выполним ручную регистрацию компонента через командную строку от имени Администратора с учетом разрядности установленной платформы:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Обратите внимание: вместо 8.3.XX.XXXX необходимо указать точный номер установленного релиза платформы 1С:Предприятие.
Рассмотрим случай, когда 32-битный клиент или фоновое задание пытается подключиться к 64-битному коннектору (или наоборот). Напрямую 32-битный процесс Windows не может загрузить 64-битную динамическую библиотеку.
Для решения конфликта разрядностей настроим выделенное серверное приложение в системной оснастке Службы компонентов (COM+):
Win + R, введем команду dcomcnfg и нажмем Enter.1Cv8 COMConnector) и установим тип Серверное приложение.comcntr.dll из каталога нужной версии платформы.Благодаря этому служба Windows COM+ запустит суррогатный процесс dllhost.exe, который обеспечит прозрачное взаимодействие между процессами разной разрядности.
Хотя технология COM-соединения позволяет быстро наладить прямой обмен, в настоящее время она считается устаревающей и имеет ряд ограничений: работает исключительно под управлением ОС Windows, занимает отдельную клиентскую лицензию на все время подключения и чувствительна к обновлениям версий платформы.
Для построения надежного обмена данными рекомендуется рассмотреть современные альтернативы: