В процессе эксплуатации систем на базе 1С:Предприятие 8.3 специалисты часто сталкиваются с ситуацией, когда обмен данными (например, между конфигурациями «Бухгалтерия предприятия» и «Зарплата и управление персоналом») успешно запускается вручную, но выдает критическую ошибку при работе регламентного задания по расписанию. Рассмотрим детально причины возникновения этой проблемы и способы её решения.
Проанализируем ситуацию: пользователь запускает синхронизацию через интерфейс (нажимая кнопку «Синхронизировать»), и процесс проходит без нареканий. Однако в журнале регистрации при выполнении того же сценария по расписанию фиксируется ошибка следующего содержания:
Не удалось подключиться к другой программе: {ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(1166)}: Метод объекта не обнаружен (Connect) Результат.Соединение = COMConnector.Connect(СтрокаСоединения);
Более подробный текст из журнала регистрации раскрывает истинную причину:
Ошибка при вызове конструктора (COMObject): COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V83.COMConnector" по причине: -2147221164(0x80040154): Класс не зарегистрирован
Код ошибки 0x80040154 однозначно указывает на то, что операционная система Windows не может найти в реестре сведения о COM-объекте V83.COMConnector. Выясним, почему это происходит и как это исправить.
Самая распространенная причина заключается в том, что после установки или обновления платформы 1С библиотека, отвечающая за COM-соединение, не была зарегистрирована в операционной системе. Это часто случается, если установка производилась без прав администратора или при возникновении конфликтов между разными версиями платформы.
Разберем по шагам процесс ручной регистрации компоненты:
bin установленной версии платформы 1С. Например: cd "C:\Program Files\1cv8\8.3.13.1513\bin".regsvr32 comcntr.dll
После успешного выполнения команды должно появиться системное сообщение о том, что регистрация прошла удачно. Рассмотрим ситуацию, если это не помогло.
Важно понимать различие между 32-битной (x86) и 64-битной (x64) версиями платформы. Если регламентное задание запускается на сервере 1С (в случае клиент-серверного варианта), оно выполняется процессом rphost. Если сервер 1С 64-битный, то и библиотека comcntr.dll должна быть зарегистрирована из папки с 64-битной версией платформы.
В случае файловой базы, как в рассматриваемом примере, регламентное задание выполняется в контексте запущенного сеанса пользователя. Если один пользователь работает в 32-битном клиенте, а другой в 64-битном, или если библиотека зарегистрирована только для одной разрядности, возникнет ошибка «Класс не зарегистрирован».
Проанализируем контекст выполнения: когда администратор нажимает кнопку «Синхронизировать», 1С использует COM-объект под его учетной записью Windows, для которой библиотека может быть доступна. Когда задание запускается «само по себе» или под другим пользователем, система теряет доступ к объекту.
Иногда файл comcntr.dll вовсе отсутствует в папке bin. Это происходит, если при установке платформы 1С в списке компонентов не был выбран пункт «COM-соединение». Проверим наличие файла в папке с платформой. Если его нет, выполним следующие действия:
regsvr32.Если простая регистрация через regsvr32 не помогает (например, из-за специфических настроек безопасности Windows или необходимости взаимодействия 32-битных и 64-битных приложений), рекомендуется настроить «обертку» через Службы компонентов (DCOM).
Рассмотрим, как это сделать:
1C_COM_Connector) и выберем тип «Серверное приложение».comcntr.dll в папке bin актуальной платформы.Такой подход позволяет 64-битным процессам обращаться к 32-битной библиотеке и гарантирует запуск соединения от имени пользователя с административными правами, независимо от того, кто запустил 1С.
Выясним, почему в файловой базе ошибка проявляется именно у определенных пользователей. В файловом режиме регламентные задания не имеют собственного серверного процесса. Они запускаются «внутри» обычного сеанса одного из пользователей. Если в базе одновременно работают несколько человек, 1С выбирает один из сеансов для исполнения фонового задания.
Если этот «случайный» сеанс запущен пользователем Windows, у которого нет прав на чтение ветки реестра HKEY_CLASSES_ROOT или нет прав на исполнение файлов в папке bin платформы, то COM-соединение не будет создано.
Совет: Для стабильной работы регламентных заданий в файловых базах рекомендуется выделять отдельный компьютер или сеанс, запущенный с параметром /AllowExecuteScheduledJobs под учетной записью с правами администратора.
Подведем итог. Если вы столкнулись с ошибкой 0x80040154 при синхронизации:
comcntr.dll в папке bin вашей версии 1С.regsvr32 от имени администратора.Как показывает практика, в большинстве случаев достаточно разовой регистрации библиотеки системным администратором, после чего обмен начинает работать корректно как в ручном режиме, так и по расписанию.