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

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

Технология внешних компонент 1С: что это и как применять

Что такое технология внешних компонент в 1С: Native API и COM, создание, подключение и регистрация компонент, типичные ошибки и способы диагностики.

Технология внешних компонент (ВК) в 1С — это механизм расширения возможностей платформы за счёт подключаемых бинарных модулей, написанных на языках вроде C++ или C#. Через внешние компоненты 1С умеет работать с оборудованием (сканеры штрихкодов, ККТ, электронные весы), выполнять сложные вычисления, обращаться к системным функциям ОС и делать то, что невозможно или неэффективно реализовать на встроенном языке.

Компонент поставляется в виде файла библиотеки — DLL для Windows, SO для Linux, dylib для macOS — и подключается из кода 1С методом ПодключитьВнешнююКомпоненту(). После подключения объект компонента становится доступен в коде как обычный объект с методами, свойствами и событиями.

Типичный пример из практики: драйвер сканера штрихкодов, поставляемый «1С:Библиотека подключаемого оборудования», — это внешняя компонента. Когда кассир сканирует товар, компонента перехватывает данные со сканера и генерирует событие ВнешнееСобытие, которое обрабатывает прикладной код конфигурации.

Зачем нужны внешние компоненты и где они применяются

Встроенный язык 1С закрыт внутри платформы: у него нет прямого доступа к API операционной системы, драйверам устройств и низкоуровневым библиотекам. Внешняя компонента выступает мостом между платформой и внешним миром. Она получает вызовы из кода 1С, выполняет работу на уровне ОС и возвращает результат.

Основные сценарии применения:

  • подключение торгового оборудования — сканеры, терминалы сбора данных, фискальные регистраторы, весы, эквайринговые терминалы;
  • криптография и электронная подпись — обращение к криптопровайдерам и токенам;
  • распознавание и обработка изображений, работа со штрихкодами и QR-кодами на уровне генерации картинок;
  • интеграция с внешними системами через нативные SDK, когда веб-сервисов недостаточно;
  • ускорение вычислений — математика и обработка больших массивов данных на C++ быстрее интерпретируемого кода.

Две технологии создания компонент: Native API и COM

Платформа 1С поддерживает два стандарта внешних компонент, и выбор между ними определяет, где компонента будет работать.

COM (Component Object Model) — технология Microsoft, доступная только в Windows. Компонент регистрируется в системном реестре, и 1С обращается к нему через COM-интерфейс. Так исторически построено большинство старых драйверов оборудования. Ограничение очевидно: на Linux-сервере или веб-клиенте такая компонента не заработает.

Native API — кроссплатформенная технология от фирмы «1С». Компонент компилируется под каждую целевую платформу (Windows, Linux, macOS, разные разрядности) и упаковывается в ZIP-архив вместе с файлом манифеста MANIFEST.XML, где перечислены все варианты библиотек. Платформа сама выбирает подходящую библиотеку при подключении. Native API не требует регистрации в реестре и работает в том числе на сервере 1С и в веб-клиенте (при наличии расширения для браузера).

Native API или COM

Native API

Кроссплатформенность, работа на сервере и в веб-клиенте, упаковка в ZIP с манифестом. Требует реализации интерфейса по спецификации 1С — порог входа выше.

COM

Проще в разработке под Windows, подходит для legacy-драйверов. Только Windows, требует регистрации, не работает на Linux-сервере и в веб-клиенте.

Как устроено подключение компоненты в коде 1С

Подключение выполняется встроенным методом. В тонком и толстом клиенте вызов выглядит так:

Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "Сканер", ТипВнешнейКомпоненты.Native);

Если Результат Тогда

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

КонецЕсли;

Первый параметр — место хранения компоненты: общий макет конфигурации, справочник (в типовых решениях компоненты часто хранятся в справочнике «Внешние компоненты» БСП) или путь к файлу. Второй — символьное имя, под которым компонента регистрируется в сеансе. Далее через конструктор Новый("AddIn.Имя.Объект") создаётся экземпляр объекта компоненты.

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

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

Установка и регистрация на клиентских машинах

Для Native API-компонент в макете установка происходит автоматически: при первом вызове ПодключитьВнешнююКомпоненту платформа извлекает библиотеку из архива в каталог пользователя и загружает её. Права администратора обычно не требуются. Если компонента поставляется отдельным файлом, её нужно положить в каталог, доступный пользователю, и указать полный путь при подключении.

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

bash
regsvr32 "C:\Components\MyDriver.dll"

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

Типичные ошибки при подключении и их диагностика

Ошибка «Не удалось подключить внешнюю компоненту» без деталей — стандартная ситуация. Метод возвращает только Истина/Ложь, поэтому причины приходится искать последовательно. Чаще всего виноваты: отсутствие нужной разрядности библиотеки в ZIP-архиве, ошибки в MANIFEST.XML, заблокированный антивирусом файл DLL, отсутствие зависимых системных библиотек (например, Visual C++ Redistributable) на машине пользователя.

Полезный приём — подключить компоненту в толстом клиенте на машине разработчика, где виден журнал регистрации и можно проверить загрузку библиотеки системными средствами. На Windows зависимости DLL проверяются утилитами просмотра зависимостей; если какой-то системной библиотеки нет, компонента молча не загрузится.

