Разработка и Конфигурация · 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 в ... успешно выполнена».
regsvr32 "C:\Components\MyComponent.dll"Если компонента 32-разрядная, а система 64-разрядная, используйте 32-битную версию regsvr32 из папки SysWOW64 — иначе получите ошибку о несовпадении разрядности. Для 64-разрядной компоненты применяется regsvr32 из System32.
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyComponent.dll"Подключение Native API-компоненты из 1С
Компоненты по технологии Native API не требуют регистрации в Windows. Их подключают методом ПодключитьВнешнююКомпоненту, передавая путь к файлу DLL или имя макета, если компонента хранится внутри конфигурации.
Типовой код подключения выглядит так: сначала подключение по имени файла, затем создание объекта через Новый с типом «AddIn...». Если компонента упакована в макет конфигурации, вместо пути к файлу указывается строка вида ОбщийМакет.ИмяМакета.
Если ПодключитьВнешнююКомпоненту("C:\Components\MyNative.dll", "MyComp", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.MyComp.MyObject");
Иначе
Сообщить("Не удалось подключить компоненту");
КонецЕсли;Размещение компоненты в макете конфигурации — предпочтительный вариант для тиражных решений: файл поставляется вместе с базой, не зависит от путей на диске и не требует отдельной установки на каждом рабочем месте.
Разрядность компоненты и клиента 1С
Разрядность компоненты должна совпадать с разрядностью процесса, который её загружает. 32-разрядный клиент 1С загружает только 32-разрядные DLL, 64-разрядный — только 64-разрядные. Это правило не обходится никакими настройками.
На серверном варианте работы важна разрядность сервера 1С, если компонента вызывается в серверном коде. Если та же компонента вызывается на клиенте — решающей будет разрядность клиентского приложения. Нередко приходится регистрировать обе версии DLL: 32-битную для клиентов и 64-битную для сервера.
Как выбрать действие
Права доступа и место регистрации
Регистрация COM-компоненты через regsvr32 записывает данные в ветку реестра HKEY_CLASSES_ROOT, поэтому требует прав администратора. Без них команда завершится ошибкой доступа (код 0x80004005 или 0x80070005).
Если прав администратора нет, возможны два варианта. Первый — попросить администратора домена зарегистрировать компоненту централизованно. Второй — перейти на Native API-компоненту, которая вообще не трогает реестр и работает с правами обычного пользователя.
В файловом варианте базы компонента должна быть доступна на каждом клиентском компьютере. В клиент-серверном — на сервере 1С и на тех клиентах, где выполняется клиентский код с её вызовом. Сетевые пути для DLL использовать не рекомендуется: Windows может блокировать загрузку библиотек из недоверенных сетевых расположений.
Проверка результата регистрации
После регистрации COM-компоненты проверьте её доступность простым кодом в 1С: создайте объект по ProgID и убедитесь, что исключение не возникает. Для Native API — что метод ПодключитьВнешнююКомпоненту возвращает Истина.
Как проверить результат
Объект создан, методы вызываются без исключений
Ошибка «Недопустимая строка с указанием класса» — компонента не зарегистрирована или неверный ProgID
Сообщение «DllRegisterServer успешно выполнена»
Ошибка доступа, несовпадения разрядности или отсутствия точки входа
Метод возвращает Истина
Возвращает Ложь — проверьте путь, разрядность и тип компоненты
Компонента по-прежнему доступна
Регистрация слетела — файл был перемещён или удалён после регистрации
Дополнительно убедитесь, что компонента работает под тем пользователем, под которым запускается 1С. Регистрация, выполненная в контексте одной учётной записи с особыми настройками, иногда недоступна другим пользователям терминального сервера.
Типичные ошибки и их устранение
Отдельная категория проблем — зависимости. Многие компоненты написаны на 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С. Регистрируйте из постоянного каталога и проверяйте результат созданием объекта.