Как исправить ошибку Invalid class string (0x800401F3) при создании COM-объекта ADODB.Connection в 1С

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

При выполнении внешних обработок, интеграционных механизмов или регламентных заданий разработчики и администраторы 1С могут столкнуться с ошибкой COM-соединения следующего вида: Ошибка -2147221005(0x800401F3): Invalid class string. Ошибка возникает в момент инициализации COM-объекта и часто проявляется нестабильно — в одних информационных базах код отрабатывает штатно, а в других периодически завершается аварийно.

Разберем подробнее, почему возникает эта неполадка, в какой строке кода кроется проблема и какими системными средствами можно полностью восстановить работоспособность интеграции.

Локализация ошибки в программном коде

Проанализируем строку кода 1С, на которой происходит исключение. Как правило, ошибка вызывается стандартным вызовом конструктора COM-объекта для работы с базами данных через технологии Microsoft ActiveX Data Objects (ADO):


Попытка
    Connection = Новый COMОбъект("ADODB.Connection");
Исключение
    ЗаписьЖурналаРегистрации("Ошибка подключения к ADO",
        УровеньЖурналаРегистрации.Ошибка,,,
        ОписаниеОшибки());
    ВызватьИсключение;
КонецПопытки;

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

Основные причины возникновения ошибки

Выясним, почему ошибка может возникать периодически и затрагивать только отдельные базы или сеансы:

  1. Несоответствие разрядности процессов (32-bit и 64-bit): Если сервер 1С:Предприятия работает как 64-разрядное приложение (процесс rphost.exe x64), обращение к COM-объекту выполняется в 64-битном пространстве. Если библиотека ADO зарегистрирована только для 32-разрядных приложений (в ветке WOW6432Node), 64-битный сервер не найдет класс. Аналогично, если клиент 1С 32-битный, а регистрация выполнена только в 64-битной ветке.
  2. Многосерверный кластер 1С: Если в кластере задействовано несколько рабочих серверов (нод), сеансы пользователей распределяются между ними. Ошибка воспроизводится только тогда, когда вызов попадает на сервер, где повреждены или не зарегистрированы компоненты ADO/MDAC.
  3. Разграничение прав учетной записи службы 1С: Служба сервера 1С обычно запускается под специальной учетной записью (например, USR1CV8). Если у этой учетной записи ограничены права на чтение ветвей реестра HKEY_CLASSES_ROOT или происходит выгрузка куста реестра профиля пользователя при неактивности, доступ к COM-классам блокируется.
  4. Повреждение регистрации системных библиотек ADO/MDAC: После обновлений ОС, сбоев или некорректной установки стороннего ПО записи в реестре для ADODB.Connection могут оказаться повреждены.

Пошаговое устранение проблемы

Рассмотрим по шагам комплекс мер для устранения ошибки на сервере или рабочей станции.

Шаг 1. Перерегистрация библиотек ADO в обеих разрядностях

Для восстановления записей в реестре необходимо запустить командную строку (cmd.exe) от имени администратора и выполнить регистрацию библиотек Microsoft Data Access Components для 32-битной и 64-битной подсистем:

  1. Для 64-разрядных процессов (сервер 1С x64 / клиент x64):
    
    regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
    regsvr32 "C:\Program Files\Common Files\System\ado\msado20.dll"
    regsvr32 "C:\Program Files\Common Files\System\ado\msado21.dll"
    regsvr32 "C:\Program Files\Common Files\System\ado\msadox.dll"
    
  2. Для 32-разрядных процессов (сервер 1С x86 / клиент x86):
    
    regsvr32 "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"
    regsvr32 "C:\Program Files (x86)\Common Files\System\ado\msado20.dll"
    regsvr32 "C:\Program Files (x86)\Common Files\System\ado\msado21.dll"
    regsvr32 "C:\Program Files (x86)\Common Files\System\ado\msadox.dll"
    

После выполнения команд система должна выдать сообщение об успешном завершении функции DllRegisterServer.

Шаг 2. Проверка прав учетной записи службы 1С

Проверим права пользователя, от имени которого работает служба сервера 1С (USR1CV8):

  1. Откроем редактор реестра regedit.
  2. Перейдем к разделам HKEY_CLASSES_ROOT\ADODB.Connection и HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ADODB.Connection.
  3. Нажмем правой кнопкой мыши по разделу, выберем пункт Разрешения и убедимся, что учетная запись службы 1С (или группа Пользователи) имеет права на чтение.
  4. В редакторе локальной групповой политики (gpedit.msc) перейдем по пути: Конфигурация компьютера — Административные шаблоны — Система — Профили пользователей и включим параметр Не выгружать реестр пользователей при выходе из системы (Do not forcefully unload the user registry at user logoff). Это предотвратит внезапную потерю доступа к классам реестра при работе фоновых заданий.

Шаг 3. Проверка всех нод кластера серверов

Если в организации используется кластер из нескольких рабочих серверов 1С, выполним регистрацию библиотек и проверку прав абсолютно на всех физических и виртуальных серверах, входящих в состав кластера.

Альтернативные архитектурные решения без COM-объектов

Использование технологии COM имеет существенные ограничения: оно привязано исключительно к операционной системе Windows, зависит от состояния реестра и может приводить к утечкам памяти в процессе rphost. Рассмотрим современные альтернативы, встроенные в платформу 1С:Предприятие 8.3:

  1. Внешние источники данных: Позволяют подключаться к внешним реляционным СУБД (MS SQL, PostgreSQL, Oracle, MySQL) напрямую через интерфейс платформы с использованием стандартных механизмов запросов 1С.
  2. HTTP-сервисы и REST API: Интеграция через объекты HTTPСоединение и HTTPЗапрос обеспечивает полную кроссплатформенность, стабильность и независимость от системного реестра операционной системы.
← На главную