Как исправить ошибку «Класс не зарегистрирован» (0x80040154) при COM-подключении между 1С:УТ 10.3 и БП 3.0

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

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

В этой статье мы подробно разберем, как диагностировать и устранить эту проблему, пройдя путь от простой регистрации библиотеки до настройки компонентов COM+.

Шаг 1: Определяем точку возникновения ошибки

Прежде чем приступать к техническим манипуляциям, нам необходимо выяснить причину: где именно выполняется код, создающий COM-объект. Ошибка «Класс не зарегистрирован» возникает на той машине, где инициируется соединение. Проанализируем два варианта:

  1. Запуск на стороне клиента: Если вы открываете обработку обмена в обычном или тонком клиенте на своем компьютере и нажимаете кнопку «Выполнить», то библиотека comcntr.dll должна быть зарегистрирована на вашем локальном ПК.
  2. Запуск на стороне сервера: Если обмен выполняется в фоновом задании или через серверный модуль (на 64-битной платформе), компоненту необходимо регистрировать на сервере 1С.

Как показала практика обсуждения, часто администраторы пытаются настроить сервер, в то время как пользователь запускает обработку локально. Проверьте, работает ли обмен у других сотрудников. Если у бухгалтера на Windows 7 все работает, а у вас на Windows 10 — нет, значит, проблема локальная.

Шаг 2: Регистрация библиотеки через regsvr32

Самый быстрый способ восстановить работу — принудительная регистрация библиотеки в реестре Windows. Рассмотрим, как это сделать правильно, учитывая разрядность системы. Важно: все действия выполняются в командной строке (cmd), запущенной от имени администратора.

Сначала рекомендуется выполнить деинсталляцию старой регистрации, чтобы исключить конфликты версий:

regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll" /u

(Где 8.3.X.XXXX — номер вашей текущей версии платформы).

Затем проводим регистрацию. Обратите внимание на пути:

Если регистрация прошла успешно, вы увидите сообщение "DllRegisterServer в ... успешно". После этого попробуйте перезапустить 1С и проверить обмен.

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

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

  1. Откроем Панель управления -> Администрирование -> Службы компонентов.
  2. В дереве консоли перейдем: Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правую кнопку мыши на пункте «Приложения COM+» и выберем Создать -> Приложение.
  4. В мастере установки выберем «Создать новое приложение». Дадим ему имя, например, 1C_COM_Connector.
  5. Важный момент: Способ активации установим как «Серверное приложение».
  6. На вкладке «Учетная запись» выберем «Указанный пользователь» и введем данные учетной записи, под которой запускается служба сервера 1С (например, USR1CV8). Это обеспечит необходимые права доступа.
  7. После создания приложения зайдем в его ветку, найдем узел «Компоненты».
  8. Нажмем правую кнопку мыши, выберем Создать -> Компонент. Выберем «Установка новых компонентов» и укажем путь к comcntr.dll в папке bin вашей платформы.
  9. В свойствах созданного компонента на вкладке «Безопасность» проверим, чтобы у роли CreatorOwner (или соответствующей группы пользователей) были права на доступ.

После внесения изменений в COM+ рекомендуется нажать правой кнопкой на созданное приложение и выбрать «Завершить» (Shut down), чтобы настройки применились при следующем вызове объекта.

Шаг 4: Проверка программного кода

Иногда причина кроется в самом коде инициализации объекта. Рассмотрим пример из практики:

v8 = Новый COMОбъект("v8" + Прием + ".COMConnector");

В данной строке переменная Прием динамически формирует имя класса. Проанализируем возможные значения:

Выясним, что именно передается в коде. Рекомендуется использовать явное указание версии, например V83.COMConnector, так как V8.COMConnector может ссылаться на устаревшие записи реестра от версии 8.2 или вообще отсутствовать. Также можно попробовать использовать более жесткую привязку к версии: V83.COMConnector.1.

Шаг 5: Проверка прав на папку bin и реестр

Если все вышеперечисленное не помогло, проанализируем права доступа. Пользователь, под которым запускается 1С или служба COM+, должен иметь полные права (или как минимум «Чтение и выполнение») на папку, где лежит comcntr.dll. Проверьте свойства папки C:\Program Files\1cv8\8.3.X.XXXX\bin на вкладке «Безопасность».

Также стоит заглянуть в реестр Windows (regedit):

Заключение: Ошибка 0x80040154 чаще всего решается простой регистрацией DLL от имени администратора на той машине, где запускается код. Однако в сложных инфраструктурах (сервер 64-бит + клиент 32-бит) создание приложения COM+ является единственным надежным способом обеспечить взаимодействие систем.

← На главную