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

Разработка и Конфигурация · 9 мин

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

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

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

Способ регистрации зависит от типа компоненты. Классические COM-компоненты регистрируются в Windows через утилиту regsvr32. Компоненты, созданные по технологии Native API, подключаются напрямую из 1С методом ПодключитьВнешнююКомпоненту без регистрации в системе. Путаница между этими двумя механизмами — самая частая причина ошибок вида «Не удалось загрузить внешнюю компоненту».

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

Определите тип компоненты перед регистрацией

Первый шаг — понять, с какой компонентой вы работаете. Если поставщик даёт DLL-файл и инструкцию с командой regsvr32 — это COM-компонента. Если компонента поставляется в виде ZIP-архива с манифестом (файл manifest.xml внутри) или как отдельная DLL с упоминанием Native API — она подключается средствами платформы 1С.

Признак COM-компоненты — наличие внутри DLL точек входа DllRegisterServer и ProgID (строка вида «AddIn.MyComponent»). Признак Native API — компонента собрана по шаблону 1С и подключается по имени файла без записи в реестр Windows.

От типа зависит всё дальнейшее: команда, место хранения файла, требования к правам и способ обращения из кода 1С. Ошибочная попытка зарегистрировать Native API-компоненту через regsvr32 завершится сообщением «точка входа DllRegisterServer не найдена» — это нормально, такая компонента просто регистрируется иначе.

Регистрация COM-компоненты через regsvr32

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

Запустите командную строку от имени администратора и выполните команду с полным путём к файлу. Успешная регистрация подтверждается диалогом «DllRegisterServer в ... успешно выполнена».

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

Если компонента 32-разрядная, а система 64-разрядная, используйте 32-битную версию regsvr32 из папки SysWOW64 — иначе получите ошибку о несовпадении разрядности. Для 64-разрядной компоненты применяется regsvr32 из System32.

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

Подключение Native API-компоненты из 1С

Компоненты по технологии Native API не требуют регистрации в Windows. Их подключают методом ПодключитьВнешнююКомпоненту, передавая путь к файлу DLL или имя макета, если компонента хранится внутри конфигурации.

Типовой код подключения выглядит так: сначала подключение по имени файла, затем создание объекта через Новый с типом «AddIn...». Если компонента упакована в макет конфигурации, вместо пути к файлу указывается строка вида ОбщийМакет.ИмяМакета.

bsl
Если ПодключитьВнешнююКомпоненту("C:\Components\MyNative.dll", "MyComp", ТипВнешнейКомпоненты.Native) Тогда
    Компонента = Новый("AddIn.MyComp.MyObject");
Иначе
    Сообщить("Не удалось подключить компоненту");
КонецЕсли;

Размещение компоненты в макете конфигурации — предпочтительный вариант для тиражных решений: файл поставляется вместе с базой, не зависит от путей на диске и не требует отдельной установки на каждом рабочем месте.

Разрядность компоненты и клиента 1С

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

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

Маршрут решения

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

Ошибка «несоответствие разрядности» или 0x800700C1Проверьте разрядность клиента 1С и используйте DLL той же архитектуры
Компонента работает на клиенте, но не на сервереЗарегистрируйте или разместите компоненту на сервере 1С с учётом его разрядности
regsvr32 сообщает, что точка входа не найденаЭто Native API-компонента — подключайте её методом ПодключитьВнешнююКомпоненту
Нет прав администратора на рабочем местеИспользуйте Native API-компоненту из макета или попросите администратора выполнить регистрацию

Права доступа и место регистрации

Регистрация COM-компоненты через regsvr32 записывает данные в ветку реестра HKEY_CLASSES_ROOT, поэтому требует прав администратора. Без них команда завершится ошибкой доступа (код 0x80004005 или 0x80070005).

Если прав администратора нет, возможны два варианта. Первый — попросить администратора домена зарегистрировать компоненту централизованно. Второй — перейти на Native API-компоненту, которая вообще не трогает реестр и работает с правами обычного пользователя.

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

Проверка результата регистрации

После регистрации COM-компоненты проверьте её доступность простым кодом в 1С: создайте объект по ProgID и убедитесь, что исключение не возникает. Для Native API — что метод ПодключитьВнешнююКомпоненту возвращает Истина.

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

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

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

Объект создан, методы вызываются без исключений

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

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

Вывод regsvr32
Норма

Сообщение «DllRegisterServer успешно выполнена»

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

Ошибка доступа, несовпадения разрядности или отсутствия точки входа

ПодключитьВнешнююКомпоненту
Норма

Метод возвращает Истина

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

Возвращает Ложь — проверьте путь, разрядность и тип компоненты

Повторный запуск после перезагрузки
Норма

Компонента по-прежнему доступна

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

Регистрация слетела — файл был перемещён или удалён после регистрации

Дополнительно убедитесь, что компонента работает под тем пользователем, под которым запускается 1С. Регистрация, выполненная в контексте одной учётной записи с особыми настройками, иногда недоступна другим пользователям терминального сервера.

Типичные ошибки и их устранение

Типичные ошибки
01
Регистрация из временной папки: после очистки каталога компонента перестаёт работать — регистрируйте из постоянного пути
02
Использование regsvr32 не той разрядности: 32-битная DLL не регистрируется 64-битной утилитой и наоборот
03
Попытка зарегистрировать Native API через regsvr32: ошибка «точка входа не найдена», компонента подключается иначе
04
Отсутствие зависимых библиотек: компонента не загружается, потому что не найдены нужные ей runtime-библиотеки (например, Visual C++ Redistributable)
05
Ожидание, что регистрация на одном ПК сработает везде: в файловом режиме регистрировать нужно на каждом рабочем месте

Отдельная категория проблем — зависимости. Многие компоненты написаны на C++ и требуют установленных пакетов Visual C++ Redistributable соответствующей версии и разрядности. Если DLL зарегистрировалась, но не загружается в 1С, проверьте зависимости и установите недостающие пакеты.

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

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

COM-компоненту через regsvr32 — нет, нужна запись в HKEY_CLASSES_ROOT. Альтернатива — Native API-компонента, которая подключается из кода 1С и не требует ни реестра, ни повышенных прав.

Почему компонента работает в файловой базе, но не в серверной?

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

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

1С не нашла COM-компоненту по указанному ProgID. Причины: компонента не зарегистрирована, зарегистрирована не той разрядности, опечатка в ProgID или файл DLL удалён после регистрации.

Нужно ли перерегистрировать компоненту после обновления DLL?

Если путь и имя файла не изменились, обычно достаточно заменить файл при закрытой 1С. Но если изменились интерфейсы или ProgID, регистрацию лучше выполнить заново: сначала regsvr32 /u для старой версии, затем регистрация новой.

Как отменить регистрацию COM-компоненты?

Выполните regsvr32 с ключом /u и тем же путём к файлу: regsvr32 /u "C:\Components\MyComponent.dll". После этого записи о компоненте удалятся из реестра, и файл можно удалить или переместить.

Куда лучше поместить компоненту для тиражного решения?

Оптимально — в макет конфигурации с подключением через ПодключитьВнешнююКомпоненту. Тогда компонента разворачивается вместе с обновлением конфигурации и не требует отдельной установки на рабочих местах.

Итог

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

Сначала определите тип компоненты: COM регистрируется через regsvr32 с правами администратора, Native API подключается из кода 1С. Разрядность DLL должна совпадать с разрядностью процесса 1С. Регистрируйте из постоянного каталога и проверяйте результат созданием объекта.