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

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

Как подключить внешнюю компоненту в 1С

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

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

Выбор способа зависит от формата компоненты. Современные компоненты чаще всего поставляются по технологии Native API и упакованы в ZIP-архив с манифестом — их подключают из макета конфигурации. Старые компоненты в виде COM-объектов требуют регистрации в реестре Windows и подключаются через COMСоединение или создание COM-объекта. Ниже разобраны оба сценария с проверкой результата и разбором типичных сбоев.

Перед началом работы убедитесь, что у вас есть сам файл компоненты из доверенного источника, права на запись в каталог установки (или права администратора для регистрации COM) и доступ к конфигуратору, если компонента будет встраиваться в макет. Работу лучше проверять сначала на тестовой базе.

Определяем тип компоненты и требования

Первый шаг — понять, что именно у вас в руках. Компонента Native API обычно поставляется в виде ZIP-архива, внутри которого лежат файлы DLL для разных платформ (Windows x86, x64, иногда Linux) и файл манифеста manifest.xml. COM-компонента — это одиночная DLL или OCX-файл без манифеста, которую регистрируют в системе.

Критичный параметр — разрядность. 32-битная компонента не загрузится в 64-битном клиенте 1С и наоборот. Если используется тонкий или толстый клиент x86-64, нужна 64-битная версия библиотеки. Проверить разрядность клиента можно в окне «О программе» или через системную информацию.

Также заранее уточните, где компонента будет использоваться: на клиенте или на сервере. Для серверного вызова библиотека должна быть доступна на сервере 1С:Предприятия, а для кластера под Linux — собрана именно под Linux. Это частая причина ситуации «на клиенте работает, на сервере нет».

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

Штатный и рекомендуемый способ для управляемых конфигураций — поместить ZIP-архив компоненты в макет типа «Двоичные данные» и подключать его программно. Так компонента хранится внутри информационной базы, обновляется вместе с конфигурацией и не требует ручной установки на каждое рабочее место.

Порядок действий: в конфигураторе создайте общий макет, загрузите в него ZIP-архив компоненты, затем в коде вызовите подключение и создание объекта. В типовых конфигурациях на БСП для этого есть общий модуль работы с внешними компонентами, но базовый синтаксис платформы выглядит так:

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

ВызватьИсключение "Не удалось подключить компоненту сканера";

КонецЕсли;

Сканер = Новый("AddIn.Scanner.Driver");

Обратите внимание на второй параметр — это символьное имя компоненты, а при создании объекта используется связка «AddIn.ИмяКомпоненты.ProgID». Имя и ProgID должны точно совпадать с тем, что указано в манифесте компоненты, иначе объект не создастся, хотя подключение может пройти успешно.

Порядок подключения из макета
  1. 1
    Создайте общий макет типа «Двоичные данные» и загрузите ZIP компоненты
  2. 2
    Обновите конфигурацию базы данных
  3. 3
    Вызовите ПодключитьВнешнююКомпоненту с указанием макета и типа Native
  4. 4
    Создайте объект через Новый("AddIn.Имя.ProgID")
  5. 5
    Вызовите тестовый метод компоненты и проверьте результат

Подключение компоненты из файла на диске

Если компонента не встроена в конфигурацию, её можно подключить напрямую из файла. Для Native API указывается путь к ZIP-архиву, для отдельных DLL — путь к файлу библиотеки. Способ удобен на этапе разработки и отладки, когда архив часто пересобирается.

Учтите ограничение: путь должен быть доступен тому процессу, который выполняет код. Если код выполняется на сервере, путь интерпретируется относительно сервера, а не клиентского компьютера. Поэтому для клиент-серверного режима файловый способ подходит только при гарантированном наличии файла на сервере.

В файловой базе на локальном компьютере достаточно указать путь вида «C:\Components\MyComponent.zip». Проверьте, что у пользователя, под которым работает 1С, есть права на чтение этого каталога, а антивирус не блокирует загрузку библиотеки.

Подключение COM-компоненты через регистрацию в системе

Старые компоненты и библиотеки сторонних поставщиков часто реализованы как COM-объекты. Их подключают в два этапа: регистрация в реестре Windows и создание объекта в коде 1С. Регистрация выполняется один раз на каждом компьютере, где используется компонента.

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

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

