Как исправить ошибку «Недопустимая строка с указанием класса» при создании COM-объекта в 1С?

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

При настройке прямого подключения между информационными базами через обработку УниверсальныйОбменДаннымиXML или в собственном программном коде разработчики часто сталкиваются с исключением при вызове конструктора COMОбъект. Ошибка сопровождается кодом -2147221005 (0x800401F3) и сообщением: «Недопустимая строка с указанием класса».

Разберем типичный пример кода, на котором происходит сбой:


Попытка
    ОбъектПодключения = Новый COMОбъект("V83.COMConnector");
Исключение
    ЗаписьЖурналаРегистрации("Ошибка подключения COM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    ВызватьИсключение;
КонецПопытки;

Проанализируем детально, почему операционная система не может найти зарегистрированный класс V83.COMConnector, и рассмотрим все проверенные способы устранения этой неисправности.

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

Код ошибки 0x800401F3 (CO_E_CLASSSTRING) сообщает о том, что в системном реестре Windows отсутствует запись для указанного программного идентификатора (ProgID) или исполняемый процесс не имеет доступа к соответствующей ветке реестра. Выясним основные источники проблемы:

  1. Несовпадение разрядности процесса и библиотеки: 64-разрядный рабочий процесс 1С (клиент или служба сервера rphost) не может напрямую загрузить в свое адресное пространство 32-разрядную библиотеку comcntr.dll, и наоборот.
  2. Ошибки при регистрации библиотеки в 64-битной Windows: стандартный запуск утилиты regsvr32 без явного указания системного каталога может зарегистрировать библиотеку не в ту ветку реестра.
  3. Контекст выполнения серверного кода: если обработка выполняется на сервере 1С, COM-соединитель должен быть зарегистрирован непосредственно на сервере приложений, а учетная запись службы (например, USR1CV8) обязана иметь права на чтение файлов и веток реестра HKCR / HKLM\Software\Classes.
  4. Отсутствие системных библиотек: для работы comcntr.dll требуются соответствующие пакеты распространяемых компонентов Microsoft Visual C++ Redistributable.
  5. Ограничения операционной системы: технология COM является частью инфраструктуры Windows и не поддерживается на серверах под управлением Linux.

Способ 1. Явная регистрация comcntr.dll через командную строку от имени Администратора

Рассмотрим порядок ручной регистрации внешнего соединения через утилиту regsvr32.exe с учетом битности операционной системы и установленной платформы 1С.

Разберем по шагам регистрацию для различных конфигураций:

  1. Для 64-разрядной платформы 1С на 64-разрядной ОС: запускаем командную строку от имени Администратора и выполняем команду:
    
    C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
    
  2. Для 32-разрядной платформы 1С на 64-разрядной ОС: обратите внимание, что необходимо использовать утилиту из каталога SysWOW64:
    
    C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
    
  3. Для 32-разрядной платформы 1С на 32-разрядной ОС:
    
    C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
    

После выполнения команды обязательно должно появиться системное диалоговое окно с подтверждением: «Успешное выполнение DllRegisterServer в ... comcntr.dll».

Способ 2. Настройка COM+ приложения для связки 64-битного сервера и 32-битного коннектора

Если сервер 1С работает в 64-разрядном режиме, а база-приемник требует использования 32-разрядного COM-соединителя (или наоборот), прямое обращение вызовет ошибку несовместимости архитектур. В этой ситуации настроим суррогатный процесс dllhost.exe через оснастку «Службы компонентов» Windows.

Разберем процесс настройки по шагам:

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

Такой подход позволяет операционной системе автоматически запускать отдельный процесс-мост, с которым сервер 1С может безопасно взаимодействовать вне зависимости от различий в разрядности.

Способ 3. Переключение выполнения выгрузки в клиентский контекст

Если COM-компонента установлена и настроена на рабочей станции пользователя, но отсутствует на центральном сервере 1С:Предприятия, ошибка возникнет при попытке выполнения кода на стороне сервера.

В типовой обработке УниверсальныйОбменДаннымиXML предусмотрена возможность переключения контекста. Посмотрим, как это сделать: на вкладке параметров подключения необходимо отключить выполнение фонового задания на сервере, чтобы инициализация COM-соединения и процедура обмена выполнялись непосредственно в рамках сеанса тонкого или толстого клиента на компьютере пользователя.

Альтернативные технологии интеграции

Обратите внимание, что технология внешнего COM-соединения в современных версиях платформы 1С:Предприятие (начиная с релизов 8.3.24) считается устаревающей из-за жесткой привязки к операционной системе Windows и сложностей с масштабированием. Если есть возможность изменить архитектуру интеграции, рекомендуется использовать современные альтернативы:

  1. Обмен через файлы XML/JSON: выгрузка и последующая загрузка данных через промежуточный файл без установки постоянного бинарного соединения.
  2. HTTP-сервисы и Web-сервисы (SOAP/REST): создание собственных сервисов в конфигурациях для прямой кроссплатформенной передачи структурированных пакетов.
  3. Стандартный интерфейс OData: использование встроенного REST-интерфейса платформы 1С для чтения и записи объектов конфигурации.
  4. Формат EnterpriseData: типовой механизм обмена данными через планы обмена с использованием веб-сервисов или сетевых каталогов.
← На главную