При организации обмена данными между различными конфигурациями 1С, например, при выгрузке документов из 1С:Управление торговлей 10.3 в 1С:Бухгалтерия предприятия 3.0, разработчики часто используют механизм COM-соединения. Однако стабильная работа этого механизма может нарушиться после обновления платформы, смены разрядности сервера или даже настройки синхронизации между другими базами (как в случае с БП и ЗУП). Ошибка -2147221164(0x80040154): Класс не зарегистрирован сигнализирует о том, что операционная система не может найти в реестре библиотеку comcntr.dll, отвечающую за COM-соединение, или не имеет прав для доступа к ней.
В этой статье мы подробно разберем, как диагностировать и устранить эту проблему, пройдя путь от простой регистрации библиотеки до настройки компонентов COM+.
Прежде чем приступать к техническим манипуляциям, нам необходимо выяснить причину: где именно выполняется код, создающий COM-объект. Ошибка «Класс не зарегистрирован» возникает на той машине, где инициируется соединение. Проанализируем два варианта:
comcntr.dll должна быть зарегистрирована на вашем локальном ПК.Как показала практика обсуждения, часто администраторы пытаются настроить сервер, в то время как пользователь запускает обработку локально. Проверьте, работает ли обмен у других сотрудников. Если у бухгалтера на Windows 7 все работает, а у вас на Windows 10 — нет, значит, проблема локальная.
Самый быстрый способ восстановить работу — принудительная регистрация библиотеки в реестре Windows. Рассмотрим, как это сделать правильно, учитывая разрядность системы. Важно: все действия выполняются в командной строке (cmd), запущенной от имени администратора.
Сначала рекомендуется выполнить деинсталляцию старой регистрации, чтобы исключить конфликты версий:
regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll" /u
(Где 8.3.X.XXXX — номер вашей текущей версии платформы).
Затем проводим регистрацию. Обратите внимание на пути:
C:\Windows\System32\regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Если регистрация прошла успешно, вы увидите сообщение "DllRegisterServer в ... успешно". После этого попробуйте перезапустить 1С и проверить обмен.
Если обычная регистрация через regsvr32 не помогает (особенно актуально для 64-битных серверов 1С, которым нужно обращаться к 32-битным компонентам), необходимо создать специальное приложение в консоли «Службы компонентов». Разберем этот процесс по шагам:
1C_COM_Connector.USR1CV8). Это обеспечит необходимые права доступа.comcntr.dll в папке bin вашей платформы.CreatorOwner (или соответствующей группы пользователей) были права на доступ.После внесения изменений в COM+ рекомендуется нажать правой кнопкой на созданное приложение и выбрать «Завершить» (Shut down), чтобы настройки применились при следующем вызове объекта.
Иногда причина кроется в самом коде инициализации объекта. Рассмотрим пример из практики:
v8 = Новый COMОбъект("v8" + Прием + ".COMConnector");
В данной строке переменная Прием динамически формирует имя класса. Проанализируем возможные значения:
Прием пустое — система ищет V8.COMConnector.Прием равно "3" — система ищет V83.COMConnector.Выясним, что именно передается в коде. Рекомендуется использовать явное указание версии, например V83.COMConnector, так как V8.COMConnector может ссылаться на устаревшие записи реестра от версии 8.2 или вообще отсутствовать. Также можно попробовать использовать более жесткую привязку к версии: V83.COMConnector.1.
Если все вышеперечисленное не помогло, проанализируем права доступа. Пользователь, под которым запускается 1С или служба COM+, должен иметь полные права (или как минимум «Чтение и выполнение») на папку, где лежит comcntr.dll. Проверьте свойства папки C:\Program Files\1cv8\8.3.X.XXXX\bin на вкладке «Безопасность».
Также стоит заглянуть в реестр Windows (regedit):
HKEY_CLASSES_ROOT\V83.COMConnector\CLSID.HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32.comcntr.dll, которую вы используете. Если там указан путь к старой, удаленной версии платформы, исправьте его вручную или перерегистрируйте компоненту, как описано в Шаге 2.Заключение: Ошибка 0x80040154 чаще всего решается простой регистрацией DLL от имени администратора на той машине, где запускается код. Однако в сложных инфраструктурах (сервер 64-бит + клиент 32-бит) создание приложения COM+ является единственным надежным способом обеспечить взаимодействие систем.