При попытке связать 1С с внешними программами (например, Microsoft Excel, компонентами телефонии или внешними библиотеками) разработчики часто сталкиваются с системным сообщением: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Проанализируем, почему появляется эта ошибка, как устроена технология COM в среде Windows и какими способами можно наладить правильную интеграцию.
Метод Новый COMОбъект не предназначен для обычного запуска произвольных исполняемых файлов (.exe). Он инициализирует программный объект через встроенную в операционную систему Windows технологию COM (Component Object Model) / OLE.
Для создания объекта платформа 1С передает операционной системе текстовый идентификатор класса — ProgID (например, "Excel.Application"). Ошибка 0x800401F3 означает, что операционная система Windows не смогла найти указанную строку ProgID в своем системном реестре.
Рассмотрим основные причины, почему система не находит класс:
WOW6432Node и недоступны 64-битному процессу напрямую.&НаСервере, компоненты должны быть зарегистрированы на серверном компьютере, а не на локальной машине пользователя.Новый COMОбъект работать не будет.Разберем разницу между инициализацией программного интерфейса и запуском внешнего файла. Посмотрим на стандартный пример обращения к Excel:
&НаКлиенте
Процедура ЗапуститьЭксель()
// Создание COM-объекта через программный идентификатор ProgID
Excel = Новый COMОбъект("Excel.Application");
Excel.Visible = Истина;
КонецПроцедуры
В данном случае 1С не запускает файл excel.exe напрямую по пути на диске. Она обращается к Windows с запросом: «Создай объект, зарегистрированный под именем Excel.Application». Операционная система ищет в реестре этот ProgID, находит связанный с ним уникальный идентификатор CLSID (GUID) и запускает соответствующий исполняемый модуль.
Если вам требуется просто запустить стороннюю программу (EXE-файл), которая не поддерживает технологию COM, следует использовать функцию ЗапуститьПриложение:
// Запуск произвольного исполняемого файла
ЗапуститьПриложение("C:\Program Files\MyProgram\app.exe");
Выясним, где в операционной системе Windows хранятся сведения обо всех доступных COM-объектах.
Откройте редактор реестра (сочетание клавиш Win + R, введите regedit). Перейдите в раздел HKEY_CLASSES_ROOT. В нем содержится список всех зарегистрированных текстовых идентификаторов ProgID. Для 32-битных компонент в 64-битной ОС проверьте ветку HKEY_CLASSES_ROOT\WOW6432Node.
Нажмите Win + R и введите dcomcnfg (или comexp.msc). В дереве консоли перейдите по пути: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM. Здесь отображается список настроенных DCOM-приложений. Обратите внимание, что наглядное имя в списке (например, Microsoft Excel Application) может отличаться от строки ProgID, используемой в коде (Excel.Application).
Если вы подключаете внешнюю библиотеку или программу, её необходимо зарегистрировать от имени Администратора:
regsvr32.
Для 64-битной библиотеки в 64-битной ОС:
%systemroot%\System32\regsvr32.exe "C:\PathToComponent\mycomponent.dll"
Для 32-битной библиотеки в 64-битной ОС:
%systemroot%\SysWOW64\regsvr32.exe "C:\PathToComponent\mycomponent.dll"
"C:\PathToProgram\app.exe" /regserver
Если сервер 1С или клиент является 64-разрядным, а подключаемая COM-библиотека существует только в 32-битном варианте, при вызове Новый COMОбъект возникнет ошибка. Для обхода этого ограничения настроим промежуточный контейнер dllhost.exe в Windows:
comexp.msc).Этот подход позволяет 64-битному процессу 1С обращаться к 32-битной компоненте через системный процесс-посредник.
В современных конфигурациях 1С рекомендуется по возможности отказываться от технологии COM в пользу более универсальных решений:
ПодключитьВнешнююКомпоненту. Они не требуют записей в реестре Windows, поставляются в составе конфигурации или макетов и работают как в Windows, так и в Linux.HTTPСоединение), что гарантирует кроссплатформенность и высокую надежность.