При настройке синхронизации между базами (например, ЗУП и БП) на серверном кластере администраторы часто сталкиваются с ошибкой: Ошибка при вызове конструктора (COMObject): -2147221005(0x800401F3): Недопустимая строка с указанием класса. Эта проблема особенно актуальна для 64-битных платформ, так как стандартная компонента comcntr.dll требует специфической регистрации в операционной системе, чтобы серверный процесс 1С мог к ней обратиться. Рассмотрим подробно, как решить эту задачу и обеспечить стабильную работу обмена.
Разберем ситуацию: сервер 1С работает как 64-битное приложение. Когда в коде вызывается Новый COMObject("V83.COMConnector"), операционная система пытается найти в реестре зарегистрированный класс с таким программным идентификатором (ProgID). Если компонента зарегистрирована некорректно или у пользователя, от имени которого запущен сервер 1С (обычно это USR1CV8), нет прав на чтение соответствующих веток реестра или запуск компоненты, возникает вышеуказанная ошибка.
Проанализируем основные причины:
comcntr.dll не зарегистрирована в системном реестре через regsvr32.USR1CV8 не имеет прав на запуск и активацию DCOM-объекта.Первым делом нам необходимо убедиться, что библиотека comcntr.dll зарегистрирована. Важно использовать библиотеку именно той версии платформы, на которой работает сервер. Рассмотрим процесс регистрации для 64-битной системы.
Откроем командную строку (CMD) от имени администратора и выполним регистрацию. Обратите внимание на путь — он должен соответствовать вашей версии 1С:
regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Если вы используете 32-битный клиент на 64-битной системе для локальных тестов, также может потребоваться регистрация 32-битной версии:
C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
После успешной регистрации должно появиться сообщение «DllRegisterServer в ... успешно завершено».
Поскольку 64-битный сервер 1С часто не может напрямую взаимодействовать с компонентой (особенно если есть нюансы в версиях), лучшим решением будет создание «обертки» в виде приложения COM+. Это позволит компоненте запускаться в отдельном процессе dllhost.exe.
Рассмотрим пошагово процесс настройки:
1Cv8_COMConnector) и выберем тип Серверное приложение.USR1CV8 и ее пароль. Это критически важно, так как под «Интерактивным пользователем» компонента на сервере работать не будет.Теперь внутрь созданного приложения нужно добавить саму библиотеку comcntr.dll:
1Cv8_COMConnector, найдем папку Компоненты.comcntr.dll в папке bin вашей платформы.Проанализируем ситуацию, когда компонента добавлена, но ошибка сохраняется. Часто это связано с тем, что механизмы безопасности Windows блокируют доступ. Выполним следующие действия:
Зайдем в свойства созданного приложения COM+:
Зайдем в свойства самого компонента (внутри приложения):
Иногда даже после настройки COM+ пользователь USR1CV8 не может считать данные о классе. Нам нужно убедиться, что права на ветку реестра выданы корректно. Проверим следующие разделы в regedit:
Найдем ветку HKEY_CLASSES_ROOT\CLSID\{B5C52FDE-4409-4923-96E8-D113E4014C92} (идентификатор может варьироваться, ориентируйтесь на поиск по слову V83.COMConnector).
Нажмите правую кнопку мыши на разделе -> Разрешения. Убедитесь, что у группы Пользователи или конкретно у USR1CV8 есть права на Чтение.
Для того чтобы исключить ошибки в самом коде 1С, мы можем проверить работоспособность COM-объекта через PowerShell. Важно запускать тест от имени того пользователя, который запускает службу 1С. Рассмотрим пример команды:
$connection = New-Object -ComObject "V83.COMConnector"
$connection | Get-Member
Если команда возвращает список методов объекта (Connect, ConnectAgent и др.), значит, регистрация прошла успешно. Если же возвращается ошибка об отсутствии класса, проблему нужно искать в шагах 1 и 2.
Выясним причину, почему иногда синхронизация работает под администратором, но не работает под системным пользователем. Это всегда вопрос прав на запуск DCOM. Если после всех манипуляций ошибка сохраняется, попробуйте следующее:
dllhost или всей ОС.V83.COMConnector от разных релизов платформы. Лучше оставить регистрацию только для актуального релиза.C:\Windows\Temp. Пользователь USR1CV8 должен иметь туда полный доступ, так как COM-соединение создает там временные файлы при инициализации.Таким образом, правильная настройка заключается в комбинации регистрации DLL, создании суррогатного приложения COM+ с правильным «Удостоверением» и проверке прав доступа в реестре и файловой системе.