При настройке обмена данными между различными конфигурациями «1С:Предприятия» (например, при выгрузке данных из «Управление производственным предприятием» в «Бухгалтерию предприятия» с использованием обработки «Универсальный обмен данными в формате XML») системные администраторы и разработчики часто сталкиваются с неприятной ошибкой. Программа аварийно завершает работу, выдавая системное сообщение: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса».
Эта проблема связана с тем, что операционная система Windows не может инициализировать программный класс V83.COMConnector. Простая перерегистрация библиотеки с помощью утилиты regsvr32 помогает далеко не всегда. В этой статье мы подробно рассмотрим природу этой ошибки, разберем по шагам все возможные причины ее возникновения и предоставим исчерпывающие инструкции по их устранению.
Главная причина возникновения ошибки 0x800401F3 кроется в конфликте разрядности (битности) процессов. Давайте проанализируем ситуацию подробнее. Современные серверные операционные системы Windows работают в 64-разрядном режиме. При этом платформа «1С:Предприятие» может быть установлена как в 32-битной (x86), так и в 64-битной (x64) версии.
Если служба «Агент сервера 1С:Предприятия» запущена в 64-разрядном режиме, она физически не может напрямую загрузить в свое адресное пространство 32-разрядную динамическую библиотеку comcntr.dll. И наоборот: 32-битный клиентский сеанс 1С не сможет напрямую проинициализировать 64-битную компоненту. Ситуация усугубляется, если на сервере установлено несколько разных версий и релизов платформы 1С — в системном реестре Windows возникает путаница с путями к актуальным библиотекам.
Для решения этой проблемы мы рассмотрим несколько последовательных шагов — от простых способов регистрации до настройки специальной обертки COM+ в операционной системе.
Обычный запуск регистрации через командную строку часто выполняется без учета разрядности утилиты regsvr32. В 64-битных версиях Windows присутствуют две версии этой утилиты. Если мы зарегистрируем библиотеку некорректно, система выдаст ошибку отсутствия класса.
Выполним правильную регистрацию в зависимости от установленной версии платформы 1С:
Program Files (x86)), выполните команду регистрации через утилиту из папки SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.16.1224\bin\comcntr.dll"
Program Files), примените утилиту из папки System32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.16.1224\bin\comcntr.dll"
После выполнения команды вы должны увидеть системное сообщение об успешном завершении регистрации библиотеки.
Если на сервере ранее производились обновления платформы 1С, в реестре Windows могли остаться некорректные или устаревшие ссылки на старые версии comcntr.dll, которых физически уже нет на диске. В этом случае операционная система пытается обратиться по старому пути и выдает ошибку.
Перед тем как регистрировать новую библиотеку, выполним полную дерегистрацию всех потенциально конфликтующих версий компоненты:
services.msc. Это необходимо, чтобы операционная система освободила занятые файлы библиотек./u):
regsvr32.exe /u "C:\Program Files\1cv8\8.3.16.1224\bin\comcntr.dll"
Если на сервере установлены другие релизы платформы, проведите аналогичную процедуру отмены регистрации для каждой из них.Если сервер «1С:Предприятия» работает в 64-разрядном режиме, а вам необходимо вызывать 32-разрядные внешние компоненты (или наоборот), стандартная регистрация библиотеки не поможет из-за архитектурных ограничений ОС. В этом случае нам потребуется настроить специальное изолированное COM+ приложение, которое выступит в роли «моста» (суррогатного процесса dllhost.exe) между процессами разной разрядности.
Рассмотрим по шагам процесс создания и настройки такого приложения:
Win + R, введите команду dcomcnfg и нажмите Enter. Откроется окно «Службы компонентов».V83_COMConnector. В области «Способ активации» обязательно установите переключатель в положение Серверное приложение (это заставит систему запускать его в отдельном процессе dllhost.exe). Нажмите «Далее».USR1CV8 или доменная сервисная служба). Введите пароль и подтвердите его. Это критически важно для того, чтобы у процесса были права на чтение файловой базы или обращение к ресурсам сети.comcntr.dll вашей рабочей платформы 1С.После успешной установки компонента нам необходимо скорректировать параметры безопасности созданного приложения COM+:
V83_COMConnector и откройте его Свойства.Иногда операционная система блокирует вызов COM-объекта просто потому, что у системной учетной записи USR1CV8 (или другой учетной записи, под которой функционирует сервер 1С) отсутствуют права на чтение исполняемых файлов платформы.
Проанализируем и исправим эту ситуацию:
C:\Program Files\1cv8\ (или к конкретному релизу C:\Program Files\1cv8\8.3.16.1224\bin\).bin и выберите пункт Свойства.USR1CV8 или СЕТЕВАЯ СЛУЖБА).Если вам приходится часто администрировать серверы или переустанавливать платформу, ручная регистрация библиотек может отнимать много времени. Мы можем использовать встроенный в платформу механизм автоматизации. В каталоге bin каждого релиза присутствует файл RegMSC.cmd, предназначенный для регистрации утилит администрирования. Создадим на его основе скрипт для COM:
C:\Program Files\1cv8\8.3.16.1224\bin\.RegMSC.cmd в эту же папку и переименуйте копию в RegCOM.cmd.RegCOM.cmd через любой текстовый редактор (например, Блокнот).radmin.dll и замените ее имя на comcntr.dll.RegCOM.cmd от имени Администратора. Скрипт автоматически применит необходимые переменные среды и произведет регистрацию компоненты в операционной системе.В редких случаях повреждается регистрация не только коннектора V83.COMConnector, но и всего приложения «1С:Предприятие» как OLE-сервера (класс V83.Application). Это делает невозможным инициализацию любых внешних связей. Для исправления этой глобальной проблемы мы можем запустить процедуру саморегистрации исполняемого файла 1С:
cd /d "C:\Program Files\1cv8\8.3.16.1224\bin"
1cv8.exe /unregserver
1cv8.exe /regserver
Если ни один из автоматических способов не привел к успеху, нам придется провести диагностику реестра вручную, чтобы убедиться, что пути прописаны корректно.
Win + R, введите команду regedit и нажмите Enter для запуска Редактора реестра.HKEY_CLASSES_ROOT\V83.COMConnector.CLSID и скопируйте значение параметра «По умолчанию» (это уникальный идентификатор класса в фигурных скобках, например, {18EE7300-01CD-11D6-BC64-0080AD7E22F9}).HKEY_CLASSES_ROOT\CLSID\{Ваш_Идентификатор}\InprocServer32.comcntr.dll актуальной версии платформы 1С.HKEY_CLASSES_ROOT\V83.COMConnector и повторите шаги по автоматической регистрации библиотеки.Мы подробно проанализировали причины возникновения ошибки 0x800401F3 при выгрузке данных в формате XML и рассмотрели комплексные методы ее устранения. В большинстве случаев проблема успешно решается либо правильным выбором утилиты regsvr32 в папке SysWOW64 для 32-битных компонент, либо созданием специального серверного приложения в службе компонентов COM+ для связи разнородных систем. Своевременный контроль разрядности платформы 1С и очистка реестра от старых записей гарантируют стабильную и бесперебойную работу механизмов интеграции ваших информационных баз.