Как исправить ошибку «Недопустимая строка с указанием класса» (-2147221005) при создании V83.COMConnector?

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

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

Эта ошибка однозначно указывает на то, что операционная система не может найти в реестре класс, соответствующий идентификатору V83.COMConnector, либо архитектура процесса, запрашивающего объект, не совпадает с архитектурой зарегистрированной библиотеки. Давайте разберем по шагам, как диагностировать и исправить эту проблему.

1. Диагностика окружения

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

Типичный код подключения выглядит так:


НовыйПодключенныйОбъект = Новый COMОбъект("V83.COMConnector");
Попытка
	Enterprise = НовыйПодключенныйОбъект.Connect("Srvr=" + ИмяСервера + ";Ref=" + ИмяБазы + ";Usr=" + Пользователь + ";Pwd=" + Пароль + ";");
Исключение
	Сообщить("Ошибка инициализации COM-объекта: " + ОписаниеОшибки());
КонецПопытки;

Если этот код выполняется в фоновом задании или на сервере 1С (x64), а библиотека comcntr.dll зарегистрирована только для 32-битных приложений (или наоборот), мы получим ошибку «Недопустимая строка с указанием класса». Серверное приложение 1С x64 не «видит» 32-битные COM-компоненты без специальной обертки.

2. Регистрация библиотеки comcntr.dll

Самое действенное решение, которое помогло автору вопроса и многим другим пользователям — это перерегистрация библиотеки comcntr.dll из командной строки. Важно делать это с правами администратора и учитывать разрядность операционной системы и сервера 1С.

Библиотека находится в папке bin установленной платформы 1С. Путь обычно выглядит так:

Для регистрации используется утилита regsvr32. Обратите внимание на важный нюанс Windows x64:

Алгоритм действий для перерегистрации:

  1. Запустите командную строку (cmd) от имени администратора.
  2. Сначала удалим старую регистрацию (ключ /u), чтобы очистить возможные «хвосты» в реестре.
  3. Затем выполним регистрацию заново.

Пример команд для 64-битного сервера 1С:


rem Удаление регистрации (путь к вашей версии платформы)
regsvr32 /u "C:\Program Files\1cv8\8.3.13.1644\bin\comcntr.dll"

rem Регистрация
regsvr32 "C:\Program Files\1cv8\8.3.13.1644\bin\comcntr.dll"

Если у вас установлен 32-битный сервер 1С на 64-битной Windows, команды будут выглядеть так:


rem Используем SysWOW64 для 32-битной DLL
C:\Windows\SysWOW64\regsvr32 /u "C:\Program Files (x86)\1cv8\8.3.13.1644\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.13.1644\bin\comcntr.dll"

После выполнения команд обязательно перезапустите службу Агента сервера 1С:Предприятия, чтобы изменения вступили в силу.

3. Решение через создание COM+ приложения

Если простая регистрация не помогает, или если вам нужно использовать 32-битную компоненту на 64-битном сервере (или наоборот), нам необходимо создать «обертку» через Службу компонентов (COM+). Это позволяет вынести исполнение COM-объекта в отдельный процесс dllhost.exe.

Давайте выполним настройку:

  1. Нажмите Win + R, введите dcomcnfg и нажмите Enter.
  2. Раскройте ветку: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмите правой кнопкой мыши -> Создать -> Приложение.
  4. В мастере выберите «Создать новое приложение», дайте ему имя (например, «V83_Connector»), выберите тип «Серверное приложение».
  5. На этапе выбора пользователя выберите «Указанный пользователь» и введите логин/пароль учетной записи, под которой запускается служба сервера 1С (или Администратора). Это решит проблемы с правами доступа.
  6. После создания приложения раскройте его ветку, перейдите в Компоненты.
  7. Нажмите правой кнопкой -> Создать -> Компонент -> «Установка новых компонентов».
  8. Выберите файл comcntr.dll нужной версии. Если у вас 64-битный сервер, но вы хотите стабильности, часто рекомендуют выбирать именно 64-битную DLL из папки C:\Program Files\1cv8\....

После добавления компонента, зайдите в его свойства (правой кнопкой по появившемуся V83.COMConnector), перейдите на вкладку Безопасность и убедитесь, что в роли «CreatorOwner» стоят галочки разрешения.

4. Проблема с правами доступа

Иногда ошибка 0x800401F3 маскирует проблему недостаточных прав. Пользователь, под которым работает серверный процесс 1С (часто это локальный USR1CV8), должен иметь полные права на чтение и выполнение в папке с библиотекой.

Давайте проверим это:

  1. Перейдите в папку C:\Program Files\1cv8\8.3.XX.XXXX\bin\.
  2. Нажмите правой кнопкой на файл comcntr.dll -> Свойства -> Безопасность.
  3. Убедитесь, что пользователь, от имени которого запущена служба «Агент сервера 1С:Предприятия 8.3», есть в списке и имеет права «Чтение и выполнение».

Также, если обмен происходит с файловой базой, этот же пользователь должен иметь полные права на папку с этой файловой базой.

5. Одновременная установка платформ x86 и x64

В обсуждении была выявлена интересная особенность: в некоторых случаях на 64-разрядной ОС для корректной работы требуется наличие зарегистрированной 32-разрядной компоненты, даже если сервер 1С 64-битный.

Если стандартные методы не помогают, попробуйте следующий подход:

  1. Установите на сервер платформу 1С той же версии (релиз в релиз), но 32-разрядную (только клиентскую часть и компоненты доступа).
  2. Зарегистрируйте библиотеку comcntr.dll именно из папки 32-битной платформы (Program Files (x86)) с помощью SysWOW64\regsvr32.
  3. Затем зарегистрируйте библиотеку из 64-битной платформы.

Это может помочь системе корректно разрешать зависимости в реестре Windows, особенно если на сервере используются другие 32-битные OLE-объекты.

6. Проверка зависимостей (Visual C++)

Библиотека comcntr.dll написана на C++ и зависит от системных библиотек Microsoft Visual C++ Redistributable. Если на сервере отсутствует нужная версия пакета (например, MSVC++ 2013 или 2015-2019, в зависимости от версии платформы 1С), регистрация библиотеки может пройти успешно, но создание объекта будет падать.

Рекомендуем обновить пакеты Visual C++ Redistributable (как x86, так и x64) до актуальных версий с сайта Microsoft.

7. Использование V83.Application как временное решение

Если восстановить работу COMConnector оперативно не удается, в качестве временного решения можно попробовать использовать OLE Automation (запуск полноценного приложения 1С, а не только DLL).

Замените строку инициализации:


// Вместо этого:
// НовыйПодключенныйОбъект = Новый COMОбъект("V83.COMConnector");

// Попробуйте использовать это:
НовыйПодключенныйОбъект = Новый COMОбъект("V83.Application"); 

Важно: V83.Application работает значительно медленнее, потребляет больше памяти и требует наличие пользовательской лицензии, но это поможет локализовать проблему. Если Application создается, а Connector нет — проблема 100% в регистрации DLL или правах на нее.

← На главную