Типичные ошибки
01
COM-компонента на сервере — код работает в файловой базе, но падает после переноса в клиент-серверный вариант
02
Несовпадение разрядности: 32-битная DLL не загрузится в 64-битный клиент 1С
03
Устаревшая копия компоненты в кэше пользователя — после обновления макета помогает очистка каталога кэша платформы
04
Отсутствие MANIFEST.XML или неверные имена файлов в нём — платформа не находит библиотеку под текущую ОС
05
Подключение без проверки результата — ошибка всплывает позже при создании объекта AddIn и маскирует истинную причину

Разработка собственной компоненты: что нужно знать

Для создания Native API-компоненты фирма «1С» публикует заголовочные файлы и примеры шаблона проекта на C++. Компонент реализует фиксированный набор интерфейсов: инициализация, регистрация методов и свойств, обработка вызовов, передача событий в платформу. Данные между 1С и компонентой передаются через специальную структуру variant, поддерживающую типы 1С: число, строка, булево, дата, двоичные данные.

Альтернатива для тех, кто не работает с C++, — обёртки на .NET через COM: класс на C# помечается атрибутами COM-видимости, регистрируется утилитой regasm и подключается из 1С как обычный COM-объект. Это рабочий путь для Windows-инфраструктуры, но с уже названным ограничением — только Windows и только клиент.

Перед началом разработки честно оцените, нужна ли компонента вообще. Часть задач, раньше требовавших ВК, теперь решается штатно: HTTP-запросы, работа с JSON и XML, ZIP-архивы, хеширование и даже работа с некоторым оборудованием доступны прямо из встроенного языка. Компонента оправдана, когда нужен прямой доступ к драйверу, специфическая криптография или производительность нативного кода.

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

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

Нужно подключить сканер, ККТ или весыСначала проверьте готовые драйверы из библиотеки подключаемого оборудования — своя компонента почти никогда не нужна
Код должен работать на сервере под LinuxТолько Native API с Linux-сборкой нужной разрядности в составе ZIP-архива
Решение только для Windows-клиентов и нужна быстрая разработкаПодойдёт COM-компонента на C# с регистрацией через regasm
Задача — обмен данными с внешней системойСначала рассмотрите HTTP и веб-сервисы штатными средствами 1С без компоненты

Проверка работоспособности компоненты

После подключения убедитесь, что компонента не просто загрузилась, а реально выполняет свою функцию. Для драйверов оборудования это тестовый вызов (например, «Тест устройства» в обработках настройки оборудования), для вычислительных компонент — контрольный расчёт с известным результатом.

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

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

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

Истина — компонента загружена

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

Ложь — проверяйте разрядность, манифест, кэш и зависимости DLL

Создание объекта Новый("AddIn...")
Норма

Объект создан, методы доступны

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

Исключение — компонента не зарегистрирована под указанным именем

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

Метод возвращает ожидаемое значение без исключений

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

Ошибка или аварийное завершение клиента — несовместимость версии библиотеки

Работа на целевой платформе (сервер, веб-клиент)
Норма

Компонента подключается везде, где используется код

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

Работает только локально — нет сборки под нужную ОС или не установлено расширение браузера

Итог

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

Внешняя компонента — это бинарная библиотека, расширяющая 1С доступом к оборудованию, ОС и нативному коду. Для новых решений выбирайте Native API: кроссплатформенность и работа на сервере. COM остаётся вариантом только для Windows. Всегда проверяйте результат подключения, разрядность и наличие сборок под все целевые платформы.

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

Чем внешняя компонента отличается от внешней обработки?

Внешняя обработка — это код на встроенном языке 1С в файле .epf, который выполняется внутри платформы и ограничен её возможностями. Внешняя компонента — бинарная библиотека на C++ или другом языке, которая имеет доступ к ОС и оборудованию. Обработка безопаснее и проще, компонента мощнее, но требует компиляции и контроля версий.

Почему ПодключитьВнешнююКомпоненту возвращает Ложь без сообщения об ошибке?

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

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

Да, если это Native API-компонента и в её ZIP-архив включены библиотеки для всех нужных платформ: например, Windows x86/x64 для клиентов и Linux x64 для сервера. Платформа при подключении сама выберет подходящий файл по манифесту. COM-компоненты на сервере работать не будут.

Нужны ли права администратора для установки компоненты?

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

Что делать, если после обновления конфигурации компонента перестала работать?

Наиболее вероятная причина — старая версия библиотеки в кэше платформы на клиентском компьютере. Очистите кэш (каталоги с хешированными именами в профиле пользователя 1С) и перезапустите клиент. Если не помогло, сравните версию компоненты в макете с той, что реально загружается, и проверьте, не изменилось ли имя компоненты в коде подключения.

Безопасно ли подключать сторонние компоненты из интернета?

Риск высокий: компонента выполняется внутри процесса 1С с правами текущего пользователя и имеет доступ к памяти процесса, файлам и сети. Используйте только компоненты от поставщиков оборудования, из состава конфигураций 1С или собственной разработки. Перед внедрением проверяйте компоненту антивирусом и тестируйте на копии базы.