При организации программного взаимодействия между информационными базами 1С через COM-соединение разработчики нередко сталкиваются с ошибкой инициализации объекта. В коде на встроенном языке при попытке инициализировать коннектор:
ТекCOMПодключение = Новый COMОбъект("V83.COMConnector");
Система аварийно прерывает выполнение и выдает системное сообщение:
«Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса».
Разберем подробнее причины возникновения этой неполадки и пошагово рассмотрим все способы её надежного устранения.
Код ошибки 0x800401F3 (CO_E_CLASSSTRING) сообщает операционной системе Windows, что переданный программный идентификатор (ProgID) "V83.COMConnector" не найден в системном реестре либо не сопоставлен с конкретной динамической библиотекой (CLSID).
Проанализируем основные факторы, вызывающие этот сбой:
rphost.exe), а библиотека comcntr.dll зарегистрирована только для 32-разрядного окружения (или наоборот).regsvr32.exe была вызвана без прав администратора или с указанием не того каталога операционной системы.V83.COMConnector.1, потеряв базовую привязку.comcntr.dll не может инициализироваться из-за отсутствия нужного пакета Microsoft Visual C++ Redistributable соответствующей разрядности.usr1cv8), не имеет прав на чтение веток реестра или папки с установленной платформой.Перед регистрацией файлов выясним, где именно выполняется строка создания COM-объекта:
&НаКлиенте в 32-разрядном тонком или толстом клиенте 1С, требуется регистрация 32-разрядной версии comcntr.dll.Рассмотрим правила регистрации библиотеки в 64-битных операционных системах Windows Server. Важно помнить, что пути к утилите regsvr32.exe интуитивно противоположны названиям системных папок:
Для 64-разрядного сервера 1С:
Запустим командную строку от имени Администратора и выполним команду:
%windir%\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
Для 32-разрядного клиента 1С:
В командной строке с правами Администратора выполним:
%windir%\SysWoW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.YYYY\bin\comcntr.dll"
Здесь 8.3.XX.YYYY — точный номер сборки установленной платформы. После выполнения команды должно появиться системное окно с подтверждением: «Успешное выполнение DllRegisterServer в ...\comcntr.dll».
Если при попытке инициализации система по-прежнему сообщает о недопустимой строке класса, а при повторных регистрациях компонент получает идентификатор V83.COMConnector.1, разберем порядок очистки реестра:
regedit.exe от имени Администратора.HKEY_CLASSES_ROOT.V83.COMConnector и V83.COMConnector.1, а также раздел CLSID\{GUID}, на который они ссылаются (если он указывает на старый несуществующий путь к comcntr.dll).HKEY_CLASSES_ROOT\Wow6432Node\CLSID\.comcntr.dll нужной разрядности согласно Шагу 2.В ситуациях, когда 64-разрядный сервер 1С вынужден подключаться к сторонним 32-разрядным библиотекам или наоборот, прямое создание объекта в одном адресном пространстве невозможно. В таком случае настроим суррогатный процесс через службу компонентов Windows:
comexp.msc в меню «Выполнить»).1C_V83_COMConnector) и активируем переключатель «Серверное приложение» (Server application).comcntr.dll.Данная настройка позволяет операционной системе запускать 32-битную DLL в изолированном суррогатном процессе dllhost.exe, к которому 64-битный сервер 1С обращается через системный RPC-мост.
Посмотрим на практический пример кода подключения к информационной базе, включающий обработку возможных исключений:
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector");
Исключение
ТекстОшибки = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("COM-соединение",
УровеньЖурналаРегистрации.Ошибка,,,
"Не удалось создать объект V83.COMConnector: " + ТекстОшибки);
ВызватьИсключение "Ошибка инициализации COMConnector. Проверьте регистрацию comcntr.dll в системе.";
КонецПопытки;
ПараметрыПодключения = "Srvr=""app-server"";Ref=""trade_base"";Usr=""ExchangeUser"";Pwd=""SecretPassword"";";
Попытка
БазаПодключение = COMСоединитель.Connect(ПараметрыПодключения);
Исключение
ВызватьИсключение "Не удалось подключиться к информационной базе: " + ОписаниеОшибки();
КонецПопытки;
Важно учитывать, что механизм COMConnector привязан исключительно к операционным системам Windows и не поддерживается на серверах под управлением Linux. Для надежной интеграции современных конфигураций рекомендуется переходить на платформонезависимые решения:
HTTPСоединение, HTTPЗапрос, не зависят от разрядности платформы и не требуют прав администратора на сервере.