При организации интеграции между базами 1С через механизм COM-соединения разработчики часто сталкиваются с ошибкой инициализации объекта. В момент выполнения команды создания коннектора система генерирует системное исключение. Разберем типичный фрагмент кода, на котором происходит сбой:
Попытка
База = Новый COMОбъект("V83.COMConnector");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
В результате платформа выдает сообщение: «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса». Выясним причину такого поведения и подробно разберем способы его устранения.
Текст ошибки указывает на то, что операционная система Windows не может найти в системном реестре идентификатор класса (CLSID), соответствующий программному идентификатору V83.COMConnector. Проанализируем основные факторы, приводящие к этой неполадке:
HKEY_CLASSES_ROOT\V83.COMConnector, делая компонент недоступным для оставшихся рабочих релизов.comcntr.dll, и наоборот. Внутрипроцессный сервер COM (in-process) требует точного совпадения разрядности вызывающего процесса и DLL.Новый COMОбъект блокируется платформой на программном уровне.Самое быстрое и действенное решение — зарегистрировать библиотеку comcntr.dll используемой версии платформы вручную с помощью утилиты regsvr32. Разберем по шагам, как это сделать правильно с учетом разрядности установленной платформы и операционной системы.
Обязательное условие: командную строку (cmd) необходимо запускать от имени Администратора.
Вариант для 32-разрядной платформы 1С на 64-разрядной Windows:
В 64-битной Windows 32-разрядные библиотеки должны регистрироваться специальной версией утилиты, расположенной в каталоге SysWOW64. Выполним команду:
C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.9.1850\bin\comcntr.dll"
Вариант для 64-разрядной платформы 1С:
Если используется 64-битный клиент или сервер 1С, регистрация выполняется стандартной системной утилитой из каталога System32:
C:\Windows\System32\regsvr32 "C:\Program Files\1cv8\8.3.9.1850\bin\comcntr.dll"
После выполнения команды должно появиться диалоговое окно с подтверждением: «Успешное выполнение DllRegisterServer в ...comcntr.dll». После этого перезапустите сеанс 1С и повторите подключение.
Рассмотрим ситуацию, когда вызывающее приложение (например, фоновое задание 64-разрядного сервера 1С) должно подключиться к базе через 32-разрядный коннектор. Напрямую загрузить чужеродную библиотеку в процесс невозможно. В таком случае настроим суррогатный процесс через «Службы компонентов» (DCOMCNFG).
dcomcnfg и нажмем Enter.1C_V83_COMConnector) и тип активации «Серверное приложение».comcntr.dll требуемой разрядности.После этой настройки обращение к V83.COMConnector будет обслуживаться отдельным системным процессом dllhost.exe, что полностью снимает конфликт между 32- и 64-битными процессами.
Если регистрация библиотеки выполнена успешно, но ошибка сохраняется, проанализируем ограничения среды выполнения:
V83.COMConnector в свойствах соответствующего профиля кластера.Следует помнить, что механизм COM работает исключительно под управлением Windows, считается устаревающим и не поддерживается на серверах Linux. Если архитектура решения позволяет, рассмотрим переход на современные механизмы взаимодействия:
/Execute и параметром /C для фоновой выгрузки данных через промежуточные файлы (JSON, XML).