Как исправить ошибку «Недопустимая строка с указанием класса» при создании V83.ComConnector?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При организации интеграции между базами 1С через механизм COM-соединения разработчики часто сталкиваются с ошибкой инициализации объекта. В момент выполнения команды создания коннектора система генерирует системное исключение. Разберем типичный фрагмент кода, на котором происходит сбой:


Попытка
    База = Новый COMОбъект("V83.COMConnector");
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

В результате платформа выдает сообщение: «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса». Выясним причину такого поведения и подробно разберем способы его устранения.

Причины возникновения ошибки

Текст ошибки указывает на то, что операционная система Windows не может найти в системном реестре идентификатор класса (CLSID), соответствующий программному идентификатору V83.COMConnector. Проанализируем основные факторы, приводящие к этой неполадке:

  1. Библиотека внешнего соединения не зарегистрирована в ОС. При установке новой версии платформы компонент COM мог быть отключен в мастере инсталляции, либо файлы платформы были скопированы без запуска официального инсталлятора.
  2. Затирание ключей реестра при обновлении или удалении версий платформы. При деинсталляции старых релизов 1С деинсталлятор нередко удаляет ветку HKEY_CLASSES_ROOT\V83.COMConnector, делая компонент недоступным для оставшихся рабочих релизов.
  3. Несовпадение разрядности приложений (32-bit и 64-bit). 32-разрядное приложение не может напрямую использовать 64-битную библиотеку comcntr.dll, и наоборот. Внутрипроцессный сервер COM (in-process) требует точного совпадения разрядности вызывающего процесса и DLL.
  4. Выполнение кода в безопасном режиме. Если внешняя обработка запущена в безопасном режиме (стандартное поведение подсистем БСП при подключении дополнительных обработок), вызов Новый COMОбъект блокируется платформой на программном уровне.

Решение 1. Ручная регистрация comcntr.dll через regsvr32

Самое быстрое и действенное решение — зарегистрировать библиотеку 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С и повторите подключение.

Решение 2. Преодоление конфликта разрядностей через приложение COM+

Рассмотрим ситуацию, когда вызывающее приложение (например, фоновое задание 64-разрядного сервера 1С) должно подключиться к базе через 32-разрядный коннектор. Напрямую загрузить чужеродную библиотеку в процесс невозможно. В таком случае настроим суррогатный процесс через «Службы компонентов» (DCOMCNFG).

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

После этой настройки обращение к V83.COMConnector будет обслуживаться отдельным системным процессом dllhost.exe, что полностью снимает конфликт между 32- и 64-битными процессами.

Решение 3. Проверка контекста безопасности и прав

Если регистрация библиотеки выполнена успешно, но ошибка сохраняется, проанализируем ограничения среды выполнения:

  1. Безопасный режим: если код выполняется во внешней обработке, откроем свойства подключения обработки в справочнике «Дополнительные отчеты и обработки» и отключим безопасный режим либо снизим уровень ограничений.
  2. Профили безопасности кластера: если вызов происходит на сервере 1С:Предприятия с включенными профилями безопасности, необходимо добавить явное разрешение на создание COM-класса V83.COMConnector в свойствах соответствующего профиля кластера.

Альтернативные варианты интеграции без использования COM

Следует помнить, что механизм COM работает исключительно под управлением Windows, считается устаревающим и не поддерживается на серверах Linux. Если архитектура решения позволяет, рассмотрим переход на современные механизмы взаимодействия:

  1. HTTP-сервисы и Web-сервисы: разработка собственных API-методов на стороне базы-источника. Метод полностью кроссплатформенный, не требует прав администратора на регистрацию DLL и не зависит от совпадения версий платформ.
  2. Стандартный интерфейс OData (REST API): позволяет выполнять чтение и запись объектов без внесения изменений в конфигурацию, достаточно опубликовать базу на веб-сервере с включенным интерфейсом OData.
  3. Пакетный запуск 1С из командной строки: вызов сеанса с ключами /Execute и параметром /C для фоновой выгрузки данных через промежуточные файлы (JSON, XML).
← На главную