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

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

Как зарегистрировать COM-компоненту 1С

Как зарегистрировать COM-компоненту 1С через regsvr32 и из конфигуратора: разрядность, права, типичные ошибки и проверка результата.

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

Регистрация сводится к записи сведений о библиотеке в реестр Windows. Сделать это можно двумя путями: системной утилитой regsvr32 или штатными средствами самой платформы 1С через метод подключения внешних компонент. Выбор способа зависит от того, как поставляется компонента — отдельным DLL-файлом или в составе конфигурации в виде макета.

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

Что нужно проверить перед регистрацией

Первое — разрядность компоненты и клиента 1С. Если компонента 32-разрядная, она будет работать с 32-разрядным клиентом 1С, но не с 64-разрядным сервером приложений. Для серверного вызова потребуется 64-разрядная версия той же компоненты. Узнать разрядность платформы можно в свойствах ярлыка 1С или в диспетчере задач: у 32-разрядных процессов в старых версиях Windows рядом с именем отображается пометка «(32 бита)».

Второе — источник файла. Берите DLL только от поставщика конфигурации, разработчика оборудования или из комплекта поставки 1С. Файлы с сомнительных сайтов могут содержать вредоносный код, который после регистрации получит выполнение в системе с правами того пользователя, под которым работает 1С.

Третье — права. Для регистрации компоненты в системном разделе реестра (HKEY_CLASSES_ROOT) нужны права администратора. Если регистрация выполняется на сервере, согласуйте действия с администратором и заранее сделайте резервную копию важных данных.

Регистрация через regsvr32

Стандартный способ для DLL, поставляемой отдельным файлом, — утилита regsvr32, встроенная в Windows. Поместите файл компоненты в постоянную папку, например в каталог установки 1С или отдельную папку вроде C:\Components. Не регистрируйте файл с рабочего стола или из папки загрузок: после перемещения или удаления файла регистрация станет битой.

Откройте командную строку от имени администратора: меню «Пуск» → введите cmd → «Запуск от имени администратора». Затем выполните команду, указав полный путь к библиотеке.

cmd
regsvr32 "C:\Components\MyComponent.dll"

Для 32-разрядной компоненты на 64-разрядной Windows используйте regsvr32 из папки SysWOW64, иначе библиотека зарегистрируется в 64-разрядном разделе реестра и 32-битный клиент 1С её не увидит.

cmd
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyComponent.dll"

Успех подтверждается диалоговым окном «DllRegisterServer ... успешно выполнена». Ошибка с кодом 0x80070005 означает нехватку прав (запустите консоль от имени администратора), ошибка «модуль загружен, но точка входа не найдена» — что файл не является COM-библиотекой или повреждён.

Порядок действий через regsvr32
  1. 1
    Скопируйте DLL в постоянную папку, например C:\Components
  2. 2
    Откройте командную строку от имени администратора
  3. 3
    Выполните regsvr32 с полным путём к DLL (для 32-битной — через SysWOW64)
  4. 4
    Убедитесь, что появилось сообщение об успешной регистрации
  5. 5
    Перезапустите 1С и проверьте подключение компоненты

Регистрация из конфигурации 1С

Большинство типовых конфигураций подключают внешние компоненты программно. Компонента хранится в макете конфигурации в виде архива, а подключение выполняется методом ПодключитьВнешнююКомпоненту() с указанием имени макета и типа Native или COM. В этом случае ручная регистрация через regsvr32 обычно не требуется — платформа сама извлекает и регистрирует библиотеку при первом подключении.

Если компонента подключается по ProgID (например, «AddIn.Scanner»), она должна быть зарегистрирована в системе заранее. Тогда используют regsvr32 либо установщик от поставщика, который делает это автоматически.

Пример программного подключения из макета выглядит так:

Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканера", "Сканер", ТипВнешнейКомпоненты.Native) Тогда

Сообщить("Компонента подключена");

Иначе

Сообщить("Не удалось подключить компоненту");

КонецЕсли;

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

Самый простой тест — выполнить в 1С создание объекта по ProgID и посмотреть, не возникнет ли исключение. Это можно сделать из внешней обработки или консоли кода:

Попытка

Объект = Новый COMОбъект("AddIn.MyComponent");

