При работе с распределенными базами данных или интеграции различных конфигураций 1С (например, Бухгалтерии и Документооборота) специалисты часто сталкиваются с ошибкой: «-2147221164(0x80040154): Класс не зарегистрирован». Чаще всего это происходит после обновления платформы на одном из серверов или при попытке взаимодействия между 32-битными и 64-битными приложениями. В данной статье мы подробно разберем причины возникновения этой ситуации и пошагово рассмотрим способы её решения.
Прежде чем приступать к активным действиям, давайте проанализируем ситуацию. Ошибка 0x80040154 означает, что операционная система Windows не может найти в реестре запись о COM-классе, к которому обращается 1С. Чаще всего речь идет об объекте V83.COMConnector.
Основные причины проблемы:
comcntr.dll зарегистрирована только как 32-битная (или наоборот).comcntr.dll физически присутствует на диске, но не «прописан» в системе.Рассмотрим самый простой способ — принудительную регистрацию библиотеки. Нам необходимо зарегистрировать файл comcntr.dll, который находится в папке bin установленной платформы.
Важно понимать разницу в путях:
C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dllC:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dllЗапустите командную строку (cmd) от имени администратора и выполните команду:
regsvr32 "C:\Program Files\1cv8\8.3.14.1694\bin\comcntr.dll"
Если вы работаете в 64-разрядной операционной системе, помните, что для регистрации 32-битных библиотек стоит использовать regsvr32 из папки C:\Windows\SysWOW64\, а для 64-битных — из C:\Windows\System32\.
Если простая регистрация не помогла, и мы имеем дело с ситуацией, когда 64-битный сервер 1С пытается вызвать 32-битную компоненту (или нам нужно изолировать работу COM-объекта), мы воспользуемся механизмом «обертки» в Службах компонентов. Рассмотрим этот процесс по шагам:
dcomcnfg).1C_COM_Connector. Установите способ активации: «Серверное приложение».Неопределено.comcntr.dll нужной версии платформы.Этот метод позволяет 64-битному процессу обращаться к 32-битной библиотеке через системный посредник dllhost.exe, что решает большинство проблем совместимости.
Чтобы убедиться, что проблема именно в регистрации класса, а не в коде 1С, проанализируем ситуацию через PowerShell или Excel. Рассмотрим пример проверки через PowerShell:
Запустите PowerShell и введите следующую команду:
$com = New-Object -ComObject "V83.COMConnector"
$com
Если команда возвращает объект, значит, регистрация прошла успешно. Если выводится ошибка «Класс не зарегистрирован», значит, система всё еще не видит компоненту. Обратите внимание, что в Windows есть две версии PowerShell (x86 и x64). Проверьте объект в обеих — это поможет понять, в какой «битности» зарегистрирована библиотека.
Бывают случаи, когда Новый COMОбъект("V83.COMConnector") отрабатывает без ошибок, но метод Connect() возвращает Неопределено. Разберем, почему это происходит:
Возможные причины:
dllhost.exe. Попробуйте перезапустить службу агента сервера 1С и завершить процессы dllhost.exe, связанные с вашим COM-приложением.8.3.14, а вы пытаетесь подключиться через comcntr.dll версии 8.3.11, протоколы могут быть несовместимы. Всегда старайтесь использовать библиотеку той версии (или выше), на которой работает целевая информационная база.Если работа через V83.COMConnector остается нестабильной, проанализируем возможность использования V83.Application. Это создание полноценного (хоть и невидимого) приложения 1С. Метод более ресурсоемкий, но иногда помогает обойти ограничения прав доступа.
Пример кода для проверки:
Попытка
Подключение = Новый COMОбъект("V83.Application");
Результат = Подключение.Connect(ПараметрыСоединения);
Исключение
Сообщить("Ошибка при использовании V83.Application: " + ОписаниеОшибки());
КонецПопытки;
Однако, как справедливо отмечают эксперты, в современных реалиях лучшим решением будет переход на HTTP-сервисы или Web-сервисы. Они полностью избавляют разработчика от необходимости регистрировать библиотеки, следить за разрядностью и настраивать права на COM-объекты в операционной системе Windows.
Для успешного решения проблемы мы рекомендуем придерживаться следующего алгоритма:
comcntr.dll через regsvr32.Следуя этим шагам, вы сможете восстановить работоспособность регламентных заданий и обменов данными между различными конфигурациями платформы 1С:Предприятие.