Администрирование · 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 — по нему можно найти в реестре, какого компонента не хватает.
Проверить наличие CLSID в реестре и зарегистрировать DLL
Проверить разрядность сервера 1С и регистрацию компонента на сервере
Проверить права и установку драйвера на проблемных машинах
Как найти CLSID и проверить регистрацию компонента
Если в тексте ошибки указан CLSID, откройте редактор реестра (regedit) и выполните поиск по этому идентификатору в ветке HKEY_CLASSES_ROOT\CLSID. Отсутствие записи означает, что компонент не установлен или не зарегистрирован. Если запись есть — смотрите значение InprocServer32: файл по указанному пути должен физически существовать.
Если известен только ProgID (например, V83.COMConnector), найдите его в HKEY_CLASSES_ROOT — внутри будет подраздел CLSID с нужным идентификатором. Это удобный способ понять, какая именно DLL отвечает за компонент.
- 1Скопируйте CLSID или ProgID из текста ошибки 1С
- 2Откройте regedit и найдите идентификатор в HKEY_CLASSES_ROOT\CLSID
- 3Проверьте, существует ли DLL из значения InprocServer32
- 4Если записи нет — установите компонент или зарегистрируйте DLL командой regsvr32
- 5Проверьте разрядность: 32-битный компонент регистрируйте через regsvr32 из C:\Windows\SysWOW64
- 6Перезапустите сеанс 1С и проверьте создание объекта
Как зарегистрировать компонент вручную
Большинство проблем с CLSID решается регистрацией нужной DLL. Для этого используется штатная утилита Windows regsvr32, запущенная от имени администратора.
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С или выносите вызов на клиента.
Как выбрать действие
Права доступа и служба сервера 1С
Даже корректно зарегистрированный компонент может не работать из-за прав. Сервер 1С обычно работает под учётной записью USR1CV8 или подобной служебной учёткой. У этой учётной записи должны быть права на чтение DLL-файла компонента и на соответствующие ветки реестра.
Дополнительно проверьте настройки DCOM (оснастка dcomcnfg): для некоторых компонентов требуется явно разрешить запуск и активацию нужному пользователю. Если компонент создаётся локально, но не работает при вызове с сервера — почти всегда дело в правах служебной учётной записи или в разрядности.
Как проверить, что проблема решена
После регистрации компонента проверьте результат минимальным действием: создайте объект в том же контексте, где возникала ошибка. Для COM-соединителя это создание объекта V83.COMConnector в консоли кода или тестовой обработке. Для драйвера оборудования — тест подключения из настроек торгового оборудования в 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?
Сама процедура безопасна, если библиотека получена из доверенного источника — дистрибутива платформы или производителя оборудования. Перед ручными правками реестра рекомендуется экспортировать изменяемую ветку, чтобы иметь возможность откатить изменения.