Разработка и Конфигурация · 11 мин
Как добавить внешнюю компоненту в 1С
Как добавить внешнюю компоненту в 1С: подключение через ПодключитьВнешнююКомпоненту, макет, Native API, регистрация COM, типичные ошибки и проверка результата.
Внешняя компонента (ВК) — это библиотека, написанная не на встроенном языке 1С, а на C++, C# или другом языке, которая расширяет возможности платформы: работа со сканерами штрих-кодов, криптография, обмен с оборудованием, интеграция с нестандартными API. Подключить её можно двумя принципиально разными способами: классическая регистрация COM-библиотеки в операционной системе или современный механизм Native API, при котором компонента хранится прямо в информационной базе и подключается программно.
Выбор способа зависит от того, в каком виде вы получили компоненту. Если поставщик дал файл .dll и инструкцию «зарегистрируйте через regsvr32» — это COM-сценарий. Если компонента распространяется как zip-архив с манифестом manifest.xml и файлами для разных платформ — это Native API, и её правильное место хранения — макет конфигурации или общий макет.
Ниже разобраны оба сценария: подготовка файла, добавление макета в конфигураторе, код подключения на встроенном языке, проверка результата и разбор типичных ошибок. Отдельно описаны ограничения для веб-клиента, тонкого клиента и 64-разрядного сервера 1С.
Определите тип компоненты: Native API или COM
Прежде чем что-либо добавлять, посмотрите на состав поставки. Native API компонента обычно поставляется в виде zip-архива, внутри которого лежат несколько файлов .dll или .so для разных платформ (Windows 32/64, Linux, иногда Android и iOS) и файл manifest.xml, где перечислены эти файлы и их целевые платформы. Такая компонента не требует регистрации в системе и работает в том числе на тонком клиенте и в веб-клиенте (при наличии соответствующей сборки).
COM-компонента — это, как правило, один файл .dll (или .ocx), который регистрируется в реестре Windows и становится доступен по программному идентификатору ProgID. Этот вариант работает только на Windows и только там, где библиотека зарегистрирована: на сервере 1С, если код выполняется на сервере, или на каждом клиентском компьютере, если код клиентский.
Если сомневаетесь, откройте файл поставки: наличие manifest.xml однозначно указывает на Native API. Документация поставщика обычно прямо указывает технологию и пример кода подключения — ориентируйтесь на него.
Добавьте компоненту в макет конфигурации
Для Native API стандартный способ хранения — макет с типом «Двоичные данные». Откройте конфигуратор, перейдите в ветку «Общие» → «Макеты» (или создайте макет внутри конкретного объекта), добавьте новый макет, задайте ему имя без пробелов и кириллицы, например КомпонентаСканер, выберите тип «Двоичные данные» и загрузите в него zip-архив компонента целиком, не распаковывая.
Имя макета затем используется в коде при обращении к методу ПолучитьОбщийМакет или при указании места хранения в строке подключения. Хранение компоненты в базе даёт важное преимущество: при обновлении конфигурации компонента обновляется у всех пользователей автоматически, без обхода компьютеров.
- 1Откройте конфигуратор и ветку «Общие» → «Макеты»
- 2Создайте макет с типом «Двоичные данные» и латинским именем
- 3Загрузите в макет zip-архив компонента целиком
- 4Сохраните и обновите конфигурацию базы данных
- 5Проверьте, что макет доступен: ПолучитьОбщийМакет("ИмяМакета") возвращает двоичные данные
Альтернатива макету — поместить компоненту в справочник «Внешние компоненты» подсистемы БСП, если конфигурация построена на библиотеке стандартных подсистем. Тогда подключение выполняется штатными функциями БСП, а администратор может обновлять компоненту без конфигуратора, прямо в пользовательском режиме.
Подключите компоненту программно
Основной метод — ПодключитьВнешнююКомпоненту. Для компоненты из макета место хранения указывается в виде пути к макету. Типовой код выглядит так:
Подключено = ПодключитьВнешнююКомпоненту(
"ОбщийМакет.КомпонентаСканер",
"Scanner",
ТипВнешнейКомпоненты.Native);
Если Подключено Тогда
Сканер = Новый("AddIn.Scanner.Scanner");
Иначе
Сообщить("Не удалось подключить компоненту");
КонецЕсли;
Второй параметр — имя подключения, которое затем фигурирует в строке создания объекта AddIn.Scanner. Третий сегмент в имени объекта (здесь Scanner после точки) — это имя класса внутри компоненты, его нужно взять из документации поставщика: ошибка в этом имени даёт сбой именно на строке Новый, а не на подключении.
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканер", "Scanner", ТипВнешнейКомпоненты.Native);
Сканер = Новый("AddIn.Scanner.Scanner");Для COM-компоненты сначала выполняется регистрация в ОС: regsvr32 "C:\Components\MyComp.dll" с правами администратора. Затем компонента подключается по ProgID: ПодключитьВнешнююКомпоненту("AddIn.MyComp") — либо объект создаётся напрямую через COM-объект, в зависимости от реализации. Учтите разрядность: 32-разрядная dll не зарегистрируется для 64-разрядного процесса сервера 1С.
Учтите место выполнения кода: клиент или сервер
Компонента подключается в том процессе, где выполняется код. Если метод вызывается в серверной процедуре, библиотека загружается в рабочий процесс сервера 1С — значит, в архиве должна быть сборка под ОС и разрядность сервера (например, Linux x64), а для COM — регистрация выполняется на сервере. Если код клиентский, компонента загружается на компьютер пользователя.
Для Native API платформа умеет автоматически устанавливать компоненту на клиенте из макета при первом обращении — для этого предусмотрен метод УстановитьВнешнююКомпоненту и механизм автозагрузки из архива с манифестом. В веб-клиенте компонента работает только при наличии сборки для браузера и установленного расширения для работы с файлами/компонентами.
Где подключать компоненту
Проверьте, что компонента подключилась корректно
Минимальная проверка — два контрольных значения: метод ПодключитьВнешнююКомпоненту вернул Истина, и конструктор Новый("AddIn...") создал объект без исключения. Дополнительно вызовите любой безопасный метод компоненты, например получение версии, если такой есть в документации — это подтверждает, что библиотека не только загрузилась, но и работоспособна.
Как проверить результат
Истина — компонента найдена и загружена
Ложь — неверный путь к макету, повреждён архив или нет сборки под текущую платформу
Объект создан, методы доступны
Ошибка конструктора — неверно указано имя подключения или класса
Метод возвращает осмысленное значение
Исключение — конфликт версий или не хватает зависимостей библиотеки
Полезно обернуть подключение в попытку-исключение и записывать текст ошибки в журнал регистрации: на рабочих базах это единственный способ понять, у какого пользователя и почему компонента не загрузилась. Повторное подключение уже подключённой компоненты обычно безвредно, но лучше хранить признак успешного подключения в переменной и не вызывать метод в цикле.
Типичные ошибки и их причины
Самая частая проблема — «Компонента не обнаружена» при корректном, казалось бы, пути к макету. Причины: макет создан с типом, отличным от «Двоичные данные»; zip-архив был перепакован и manifest.xml оказался во вложенной папке; в архиве нет сборки под платформу, где выполняется код. Распакуйте архив и проверьте, что манифест лежит в корне.
Вторая группа ошибок — разрядность и права. 64-разрядный сервер 1С не загрузит 32-разрядную COM-dll; для regsvr32 нужны права администратора; антивирус может блокировать загрузку неподписанных библиотек. Третья группа — несовпадение имён: имя подключения во втором параметре метода и имя в строке AddIn.Имя.Класс должны совпадать символ в символ.
Безопасность и обновление компоненты
Внешняя компонента — это исполняемый код внутри процесса платформы, поэтому к ней применимы те же требования, что к любому стороннему ПО: доверенный источник, контроль версии, тестирование на копии базы. Обновление Native API компоненты, хранящейся в макете, сводится к замене содержимого макета новым архивом и обновлению конфигурации; при хранении в БСП — к загрузке новой версии в справочник внешних компонент.
При обновлении учитывайте кэширование: клиентские процессы могут продолжать использовать ранее установленную версию до перезапуска сеанса. Если после обновления поведение компоненты не изменилось, первым делом перезапустите клиентское приложение и при необходимости очистите кэш компонент на клиенте.
FAQ
Можно ли добавить компоненту без изменения конфигурации?
Да, если конфигурация содержит подсистему внешних компонент БСП — компонента загружается в справочник в пользовательском режиме. Также COM-компонента регистрируется в ОС и подключается по ProgID вообще без макетов. Без этих вариантов потребуется доработка конфигурации или внешняя обработка.
Почему ПодключитьВнешнююКомпоненту возвращает Ложь без текста ошибки?
Метод возвращает только признак успеха. Детали смотрите в журнале регистрации и в информации об ошибке, полученной через ИнформацияОбОшибке() внутри обработки исключения. Типовые причины — отсутствие сборки под текущую платформу и повреждённый или перепакованный архив.
Работает ли внешняя компонента в веб-клиенте?
Только если в архиве есть сборка для браузера (файл для соответствующей платформы в manifest.xml) и в браузере установлено расширение для работы с внешними компонентами. Без браузерной сборки используйте тонкий клиент.
Как подключить компоненту в фоновом задании?
Подключение выполняется внутри серверной процедуры фонового задания тем же методом. Убедитесь, что в архиве есть сборка под ОС и разрядность сервера, — клиентские сборки в фоновом задании не работают.
Чем Native API лучше COM?
Native API кроссплатформенна (Windows, Linux, мобильные платформы), не требует регистрации в ОС и прав администратора, хранится в базе и обновляется централизованно. COM оправдан только для существующих Windows-решений, где переписывать компоненту нецелесообразно.
Нужно ли отключать компоненту после использования?
Явного обязательного отключения нет: библиотека выгружается при завершении сеанса. Достаточно освободить объектную переменную. Повторные подключения в том же сеансе не создают дубликатов, но лучше кэшировать признак подключения.
Что важно запомнить
Определите тип компонента: Native API хранится в макете как zip-архив и подключается методом ПодключитьВнешнююКомпоненту, COM регистрируется через regsvr32. Подключение выполняется в том процессе, где работает код, поэтому проверяйте наличие сборки под платформу сервера или клиента. Успех подтверждают два признака: метод вернул Истина и объект AddIn создан без ошибки.