К статье
Практический материал

Администрирование · 10 мин

CLSID в 1С: что это такое и как решать связанные ошибки

Что такое CLSID в 1С, где он используется, почему возникает ошибка «CLSID не найден» и как её устранить: регистрация библиотек, разрядность, права доступа.

CLSID (Class Identifier) — это глобально уникальный идентификатор класса COM-объекта в Windows. В контексте 1С с этим идентификатором администраторы и разработчики сталкиваются чаще всего в двух ситуациях: при подключении внешних компонентов, драйверов торгового оборудования и OLE/COM-объектов, а также при появлении ошибки вида «Недопустимая строка с указанием класса» (Class not registered, CLSID не найден).

Сама платформа 1С активно использует COM-технологию: через неё работают драйверы ККТ, сканеров штрихкодов, банковские клиенты, компоненты обмена данными, OLE DB-провайдеры и механизм COM-соединения между базами 1С. Каждый такой компонент регистрируется в реестре Windows под своим CLSID — длинным идентификатором вида {F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}. Если запись отсутствует, повреждена или недоступна по разрядности, 1С выдаёт ошибку и не может создать объект.

Разобраться с CLSID достаточно один раз: дальше диагностика сводится к проверке регистрации библиотеки, совпадению разрядности (32/64 бита) и прав пользователя. Ниже — практическая инструкция.

Что такое CLSID и где он хранится

CLSID — это 128-битный GUID, записанный в фигурных скобках, который однозначно идентифицирует COM-класс. Когда 1С (или любое другое приложение) просит Windows создать объект, система ищет CLSID в ветке реестра HKEY_CLASSES_ROOT\CLSID и находит там путь к DLL или EXE-файлу, который реализует этот класс.

Ключевые подразделы, которые стоит знать администратору 1С:

  • HKEY_CLASSES_ROOT\CLSID\{...}\InprocServer32 — путь к DLL для 32-битных и 64-битных in-process серверов;
  • HKEY_CLASSES_ROOT\WOW6432Node\CLSID — регистрация 32-битных компонентов на 64-битной Windows;
  • HKEY_CLASSES_ROOT\CLSID\{...}\ProgID — «человекочитаемое» имя, например V83.COMConnector.

В 1С вы чаще всего работаете не с самим CLSID, а с ProgID — текстовым именем класса. Например, строка Новый COMОбъект("V83.COMConnector") сначала преобразуется Windows в CLSID через реестр, а уже потом создаётся объект. Поэтому ошибка «CLSID не найден» может появляться и при использовании привычного текстового имени.

Где CLSID встречается в 1С

Типовые сценарии, в которых 1С обращается к COM-компонентам по CLSID:

  • COM-соединение между базами 1С через V83.COMConnector (или V82 для старых версий);
  • драйверы торгового оборудования: ККТ, сканеры, весы, эквайринговые терминалы;
  • OLE DB и ADO-подключения к внешним источникам данных (SQL Server, Access, Excel);
  • интеграция с банковскими клиентами и криптопровайдерами;
  • внешние компоненты по технологии COM, подключаемые из конфигурации.

Если любой из этих компонентов не установлен или не зарегистрирован, типовая ошибка выглядит так: «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса» или англоязычный вариант «Class not registered». В тексте ошибки часто фигурирует сам CLSID — по нему можно найти в реестре, какого компонента не хватает.

Ошибка «Недопустимая строка с указанием класса»COM-класс не зарегистрирован

Проверить наличие CLSID в реестре и зарегистрировать DLL

Ошибка только на сервере 1С, на клиенте работаетКомпонент не установлен на сервере или другая разрядность

Проверить разрядность сервера 1С и регистрацию компонента на сервере

Ошибка у части пользователейНет прав или компонент не установлен на конкретных ПК

Проверить права и установку драйвера на проблемных машинах

Как найти CLSID и проверить регистрацию компонента

Если в тексте ошибки указан CLSID, откройте редактор реестра (regedit) и выполните поиск по этому идентификатору в ветке HKEY_CLASSES_ROOT\CLSID. Отсутствие записи означает, что компонент не установлен или не зарегистрирован. Если запись есть — смотрите значение InprocServer32: файл по указанному пути должен физически существовать.

Если известен только ProgID (например, V83.COMConnector), найдите его в HKEY_CLASSES_ROOT — внутри будет подраздел CLSID с нужным идентификатором. Это удобный способ понять, какая именно DLL отвечает за компонент.

Порядок действий при ошибке CLSID
  1. 1
    Скопируйте CLSID или ProgID из текста ошибки 1С
  2. 2
    Откройте regedit и найдите идентификатор в HKEY_CLASSES_ROOT\CLSID
  3. 3
    Проверьте, существует ли DLL из значения InprocServer32
  4. 4
    Если записи нет — установите компонент или зарегистрируйте DLL командой regsvr32
  5. 5
    Проверьте разрядность: 32-битный компонент регистрируйте через regsvr32 из C:\Windows\SysWOW64
  6. 6
    Перезапустите сеанс 1С и проверьте создание объекта

Как зарегистрировать компонент вручную

Большинство проблем с CLSID решается регистрацией нужной DLL. Для этого используется штатная утилита Windows regsvr32, запущенная от имени администратора.

cmd
regsvr32 "C:\Program Files\1cv8\8.3.22.1750\bin\comcntr.dll"

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

