Администрирование · 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 → «Запуск от имени администратора». Затем выполните команду, указав полный путь к библиотеке.
regsvr32 "C:\Components\MyComponent.dll"Для 32-разрядной компоненты на 64-разрядной Windows используйте regsvr32 из папки SysWOW64, иначе библиотека зарегистрируется в 64-разрядном разделе реестра и 32-битный клиент 1С её не увидит.
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyComponent.dll"Успех подтверждается диалоговым окном «DllRegisterServer ... успешно выполнена». Ошибка с кодом 0x80070005 означает нехватку прав (запустите консоль от имени администратора), ошибка «модуль загружен, но точка входа не найдена» — что файл не является COM-библиотекой или повреждён.
- 1Скопируйте DLL в постоянную папку, например C:\Components
- 2Откройте командную строку от имени администратора
- 3Выполните regsvr32 с полным путём к DLL (для 32-битной — через SysWOW64)
- 4Убедитесь, что появилось сообщение об успешной регистрации
- 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.
Как проверить результат
«DllRegisterServer успешно выполнена»
Код ошибки 0x80070005 или «точка входа не найдена»
COMОбъект создаётся без исключения
Ошибка «Недопустимая строка с указанием класса» или 0x80040154
ProgID и CLSID присутствуют, путь к DLL корректен
Записи нет или путь указывает на удалённый файл
Типичные ошибки и их причины
Ошибка «Класс не зарегистрирован» (0x80040154) при создании COMОбъекта почти всегда означает одно из трёх: компонента не зарегистрирована вовсе, зарегистрирована не в той разрядности или регистрация выполнена под другим пользователем в разделе HKEY_CURRENT_USER, а 1С запущена под другой учётной записью.
Ошибка «Не удалось загрузить внешнюю компоненту» при работе типовой конфигурации часто связана не с регистрацией, а с тем, что антивирус заблокировал извлечение DLL из макета, либо у пользователя нет прав на временный каталог. Проверьте журнал антивируса и права на папку временных файлов.
Отдельный случай — после обновления платформы или конфигурации компонента «слетаает». Причина в том, что новая версия макета содержит другую версию DLL, а старая осталась зарегистрированной. Помогает повторное подключение компонента штатными средствами конфигурации или перерегистрация файла.
Как отменить регистрацию
Если компонента больше не нужна или её требуется переустановить, сначала отмените регистрацию той же утилитой с ключом /u, затем удалите файл. Это очищает реестр от записей, которые иначе останутся «мусором» и могут конфликтовать с новой версией.
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, а не обычная библиотека, которую подключают иначе.