Как исправить ошибку «Класс не зарегистрирован» (0x80040154) при выполнении синхронизации 1С по расписанию?

Системный администратор IT и автоматизация бизнеса
← На главную

В процессе эксплуатации систем на базе 1С:Предприятие 8.3 специалисты часто сталкиваются с ситуацией, когда обмен данными (например, между конфигурациями «Бухгалтерия предприятия» и «Зарплата и управление персоналом») успешно запускается вручную, но выдает критическую ошибку при работе регламентного задания по расписанию. Рассмотрим детально причины возникновения этой проблемы и способы её решения.

Анализ симптомов и текста ошибки

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

Не удалось подключиться к другой программе: {ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(1166)}: Метод объекта не обнаружен (Connect) Результат.Соединение = COMConnector.Connect(СтрокаСоединения);

Более подробный текст из журнала регистрации раскрывает истинную причину:

Ошибка при вызове конструктора (COMObject): COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector" по причине: -2147221164(0x80040154): Класс не зарегистрирован

Код ошибки 0x80040154 однозначно указывает на то, что операционная система Windows не может найти в реестре сведения о COM-объекте V83.COMConnector. Выясним, почему это происходит и как это исправить.

Причина 1: Отсутствие регистрации библиотеки comcntr.dll

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

Разберем по шагам процесс ручной регистрации компоненты:

  1. Необходимо запустить командную строку (cmd) от имени Администратора.
  2. Перейти в каталог bin установленной версии платформы 1С. Например: cd "C:\Program Files\1cv8\8.3.13.1513\bin".
  3. Выполнить команду регистрации библиотеки: regsvr32 comcntr.dll

После успешного выполнения команды должно появиться системное сообщение о том, что регистрация прошла удачно. Рассмотрим ситуацию, если это не помогло.

Причина 2: Разрядность системы и клиента (32 vs 64 бита)

Важно понимать различие между 32-битной (x86) и 64-битной (x64) версиями платформы. Если регламентное задание запускается на сервере 1С (в случае клиент-серверного варианта), оно выполняется процессом rphost. Если сервер 1С 64-битный, то и библиотека comcntr.dll должна быть зарегистрирована из папки с 64-битной версией платформы.

В случае файловой базы, как в рассматриваемом примере, регламентное задание выполняется в контексте запущенного сеанса пользователя. Если один пользователь работает в 32-битном клиенте, а другой в 64-битном, или если библиотека зарегистрирована только для одной разрядности, возникнет ошибка «Класс не зарегистрирован».

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

Причина 3: Особенности установки платформы

Иногда файл comcntr.dll вовсе отсутствует в папке bin. Это происходит, если при установке платформы 1С в списке компонентов не был выбран пункт «COM-соединение». Проверим наличие файла в папке с платформой. Если его нет, выполним следующие действия:

  1. Зайдем в «Панель управления» -> «Программы и компоненты».
  2. Найдем в списке установленную версию 1С и нажмем «Изменить».
  3. В мастере установки выберем «Изменить» и убедимся, что компонент «COM-соединение» отмечен для установки.
  4. Завершим установку и повторим регистрацию через regsvr32.

Использование Служб компонентов (COM+) для решения проблем прав доступа

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

Рассмотрим, как это сделать:

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

Такой подход позволяет 64-битным процессам обращаться к 32-битной библиотеке и гарантирует запуск соединения от имени пользователя с административными правами, независимо от того, кто запустил 1С.

Нюансы регламентных заданий в файловом режиме

Выясним, почему в файловой базе ошибка проявляется именно у определенных пользователей. В файловом режиме регламентные задания не имеют собственного серверного процесса. Они запускаются «внутри» обычного сеанса одного из пользователей. Если в базе одновременно работают несколько человек, 1С выбирает один из сеансов для исполнения фонового задания.

Если этот «случайный» сеанс запущен пользователем Windows, у которого нет прав на чтение ветки реестра HKEY_CLASSES_ROOT или нет прав на исполнение файлов в папке bin платформы, то COM-соединение не будет создано.

Совет: Для стабильной работы регламентных заданий в файловых базах рекомендуется выделять отдельный компьютер или сеанс, запущенный с параметром /AllowExecuteScheduledJobs под учетной записью с правами администратора.

Резюме

Подведем итог. Если вы столкнулись с ошибкой 0x80040154 при синхронизации:

Как показывает практика, в большинстве случаев достаточно разовой регистрации библиотеки системным администратором, после чего обмен начинает работать корректно как в ручном режиме, так и по расписанию.

← На главную