Разрядность: самая частая причина ошибки

На 64-битной Windows 32-битные и 64-битные COM-компоненты регистрируются в разных разделах реестра. 64-битный процесс видит только 64-битные компоненты, 32-битный — только 32-битные. Отсюда классическая ситуация: на клиенте с 32-битной 1С драйвер работает, а на 64-битном сервере 1С та же обработка падает с ошибкой CLSID.

Правила, которые помогают избежать путаницы:

  • 32-битную DLL на 64-битной Windows регистрируйте через C:\Windows\SysWOW64\regsvr32.exe;
  • 64-битную DLL — через C:\Windows\System32\regsvr32.exe;
  • если код выполняется на сервере 1С, компонент должен быть установлен и зарегистрирован именно на сервере, а не на клиентском ПК;
  • для сервера 1С x64 нужен 64-битный вариант драйвера или компонента — если производитель поставляет только 32-битный, используйте 32-битную версию сервера 1С или выносите вызов на клиента.
Маршрут решения

Как выбрать действие

Ошибка на клиенте, драйвер только что установленЗарегистрируйте DLL нужной разрядности и перезапустите 1С
Ошибка только при выполнении кода на сервереУстановите и зарегистрируйте компонент на сервере 1С с учётом его разрядности
Производитель поставляет только 32-битную версиюПеренесите вызов компонента на клиентскую часть или используйте 32-битный сервер 1С
Ошибка после обновления платформыПеререгистрируйте comcntr.dll из каталога новой версии платформы

Права доступа и служба сервера 1С

Даже корректно зарегистрированный компонент может не работать из-за прав. Сервер 1С обычно работает под учётной записью USR1CV8 или подобной служебной учёткой. У этой учётной записи должны быть права на чтение DLL-файла компонента и на соответствующие ветки реестра.

Дополнительно проверьте настройки DCOM (оснастка dcomcnfg): для некоторых компонентов требуется явно разрешить запуск и активацию нужному пользователю. Если компонент создаётся локально, но не работает при вызове с сервера — почти всегда дело в правах служебной учётной записи или в разрядности.

Типичные ошибки
01
Регистрация 32-битной DLL через системный regsvr32 из System32 — компонент регистрируется не в том разделе и 32-битная 1С его не видит
02
Регистрация comcntr.dll от другой версии платформы — ошибки несовместимости при COM-подключении
03
Установка драйвера только на клиентский ПК, хотя код выполняется на сервере — ошибка CLSID при серверном вызове
04
Запуск regsvr32 без прав администратора — регистрация молча не выполняется или завершается ошибкой

Как проверить, что проблема решена

После регистрации компонента проверьте результат минимальным действием: создайте объект в том же контексте, где возникала ошибка. Для COM-соединителя это создание объекта V83.COMConnector в консоли кода или тестовой обработке. Для драйвера оборудования — тест подключения из настроек торгового оборудования в 1С.

Контрольные точки

Как проверить результат

Создание COM-объекта в 1С
Норма

Объект создаётся без исключения

Тревожный признак

Ошибка «Недопустимая строка с указанием класса» повторяется

Запись в реестре
Норма

CLSID присутствует в нужном разделе, путь к DLL существует

Тревожный признак

Запись отсутствует или файл по пути не найден

Работа под служебной учётной записью
Норма

Компонент доступен и пользователю, и учётной записи сервера 1С

Тревожный признак

Работает только под администратором

Если объект создаётся, но дальше возникают ошибки уже при вызове методов — проблема с CLSID решена, и диагностику нужно продолжать в сторону настроек самого компонента: параметров подключения, версий драйвера, лицензий.

Итог

Что важно запомнить

CLSID — идентификатор COM-класса в реестре Windows. Ошибка с CLSID в 1С означает, что компонент не зарегистрирован, зарегистрирован не в той разрядности или недоступен по правам. Проверяйте реестр, разрядность процесса 1С и учётную запись, от имени которой выполняется код.

Частые вопросы

Что означает ошибка «Недопустимая строка с указанием класса» в 1С?

Это стандартное сообщение Windows о том, что COM-класс не найден в реестре. 1С пыталась создать COM-объект (например, V83.COMConnector или драйвер оборудования), но система не нашла соответствующий CLSID. Решение — установить или зарегистрировать нужный компонент с учётом разрядности.

Как узнать, какая DLL соответствует конкретному CLSID?

Откройте regedit, перейдите в HKEY_CLASSES_ROOT\CLSID, найдите нужный идентификатор и посмотрите значение по умолчанию в подразделе InprocServer32 (для DLL) или LocalServer32 (для EXE). Там указан полный путь к файлу компонента.

Почему после обновления платформы 1С перестало работать COM-подключение?

При обновлении платформы меняется версия comcntr.dll, а реестр может по-прежнему указывать на старый файл. Зарегистрируйте заново comcntr.dll из каталога новой версии платформы командой regsvr32 с правами администратора.

Драйвер работает на клиенте, но не работает в фоновом задании. Почему?

Фоновые задания выполняются на сервере 1С. Компонент должен быть установлен и зарегистрирован на сервере, его разрядность должна совпадать с разрядностью сервера, а служебная учётная запись сервера должна иметь права на DLL и ветки реестра.

Можно ли использовать 32-битный драйвер с 64-битным сервером 1С?

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

Опасно ли регистрировать DLL через regsvr32?

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