При переходе с файловой базы на клиент-серверный вариант работы или при обновлении платформы 1С:Предприятие системные администраторы и разработчики часто сталкиваются с ошибкой -2147221005(0x800401F3): Недопустимая строка с указанием класса. Эта проблема обычно возникает в момент инициализации внешнего соединения или работы с внешними компонентами (например, при обмене данными между базами или формировании отчетов).
В этой статье мы подробно разберем природу данной ошибки, проанализируем причины ее возникновения и рассмотрим пошаговые инструкции по ее устранению, основываясь на практическом опыте решения подобных инцидентов.
Ошибка с кодом 0x800401F3 на уровне операционной системы Windows означает CO_E_CLASSSTRING. Проще говоря, программа запрашивает у системы COM-объект по его текстовому идентификатору (ProgID), но операционная система не может найти соответствующую запись в системном реестре. В контексте 1С это чаще всего происходит при попытке создания объекта V83.COMConnector.
Рассмотрим фрагмент кода, на котором чаще всего происходит сбой:
// Попытка создания объекта для связи с другой информационной базой
ComConnector = Новый COMОбъект(УправлениеСоединениямиИБ.ИмяCOMСоединителя());
// Или прямое обращение
Соединитель = Новый COMОбъект("V83.COMConnector");
Если в системе не зарегистрирована библиотека comcntr.dll, отвечающая за этот класс, или возник конфликт разрядностей, 1С выдаст искомое сервисное сообщение.
Самый простой и эффективный способ, который помог автору темы, — это принудительная регистрация библиотеки COM-соединителя в реестре Windows. Нам необходимо выполнить регистрацию от имени администратора.
Разберем алгоритм действий по шагам:
C:\Program Files\1cv8\номер_сборки\bin\ (для 64-битной версии) или C:\Program Files (x86)\1cv8\номер_сборки\bin\ (для 32-битной).regsvr32.Пример команды для 64-битной платформы:
regsvr32 "C:\Program Files\1cv8\8.3.13.1644\bin\comcntr.dll"
Пример команды для 32-битной платформы:
regsvr32 "C:\Program Files (x86)\1cv8\8.3.13.1644\bin\comcntr.dll"
После успешного выполнения вы должны увидеть сообщение «DllRegisterServer в ... успешно выполнено». После этого перезапустите 1С и проверьте работоспособность кода.
Проблема часто осложняется при использовании 64-битного сервера 1С. Если ваше приложение или внешняя компонента (например, старый драйвер оборудования или специфическая DLL) существует только в 32-битном исполнении, 64-битный рабочий процесс сервера 1С (rphost.exe) не сможет загрузить её напрямую.
Выясним, как создать «мост» между разрядностями с помощью службы компонентов COM+:
dcomcnfg).1C_COM_Connector) и установим способ активации «Серверное приложение».USR1CV8), или локального администратора.comcntr.dll нужной разрядности.Этот метод заставляет библиотеку работать в отдельном процессе dllhost.exe, что позволяет 64-битному серверу обращаться к ней через интерфейсы удаленного вызова процедур.
Иногда библиотека зарегистрирована верно, но служба сервера 1С не имеет прав на чтение соответствующих веток реестра. Проанализируем ситуацию с правами доступа:
Проверьте, что у пользователя, от имени которого запущен сервер (например, USR1CV8), есть права на чтение следующих разделов реестра:
HKEY_CLASSES_ROOT\V83.COMConnectorHKEY_CLASSES_ROOT\CLSID\{идентификатор_класса}Если права ограничены, система вернет всё ту же ошибку «Недопустимая строка с указанием класса», так как не сможет прочитать путь к файлу DLL из реестра.
Библиотека comcntr.dll является скомпилированным C++ кодом и требует наличия определенных динамических библиотек среды выполнения (Runtime). Рассмотрим важность установки Microsoft Visual C++ Redistributable.
Если на сервере установлена «голая» Windows без пакетов обновления, регистрация DLL может пройти успешно, но при попытке создания объекта в 1С возникнет ошибка, так как система не сможет загрузить зависимости компоненты. Проанализируйте установленные программы на сервере. Для стабильной работы платформы 8.3 рекомендуется установить пакеты Visual C++ за 2010, 2013 и 2015-2019 годы как x86, так и x64 разрядности.
Если проблема с COMConnector не решается никакими способами, в некоторых случаях можно использовать объект V83.Application. Однако помните, что это запустит полноценный экземпляр 1С в памяти, что значительно медленнее и требует больше оперативной памяти. Для регистрации этого класса необходимо запустить 1С от имени администратора с ключом:
"C:\Program Files\1cv8\номер_сборки\bin\1cv8.exe" /regserver
Подводя итог, можно сказать, что в 90% случаев проблема решается правильной регистрацией comcntr.dll через regsvr32 из папки той версии платформы, которая фактически используется сервером или клиентом. Всегда проверяйте соответствие версий: если вы обновили платформу, регистрацию COM-объекта нужно провести повторно для нового пути.