Как исправить ошибку «Класс не зарегистрирован» (0x80040154) при использовании COM-объекта в 1С

Системный администратор 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При организации интеграции между различными конфигурациями 1С (например, между «Управление торговлей 10.3» и «Бухгалтерия предприятия 3.0») часто используется механизм COM-соединения. Однако после обновления платформы, установки модулей ЭДО или изменения серверной инфраструктуры пользователи часто сталкиваются с ошибкой: «-2147221164(0x80040154): Класс не зарегистрирован». Разберем подробно, почему возникает эта проблема и как ее решить, используя системные инструменты Windows и средства настройки 1С.

Анализ причины возникновения ошибки

Ошибка 0x80040154 означает, что операционная система не может найти в реестре сведения о запрашиваемом COM-классе. В контексте 1С это чаще всего библиотека comcntr.dll (COM-соединитель). Рассмотрим основные причины сбоя:

  1. Несоответствие разрядности: 64-битный сервер 1С пытается вызвать 32-битную библиотеку, или наоборот.
  2. Отсутствие регистрации в реестре: После установки новой версии платформы 1С:Предприятие компонента не была автоматически зарегистрирована в системе.
  3. Конфликт версий: На сервере установлено несколько версий платформы, и система «путается» в том, какую именно библиотеку использовать для вызова v83.COMConnector.
  4. Ограничение прав доступа: Служба сервера 1С не имеет достаточных прав для обращения к зарегистрированному COM-объекту.

Способ 1: Ручная регистрация библиотеки comcntr.dll через regsvr32

Это первое действие, которое необходимо выполнить. Важно учитывать разрядность операционной системы и самой платформы 1С. Проанализируем правильный порядок регистрации. Для выполнения команд нам потребуется запустить командную строку (cmd) от имени Администратора.

Если у вас установлен 64-битный сервер 1С, библиотека обычно находится в каталоге Program Files. Выполним следующую команду:

C:\Windows\System32\regsvr32 "C:\Program Files\1cv8\8.3.15.1830\bin\comcntr.dll"

Если используется 32-битный клиент или сервер на 64-битной Windows, команда будет обращаться к папке SysWOW64, которая отвечает за эмуляцию 32-битных приложений:


C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.15.1830\bin\comcntr.dll"

Важное замечание: Путь к версии платформы (в примере 8.3.15.1830) должен соответствовать той версии, которая фактически установлена на вашем сервере. Перезагрузка сервера после этой операции обычно не требуется, так как COM-объект подгружается динамически при вызове из кода 1С.

Способ 2: Настройка приложения в Службе компонентов (COM+)

Если простая регистрация через regsvr32 не помогла (особенно актуально для связки 64-битного сервера и необходимости работы с 32-битной компонентой), необходимо создать специальную «обертку» в службах компонентов Windows. Рассмотрим этот процесс по шагам:

  1. Откроем Панель управления — Администрирование — Службы компонентов.
  2. Перейдем в ветку Компьютеры — Мой компьютер — Приложения COM+.
  3. Создадим новое приложение: правой кнопкой мыши — «Создать» — «Приложение». Выберем «Создать новое приложение», введем имя (например, V83_COMConnector) и выберем тип «Серверное приложение».
  4. В настройках учетной записи (Identity) крайне важно указать не «Текущего пользователя», а конкретного пользователя. Рекомендуется выбрать системную учетную запись с правами администратора или ту, под которой запущена служба сервера 1С.
  5. После создания приложения перейдем в ветку Компоненты внутри созданного нами приложения. Нажмем «Создать» — «Компонент».
  6. Выберем «Установка новых компонентов» и укажем путь к нашей библиотеке comcntr.dll в папке bin нужной версии платформы.

Проанализируем вкладку Безопасность в свойствах созданного приложения COM+. Для стабильной работы рекомендуется снять флажок «Принудительная проверка доступа для приложений» и установить уровень аутентификации в значение «Нет».

Способ 3: Проверка программного кода вызова

Иногда ошибка кроется в строке инициализации объекта. Рассмотрим типичный пример кода, который может вызывать ошибку, если имя класса указано неверно или с опечаткой:


// Неправильно, если переменная Прием содержит лишние точки или пробелы
v8 = Новый COMОбъект("v8" + Прием + ".COMConnector");

// Рекомендуемый способ инициализации для платформы 8.3
v8 = Новый COMОбъект("v83.COMConnector");

Выясним причину, по которой иногда требуется указывать номер версии явно. В реестре Windows после регистрации создается ключ HKEY_CLASSES_ROOT\v83.COMConnector. Если в системе установлено несколько версий (8.2, 8.3), убедитесь, что вы обращаетесь к правильному программному идентификатору (ProgID).

Дополнительные рекомендации по диагностике

Если вышеописанные методы не помогли, проанализируем следующие моменты:

Таким образом, решение проблемы «Класс не зарегистрирован» сводится к корректной регистрации comcntr.dll в системном реестре с учетом разрядности и обеспечению прав доступа через настройку служб COM+. Последовательное выполнение этих действий позволяет восстановить интеграцию между базами в кратчайшие сроки.

← На главную