После регистрации объект создаётся в коде по его программному идентификатору: Новый COMОбъект("Vendor.Library"). Узнать ProgID можно из документации поставщика или из реестра. Если регистрация прошла успешно, но объект не создаётся — почти всегда проблема в несовпадении разрядности клиента 1С и библиотеки.

Сравнение способов подключения

Native API из макета

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

Native API из файла

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

COM через regsvr32

Единственный вариант для старых библиотек. Требует прав администратора, регистрации на каждом ПК и совпадения разрядности. В веб-клиенте не работает.

Проверка результата и типичные ошибки

Подключение следует считать завершённым только после тестового вызова. Успешный возврат Истина от ПодключитьВнешнююКомпоненту означает лишь загрузку библиотеки — но объект может не создаться из-за неверного ProgID, а метод — вернуть ошибку из-за отсутствия лицензии или оборудования.

Практический минимум проверки: создать объект, вызвать метод получения версии компоненты (он есть почти у всех драйверов) и убедиться, что возвращается осмысленное значение, а не исключение. Только после этого передавайте компоненту в рабочий код.

Типичные ошибки
01
Несовпадение разрядности: 32-битная DLL не загружается в 64-битный клиент — берите сборку под свою платформу
02
Неверный ProgID при создании объекта: подключение проходит, а Новый("AddIn...") падает — сверьте имя с манифестом
03
Подключение на клиенте при вызове на сервере: в клиент-серверном режиме библиотека нужна на сервере
04
Регистрация 32-битной COM через системный regsvr32 на 64-битной Windows — используйте regsvr32 из SysWOW64
05
Блокировка антивирусом: DLL загружается, но вызовы обрываются — добавьте каталог в исключения после проверки источника файла
Контрольные точки

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

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

Возвращает Истина без исключений

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

Ложь или исключение — проверяйте путь, формат архива и разрядность

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

Объект создан, тип не Неопределено

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

Ошибка создания — неверный ProgID или незарегистрированный COM

Тестовый вызов метода
Норма

Метод версии/статуса возвращает значение

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

Исключение при вызове — проблема лицензии, оборудования или зависимостей DLL

Ограничения и безопасность

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

Учтите ограничения клиентов: в веб-клиенте COM-объекты не работают, а Native API компоненты требуют специальной сборки под браузер и работают не во всех обозревателях. Для тонкого клиента на Linux нужна Linux-сборка библиотеки. Если компонента критична для бизнес-процесса, продумайте поведение системы при её недоступности — например, ручной ввод штрих-кода вместо сканирования.

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

Чем отличается УстановитьВнешнююКомпоненту от ПодключитьВнешнююКомпоненту?

Установка копирует файлы компоненты в служебный каталог пользователя и выполняется один раз, подключение загружает библиотеку в текущий сеанс. Для большинства Native API компонент платформа сама выполняет необходимые действия при подключении, поэтому отдельный вызов установки обычно не требуется.

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

В клиент-серверном режиме код с директивой «НаСервере» выполняется на сервере 1С:Предприятия. Библиотека должна быть установлена и доступна именно там, с учётом ОС и разрядности сервера. Проверьте, где именно выполняется ваш код, и разверните компоненту на нужной стороне.

Как узнать ProgID компоненты для создания объекта?

Для Native API ProgID указан в манифесте ZIP-архива и в документации поставщика. Для COM-компоненты — в документации или в реестре Windows после регистрации. Часто ProgID совпадает с именем класса драйвера, например «AddIn.Scanner.Driver».

Можно ли подключить компоненту в веб-клиенте?

COM-объекты в веб-клиенте не работают. Компоненты Native API поддерживаются только при наличии специальной сборки под браузер и не во всех обозревателях. Если веб-доступ критичен, выносите логику работы с оборудованием на сервер или используйте тонкий клиент.

Что делать, если regsvr32 сообщает об успехе, но объект не создаётся?

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

Как обновить компоненту, подключённую из макета?

Загрузите новую версию ZIP-архива в тот же общий макет и обновите конфигурацию базы данных. При следующем подключении пользователи получат актуальную версию автоматически — ручная переустановка на рабочих местах не нужна.

Итог

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

Сначала определите тип компоненты и разрядность, затем выберите способ: Native API из макета — основной вариант, COM — для старых библиотек с регистрацией через regsvr32. Успешным подключение считается только после создания объекта и тестового вызова метода. Библиотеки берите только из проверенных источников.