Сообщить("Объект создан успешно");

Исключение

Сообщить(ОписаниеОшибки());

КонецПопытки;

Дополнительно можно проверить реестр: откройте редактор реестра (regedit) и найдите ProgID компоненты в разделе HKEY_CLASSES_ROOT. У зарегистрированной компоненты там есть подраздел CLSID, а в HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32 указан путь к DLL. Для 32-разрядной компоненты на 64-разрядной системе запись будет находиться в ветке WOW6432Node.

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

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

Сообщение regsvr32
Норма

«DllRegisterServer успешно выполнена»

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

Код ошибки 0x80070005 или «точка входа не найдена»

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

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

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

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

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

ProgID и CLSID присутствуют, путь к DLL корректен

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

Записи нет или путь указывает на удалённый файл

Типичные ошибки и их причины

Ошибка «Класс не зарегистрирован» (0x80040154) при создании COMОбъекта почти всегда означает одно из трёх: компонента не зарегистрирована вовсе, зарегистрирована не в той разрядности или регистрация выполнена под другим пользователем в разделе HKEY_CURRENT_USER, а 1С запущена под другой учётной записью.

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

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

Типичные ошибки
01
Регистрация 32-битной DLL обычным regsvr32 на 64-битной Windows — компонента попадает не в тот раздел реестра и 1С её не видит
02
Запуск regsvr32 без прав администратора — ошибка 0x80070005, регистрация не выполняется
03
Регистрация DLL из временной папки — после очистки папки ссылка в реестре ведёт в никуда
04
Регистрация на клиенте при серверном вызове — компонента нужна на сервере 1С, а не на рабочем месте

Как отменить регистрацию

Если компонента больше не нужна или её требуется переустановить, сначала отмените регистрацию той же утилитой с ключом /u, затем удалите файл. Это очищает реестр от записей, которые иначе останутся «мусором» и могут конфликтовать с новой версией.

cmd
regsvr32 /u "C:\Components\MyComponent.dll"

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

Итог

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

Регистрация выполняется через regsvr32 с правами администратора или штатным подключением из конфигурации. Ключевые условия успеха — совпадение разрядности компоненты и клиента (или сервера) 1С, постоянное расположение DLL-файла и проверка результата созданием объекта по ProgID.

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

Нужно ли регистрировать компоненту на каждом компьютере пользователей?

Если компонента вызывается в клиентском контексте (например, работа со сканером на рабочем месте кассира) — да, регистрировать нужно на каждом клиентском компьютере. Если вызов идёт на сервере 1С, достаточно регистрации только на сервере.

Чем отличается COM-компонента от Native API?

COM-компонента регистрируется в реестре Windows и создаётся по ProgID. Native API-компонента подключается напрямую из файла или макета методом ПодключитьВнешнююКомпоненту без записи в реестр, что упрощает развёртывание и позволяет работать без прав администратора.

Можно ли зарегистрировать компоненту без прав администратора?

Через regsvr32 — нет, запись в HKEY_CLASSES_ROOT требует повышенных прав. Обходные варианты существуют (регистрация в HKEY_CURRENT_USER для отдельного пользователя или COM-регистрация без прав через манифесты), но они требуют поддержки со стороны самой компоненты и не всегда применимы в 1С.

Почему после регистрации 1С всё равно не видит компоненту?

Чаще всего причина в несовпадении разрядности: 32-битная DLL зарегистрирована, а клиент или сервер 1С работает в 64-битном режиме. Также проверьте, что 1С перезапущена после регистрации и что антивирус не заблокировал загрузку библиотеки.

Как узнать ProgID компоненты?

ProgID указывается в документации поставщика компоненты. Если её нет, найдите запись в реестре: после регистрации в HKEY_CLASSES_ROOT появится раздел с именем вида «ИмяБиблиотеки.ИмяКласса». Также ProgID можно увидеть в исходном коде конфигурации, где компонента подключается.

Что делать, если файл компоненты повреждён или не регистрируется?

Ошибка «точка входа DllRegisterServer не найдена» означает, что файл не является регистрируемой COM-библиотекой или испорчен при копировании. Получите файл заново из комплекта поставки, проверьте его целостность и убедитесь, что это именно COM-DLL, а не обычная библиотека, которую подключают иначе.