При настройке обмена данными между информационными базами или при попытке программного подключения к 1С через COM-соединение системные администраторы и разработчики часто сталкиваются с ошибкой: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса». Эта проблема сигнализирует о том, что операционная система Windows не может найти в реестре зарегистрированный программный идентификатор (ProgID), который указан в коде 1С (например, V83.COMConnector).
В этой статье мы подробно разберем, почему возникает эта ситуация, и рассмотрим пошаговые методики ее устранения, начиная от простой регистрации библиотек и заканчивая сложной настройкой служб компонентов COM+.
Прежде чем приступать к активным действиям, проанализируем ситуацию. Ошибка 0x800401F3 обычно возникает по одной из следующих причин:
comcntr.dll, отвечающая за COM-соединение, не прописана в системном реестре.USR1CV8), не имеет прав на запуск или активацию COM-объекта.Это самый простой и часто помогающий метод. Нам необходимо вручную зарегистрировать библиотеку comcntr.dll, которая находится в папке bin установленной платформы. Рассмотрим этот процесс для разных архитектур.
Для 64-битной платформы:
Откроем командную строку (CMD) от имени администратора и выполним следующую команду:
%windir%\system32\regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Где 8.3.X.XXXX — это номер вашей текущей версии платформы.
Для 32-битной платформы:
Если вы используете 32-битную версию на 64-битной Windows, команда будет отличаться путем к утилите регистрации:
%windir%\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Важный нюанс: Если у вас установлено несколько версий платформы, рекомендуется сначала выполнить команду с ключом /u (удаление регистрации) для старых версий, а затем зарегистрировать актуальную. Это поможет очистить реестр от «хвостов».
Проанализируем ситуацию: сервер 1С (64-битный) не может напрямую работать с 32-битной DLL. Чтобы решить эту проблему, мы «обернем» компоненту в отдельный системный процесс. Это один из самых надежных способов решения проблемы на серверных ОС.
Разберем шаги по настройке приложения COM+:
comexp.msc.1C_COM_Connector) и выберем способ установки Серверное приложение (Server application).comcntr.dll в папке bin нужной платформы.После этих действий система сможет пробрасывать вызовы между процессами разной разрядности, и ошибка исчезнет.
Иногда причина кроется в самом программном коде. Посмотрим на типичный пример вызова конструктора:
// Не совсем надежный способ, если версий много
Соединитель = Новый COMОбъект("V83.COMConnector");
Проанализируем ситуацию: в старых конфигурациях или обработках может использоваться жесткая привязка к версии, например V82.COMConnector. Если в системе установлена только версия 8.3, возникнет ошибка. Проверьте программный код и убедитесь, что используется правильный ProgID.
Если версия определяется динамически, рассмотрим следующий пример исправления:
// Было:
ОбъектПодключения = СтруктураПодключения.ВерсияПлатформы + ".COMConnector";
// Стало (принудительно для 8.3):
ОбъектПодключения = "V83.COMConnector";
Соединитель = Новый COMОбъект(ОбъектПодключения);
Также стоит помнить, что объект V83.Application требует значительно больше прав и ресурсов, чем V83.COMConnector, так как он запускает полноценный экземпляр приложения 1С. Для фоновых обменов всегда предпочтительнее использовать COMConnector.
Если стандартные методы не помогают, можно воспользоваться «секретным оружием» из поставки 1С. В папке с установленной платформой часто присутствует файл RegMSC.cmd. Это готовый скрипт для регистрации утилит администрирования.
Выясним, как его адаптировать:
RegMSC.cmd во временную папку.radmin.dll, и заменим ее на comcntr.dll.Для продвинутых пользователей рассмотрим вариант прямой правки реестра. Проверьте наличие раздела HKEY_CLASSES_ROOT\V83.COMConnector. Если этого раздела нет, регистрация DLL не прошла. Иногда помогает экспорт этой ветки с рабочего сервера и импорт на проблемный, но это крайняя мера, требующая осторожности.
Если компонента зарегистрирована, но ошибка всё равно возникает при работе под конкретным пользователем, проверим настройки разрешений.
Рассмотрим порядок действий:
Устранение ошибки 0x800401F3 — это всегда последовательный процесс исключения возможных причин. Мы рекомендуем начинать с перерегистрации DLL для конкретной версии платформы. Если вы работаете на 64-битном сервере, наиболее стабильным решением будет создание приложения COM+, которое снимет вопросы разрядности и прав доступа раз и навсегда. Не забывайте также проверять актуальность обработок обмена, так как старый код может запрашивать объекты версий 8.1 или 8.2, которые отсутствуют в вашей системе.