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

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

При интеграции различных информационных баз 1С, например, при подключении из УТ 10.3 в УТ 11, часто используется механизм COM-соединения. Одной из самых неприятных проблем, с которой сталкиваются разработчики и системные администраторы, является ошибка: «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса». Особенно часто это происходит в ситуации, когда под учетной записью администратора всё работает корректно, а у обычного пользователя или на сервере под фоновым заданием возникает сбой.

В этой статье мы подробно разберем причины возникновения данной ошибки и рассмотрим пошаговый алгоритм настройки системы для стабильной работы V83.COMConnector.

Выясняем причину возникновения ошибки

Прежде всего, проанализируем ситуацию: почему система «не видит» класс 1С? Ошибка «Недопустимая строка с указанием класса» означает, что операционная система Windows не смогла найти в реестре информацию о программном идентификаторе (ProgID) V83.COMConnector или связанном с ним CLSID. Рассмотрим основные причины:

  1. Компонента не зарегистрирована: Библиотека comcntr.dll не была зарегистрирована в системе с помощью утилиты regsvr32.
  2. Конфликт разрядности: 1С:Предприятие пытается вызвать 64-битную компоненту из 32-битного приложения (или наоборот), а соответствующая версия библиотеки не зарегистрирована или недоступна.
  3. Недостаток прав доступа: У пользователя, от имени которого запускается код, нет прав на чтение веток реестра или запуск COM-объекта.
  4. Особенности работы в серверном окружении: На сервере под управлением 64-битной ОС стандартная регистрация через командную строку часто оказывается недостаточной для работы через службу 1C:Enterprise Server.

Рассмотрим пример кода, который обычно инициирует эту ошибку:


// Пример инициализации соединения
V82COMConnector = Новый COMОбъект("V83.COMConnector"); 
СтрокаПодключения = "Srvr='ServerName';Ref='BaseName';Usr='Login';Pwd='Password';";
Соединение = V82COMConnector.Connect(СтрокаПодключения);

Обратим внимание на важный нюанс, упомянутый в обсуждении: имя переменной (например, V82COMConnector) не влияет на работу, но может запутать при отладке, если вы используете платформу 8.3. Рекомендуется придерживаться соответствия имен и используемых версий.

Шаг 1. Корректная регистрация компоненты через regsvr32

Проанализируем первый и самый важный этап — регистрацию библиотеки comcntr.dll. Важно помнить, что в 64-битных системах Windows существует две версии утилиты regsvr32. Разберем, какую использовать:

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

C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\comcntr.dll"

Если вы используете 64-битный сервер 1С, регистрация выполняется через системную папку по умолчанию:

C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"

Важно: Всегда запускайте командную строку от имени Администратора. Даже если вы вошли в систему под учетной записью администратора, механизмы UAC могут ограничить права процесса регистрации. Как советуют опытные специалисты, иногда полезно сначала выполнить деинсталляцию компоненты с ключом /u, а затем зарегистрировать её заново.

Шаг 2. Настройка COM+ приложения в Службах компонентов

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

Рассмотрим по шагам, как это сделать:

  1. Откройте Панель управления — Администрирование — Службы компонентов (или выполните команду dcomcnfg).
  2. Перейдите в раздел Компьютеры — Мой компьютер — Приложения COM+.
  3. Нажмите правой кнопкой мыши и выберите Создать — Приложение.
  4. В мастере создания выберите Создать новое приложение. Введите имя, например, 1Cv83_COMConnector. Тип активации укажите Серверное приложение.
  5. На вкладке Удостоверение (Identity) крайне важно выбрать Указанный пользователь. Введите данные локального администратора сервера или специально созданной учетной записи с достаточными правами. Это решит проблему, когда у обычного пользователя «не хватает прав» на инициализацию объекта.
  6. После создания приложения, разверните его дерево, перейдите в Компоненты.
  7. Нажмите Создать — Компонент. Выберите Установка новых компонентов и укажите путь к файлу comcntr.dll нужной разрядности.

Шаг 3. Настройка прав доступа и безопасности

Выясним, какие дополнительные настройки безопасности помогут нам избавиться от ошибки окончательно. В свойствах созданного нами приложения COM+ в Службах компонентов проанализируем следующие вкладки:

Вкладка «Безопасность»:

Права на ветки реестра:

Иногда система блокирует доступ обычного пользователя к описанию класса в реестре. Проверим наличие прав «Чтение» для группы Пользователи (Users) в следующих ветках:

Шаг 4. Учет «Зоопарка» платформ и перезапуск служб

Проанализируем ситуацию, когда на сервере установлено несколько версий 1С (например, 8.3.18 и 8.3.22). В этом случае регистрация comcntr.dll может «слетать» при автоматическом обновлении или установке новых релизов. Рекомендуется регистрировать компоненту именно от той версии, под которой работает основной экземпляр сервера 1С.

Важный момент по поводу перезапуска: После внесения изменений в настройки COM+ или регистрации библиотеки, перезагружать весь Windows Server необязательно. Однако перезапуск службы «Агент сервера 1С:Предприятия» является крайне желательным, так как служба кэширует доступные COM-классы при старте. Если вы работаете в файловом варианте, обязательно перезапустите само приложение 1С.

Резюме

Проблема с V83.COMConnector чаще всего кроется не в коде 1С, а в системных настройках прав доступа Windows. Если вы столкнулись с ошибкой «Недопустимая строка с указанием класса», пройдите по нашему чек-листу:

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

← На главную