При выполнении внешних обработок, интеграционных механизмов или регламентных заданий разработчики и администраторы 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.
Выясним, почему ошибка может возникать периодически и затрагивать только отдельные базы или сеансы:
rphost.exe x64), обращение к COM-объекту выполняется в 64-битном пространстве. Если библиотека ADO зарегистрирована только для 32-разрядных приложений (в ветке WOW6432Node), 64-битный сервер не найдет класс. Аналогично, если клиент 1С 32-битный, а регистрация выполнена только в 64-битной ветке.USR1CV8). Если у этой учетной записи ограничены права на чтение ветвей реестра HKEY_CLASSES_ROOT или происходит выгрузка куста реестра профиля пользователя при неактивности, доступ к COM-классам блокируется.ADODB.Connection могут оказаться повреждены.Рассмотрим по шагам комплекс мер для устранения ошибки на сервере или рабочей станции.
Для восстановления записей в реестре необходимо запустить командную строку (cmd.exe) от имени администратора и выполнить регистрацию библиотек Microsoft Data Access Components для 32-битной и 64-битной подсистем:
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"
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.
Проверим права пользователя, от имени которого работает служба сервера 1С (USR1CV8):
regedit.HKEY_CLASSES_ROOT\ADODB.Connection и HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ADODB.Connection.Пользователи) имеет права на чтение.gpedit.msc) перейдем по пути: Конфигурация компьютера — Административные шаблоны — Система — Профили пользователей и включим параметр Не выгружать реестр пользователей при выходе из системы (Do not forcefully unload the user registry at user logoff). Это предотвратит внезапную потерю доступа к классам реестра при работе фоновых заданий.Если в организации используется кластер из нескольких рабочих серверов 1С, выполним регистрацию библиотек и проверку прав абсолютно на всех физических и виртуальных серверах, входящих в состав кластера.
Использование технологии COM имеет существенные ограничения: оно привязано исключительно к операционной системе Windows, зависит от состояния реестра и может приводить к утечкам памяти в процессе rphost. Рассмотрим современные альтернативы, встроенные в платформу 1С:Предприятие 8.3:
HTTPСоединение и HTTPЗапрос обеспечивает полную кроссплатформенность, стабильность и независимость от системного реестра операционной системы.