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

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

При настройке или выполнении прямого обмена данными между информационными базами 1С (например, между «Управление торговлей 10.3» и «Бухгалтерия предприятия 2.0 / 3.0») разработчики и администраторы нередко сталкиваются с критической ошибкой инициализации соединения:

Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован

Чаще всего эта неполадка возникает после обновления платформы 1С:Предприятие или при удалении старых версий платформы. Разберем по шагам, почему возникает данный сбой и как его быстро устранить.

Причина 1: Несоответствие версии COM-коннектора в коде или настройках обмена

Проанализируем типовую ситуацию. Базы успешно обменивались на платформе «1С:Предприятие 8.2». После перехода одной или обеих конфигураций на платформу 8.3 старая версия 8.2 была удалена с компьютера. При попытке синхронизации алгоритм обмена по-прежнему пытается создать COM-объект старой версии платформы.

Посмотрим на пример формирования программного вызова:


ОбъектПодключения = СтруктураПодключения.ВерсияПлатформы + ".COMConnector";
ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения);

Если в настройках узла обмена или параметров подключения указана версия 8.2, система пытается инициализировать COM-класс V82.COMConnector. Так как платформа 8.2 удалена, соответствующий класс в реестре Windows отсутствует, что и приводит к коду ошибки 0x80040154.

Для исправления этой проблемы выполним следующие действия:

  1. Откроем настройки узла обмена (или параметры прямого подключения к базе-приемнику) в пользовательском режиме.
  2. Найдем поле Версия платформы и переключим его со значения 8.2 на 8.3 (либо V83).
  3. Если подключение прописано вручную в программном коде, заменим инициализацию:
    
    // Было:
    V8COMConnector = Новый COMОбъект("V82.COMConnector");
    
    // Стало:
    V8COMConnector = Новый COMОбъект("V83.COMConnector");
    
  4. Сохраним настройки и повторим процедуру синхронизации данных.

Причина 2: Библиотека comcntr.dll не зарегистрирована в операционной системе

Если в настройках подключения указана корректная версия платформы, но ошибка сохраняется, выясним состояние системной регистрации библиотеки comcntr.dll. При установке новой версии платформы системная запись может не создаться автоматически или перезаписаться некорректно.

Выполним ручную регистрацию компонента через командную строку от имени Администратора с учетом разрядности установленной платформы:

  1. Для 32-битной платформы 1С:
    
    C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
    
  2. Для 64-битной платформы 1С:
    
    C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
    

Обратите внимание: вместо 8.3.XX.XXXX необходимо указать точный номер установленного релиза платформы 1С:Предприятие.

Причина 3: Конфликт разрядностей и настройка приложения COM+

Рассмотрим случай, когда 32-битный клиент или фоновое задание пытается подключиться к 64-битному коннектору (или наоборот). Напрямую 32-битный процесс Windows не может загрузить 64-битную динамическую библиотеку.

Для решения конфликта разрядностей настроим выделенное серверное приложение в системной оснастке Службы компонентов (COM+):

  1. Нажмем сочетание клавиш Win + R, введем команду dcomcnfg и нажмем Enter.
  2. Перейдем по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правой кнопкой мыши на папку Приложения COM+ и выберем Создать -> Приложение.
  4. В мастере выберем Создать новое приложение, укажем понятное имя (например, 1Cv8 COMConnector) и установим тип Серверное приложение.
  5. На шаге выбора удостоверения укажем учетную запись пользователя с полными правами к базам 1С и системным каталогам.
  6. Внутри созданного приложения раскроем ветку Компоненты, нажмем правой кнопкой мыши -> Создать -> Компонент.
  7. Выберем Установка новых компонентов и укажем путь к файлу comcntr.dll из каталога нужной версии платформы.

Благодаря этому служба Windows COM+ запустит суррогатный процесс dllhost.exe, который обеспечит прозрачное взаимодействие между процессами разной разрядности.

Современные альтернативы прямому COM-соединению

Хотя технология COM-соединения позволяет быстро наладить прямой обмен, в настоящее время она считается устаревающей и имеет ряд ограничений: работает исключительно под управлением ОС Windows, занимает отдельную клиентскую лицензию на все время подключения и чувствительна к обновлениям версий платформы.

Для построения надежного обмена данными рекомендуется рассмотреть современные альтернативы:

  1. HTTP-сервисы и Web-сервисы (SOAP) — платформонезависимые решения, не требующие регистрации библиотек в реестре Windows.
  2. Автоматический REST-интерфейс (OData) — стандартная встроенная возможность 1С:Предприятия для чтения и записи данных без изменения конфигурации.
  3. Обмен через универсальный формат EnterpriseData — обмен файлами сообщений (XML/JSON) через каталог, сетевую папку или FTP.
← На главную