При настройке прямого подключения между информационными базами через обработку УниверсальныйОбменДаннымиXML или в собственном программном коде разработчики часто сталкиваются с исключением при вызове конструктора COMОбъект. Ошибка сопровождается кодом -2147221005 (0x800401F3) и сообщением: «Недопустимая строка с указанием класса».
Разберем типичный пример кода, на котором происходит сбой:
Попытка
ОбъектПодключения = Новый COMОбъект("V83.COMConnector");
Исключение
ЗаписьЖурналаРегистрации("Ошибка подключения COM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
Проанализируем детально, почему операционная система не может найти зарегистрированный класс V83.COMConnector, и рассмотрим все проверенные способы устранения этой неисправности.
Код ошибки 0x800401F3 (CO_E_CLASSSTRING) сообщает о том, что в системном реестре Windows отсутствует запись для указанного программного идентификатора (ProgID) или исполняемый процесс не имеет доступа к соответствующей ветке реестра. Выясним основные источники проблемы:
rphost) не может напрямую загрузить в свое адресное пространство 32-разрядную библиотеку comcntr.dll, и наоборот.regsvr32 без явного указания системного каталога может зарегистрировать библиотеку не в ту ветку реестра.USR1CV8) обязана иметь права на чтение файлов и веток реестра HKCR / HKLM\Software\Classes.comcntr.dll требуются соответствующие пакеты распространяемых компонентов Microsoft Visual C++ Redistributable.Рассмотрим порядок ручной регистрации внешнего соединения через утилиту regsvr32.exe с учетом битности операционной системы и установленной платформы 1С.
Разберем по шагам регистрацию для различных конфигураций:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
После выполнения команды обязательно должно появиться системное диалоговое окно с подтверждением: «Успешное выполнение DllRegisterServer в ... comcntr.dll».
Если сервер 1С работает в 64-разрядном режиме, а база-приемник требует использования 32-разрядного COM-соединителя (или наоборот), прямое обращение вызовет ошибку несовместимости архитектур. В этой ситуации настроим суррогатный процесс dllhost.exe через оснастку «Службы компонентов» Windows.
Разберем процесс настройки по шагам:
dcomcnfg и нажимаем Enter.1C_V83_COMConnector) и активируем переключатель «Серверное приложение».comcntr.dll из каталога bin необходимой версии платформы.Такой подход позволяет операционной системе автоматически запускать отдельный процесс-мост, с которым сервер 1С может безопасно взаимодействовать вне зависимости от различий в разрядности.
Если COM-компонента установлена и настроена на рабочей станции пользователя, но отсутствует на центральном сервере 1С:Предприятия, ошибка возникнет при попытке выполнения кода на стороне сервера.
В типовой обработке УниверсальныйОбменДаннымиXML предусмотрена возможность переключения контекста. Посмотрим, как это сделать: на вкладке параметров подключения необходимо отключить выполнение фонового задания на сервере, чтобы инициализация COM-соединения и процедура обмена выполнялись непосредственно в рамках сеанса тонкого или толстого клиента на компьютере пользователя.
Обратите внимание, что технология внешнего COM-соединения в современных версиях платформы 1С:Предприятие (начиная с релизов 8.3.24) считается устаревающей из-за жесткой привязки к операционной системе Windows и сложностей с масштабированием. Если есть возможность изменить архитектуру интеграции, рекомендуется использовать современные альтернативы: