Как исправить ошибку при вызове конструктора COMОбъект: -2147221005 (0x800401F3) в 1С

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

При настройке прямого обмена данными между конфигурациями 1С (например, 1С:Управление торговлей и 1С:Бухгалтерия) разработчики и администраторы часто сталкиваются со следующей системной ошибкой:

Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса

Проанализируем причины возникновения этой проблемы и подробно рассмотрим проверенные способы ее решения.

Выясним причину ошибки

Код ошибки -2147221005 (0x800401F3) в операционной системе Windows означает «Invalid class string» (Недопустимая строка с указанием класса). Это указывает на то, что исполняемый процесс 1С пытался обратиться к COM-классу по его программному идентификатору (ProgID), но данный класс не был найден в системном реестре Windows.

Основные причины возникновения ситуации:

  1. Обращение к ProgID старой версии платформы: Конфигурация-источник пытается программно создать объект V82.COMConnector, однако на сервере или локальном ПК установлена только платформа версии 8.3, которая регистрирует класс V83.COMConnector.
  2. Несоответствие разрядности (32-bit и 64-bit): 64-разрядный сервер 1С (процесс rphost.exe) не может напрямую загрузить 32-разрядную библиотеку comcntr.dll, если она зарегистрирована только в 32-битной подсистеме.
  3. Отсутствие регистрации библиотеки comcntr.dll: Библиотека внешней компоненты не зарегистрирована в реестре с помощью утилиты regsvr32 после установки или обновления платформы.

Способ 1. Изменение ProgID на V83.COMConnector в коде

Рассмотрим ситуацию, когда старая конфигурация (например, УТ 10.3) при подключении к другой базе формирует строку ProgID на основе устаревшего значения. Проверив переменную под отладчиком, можно обнаружить следующий код:


Если ПустаяСтрока(ОбъектПодключения) Тогда
    ОбъектПодключения = СтруктураПодключения.ВерсияПлатформы + ".COMConnector";
КонецЕсли;

Если переменная СтруктураПодключения.ВерсияПлатформы содержит значение "V82", то в итоге создается объект Новый COMОбъект("V82.COMConnector"), вызывающий ошибку.

Для исправления разберем по шагам порядок действий в Конфигураторе:

  1. Откроем конфигурацию в режиме Конфигуратор.
  2. Найдем обработку или модуль, отвечающий за прямое COM-подключение (в типовых решениях это модуль обработки обмена или справочник настроек обмена данными).
  3. Заменим принудительное или автоматическое формирование строки "V82.COMConnector" на "V83.COMConnector":

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

Способ 2. Корректная регистрация comcntr.dll с учетом разрядности

Если код программы использует корректный ProgID, но ошибка сохраняется, проанализируем правильность регистрации DLL-библиотеки в реестре Windows.

Выполним регистрацию с учетом разрядности используемого приложения:

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

Примечание: Вместо 8.3.X.XXXX нужно указать точный номер установленного релиза платформы 1С.

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

Если служба сервера 1С является 64-разрядной и должна обращаться к 32-битным COM-компонентам, разберем настройку приложения COM+:

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

Способ 4. Переход на обмен через файлы XML и устранение ошибки кодов узлов

Если прямая COM-связь недоступна или её настройка ограничена правами доступа, настроим альтернативный обмен через файлы (XML/FTP).

При создании обмена через файл может возникнуть ошибка:

Неправильно заданы коды узлов в базе-источнике и в базе-приемнике. Для устранения проблемы в базе-источнике в плане обмена измените код созданного узла...

Важное предупреждение: Категорически не рекомендуется менять код уузла Этот узел (предопределенного узла вашей текущей базы), так как это приведет к изменению префиксов и сбою нумерации создаваемых документов!

Рассмотрим правильный алгоритм устранения конфликта узлов:

  1. Откроем план обмена в базе-источнике (например, Обмен Управление торговлей - Бухгалтерия).
  2. Найдем **второй (созданный) узел**, представляющий собой противоположную базу.
  3. Изменим код этого узла таким образом, чтобы он строго совпадал с кодом предопределенного узла (Этот узел) в базе-приемнике.
  4. Убедимся, что код узла Этот узел в базе-источнике совпадает с кодом созданного узла в базе-приемнике.

После синхронизации кодов узлов создание правил и передача файлов обмена пройдут успешно без нарушения нумерации документов.

← На главную