Разработка и Конфигурация · 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
Кроссплатформенность, работа на сервере и в веб-клиенте, упаковка в ZIP с манифестом. Требует реализации интерфейса по спецификации 1С — порог входа выше.
Проще в разработке под Windows, подходит для legacy-драйверов. Только Windows, требует регистрации, не работает на Linux-сервере и в веб-клиенте.
Как устроено подключение компоненты в коде 1С
Подключение выполняется встроенным методом. В тонком и толстом клиенте вызов выглядит так:
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "Сканер", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
Драйвер = Новый("AddIn.Сканер.BarcodeReader");
КонецЕсли;
Первый параметр — место хранения компоненты: общий макет конфигурации, справочник (в типовых решениях компоненты часто хранятся в справочнике «Внешние компоненты» БСП) или путь к файлу. Второй — символьное имя, под которым компонента регистрируется в сеансе. Далее через конструктор Новый("AddIn.Имя.Объект") создаётся экземпляр объекта компоненты.
На сервере 1С подключение делается тем же методом, но компонента должна быть Native API и иметь Linux-сборку, если сервер работает под Linux. COM-компоненту на сервере подключить нельзя — это одна из самых частых причин «внезапно переставшего работать» обмена после переноса кода с клиента на сервер.
- 1Добавьте ZIP-архив компоненты в общий макет или справочник конфигурации
- 2Вызовите ПодключитьВнешнююКомпоненту() с указанием места хранения и имени
- 3Проверьте возвращаемое значение — Истина означает успешное подключение
- 4Создайте объект через Новый("AddIn.Имя.ТипОбъекта")
- 5Вызовите тестовый метод компоненты и убедитесь, что он возвращает ожидаемый результат
Установка и регистрация на клиентских машинах
Для Native API-компонент в макете установка происходит автоматически: при первом вызове ПодключитьВнешнююКомпоненту платформа извлекает библиотеку из архива в каталог пользователя и загружает её. Права администратора обычно не требуются. Если компонента поставляется отдельным файлом, её нужно положить в каталог, доступный пользователю, и указать полный путь при подключении.
COM-компоненты требуют регистрации в Windows командой regsvr32 с правами администратора. Разрядность критична: 32-битная DLL регистрируется через regsvr32 из SysWOW64, 64-битная — из System32, и разрядность компоненты должна совпадать с разрядностью клиентского приложения 1С.
regsvr32 "C:\Components\MyDriver.dll"В веб-клиенте ситуация сложнее: браузер не может загружать произвольные библиотеки, поэтому для работы внешних компонент требуется установка расширения для работы с файлами и внешними компонентами 1С. Без него вызов ПодключитьВнешнююКомпоненту вернёт Ложь.
Типичные ошибки при подключении и их диагностика
Ошибка «Не удалось подключить внешнюю компоненту» без деталей — стандартная ситуация. Метод возвращает только Истина/Ложь, поэтому причины приходится искать последовательно. Чаще всего виноваты: отсутствие нужной разрядности библиотеки в ZIP-архиве, ошибки в MANIFEST.XML, заблокированный антивирусом файл DLL, отсутствие зависимых системных библиотек (например, Visual C++ Redistributable) на машине пользователя.
Полезный приём — подключить компоненту в толстом клиенте на машине разработчика, где виден журнал регистрации и можно проверить загрузку библиотеки системными средствами. На Windows зависимости DLL проверяются утилитами просмотра зависимостей; если какой-то системной библиотеки нет, компонента молча не загрузится.
Разработка собственной компоненты: что нужно знать
Для создания Native API-компоненты фирма «1С» публикует заголовочные файлы и примеры шаблона проекта на C++. Компонент реализует фиксированный набор интерфейсов: инициализация, регистрация методов и свойств, обработка вызовов, передача событий в платформу. Данные между 1С и компонентой передаются через специальную структуру variant, поддерживающую типы 1С: число, строка, булево, дата, двоичные данные.
Альтернатива для тех, кто не работает с C++, — обёртки на .NET через COM: класс на C# помечается атрибутами COM-видимости, регистрируется утилитой regasm и подключается из 1С как обычный COM-объект. Это рабочий путь для Windows-инфраструктуры, но с уже названным ограничением — только Windows и только клиент.
Перед началом разработки честно оцените, нужна ли компонента вообще. Часть задач, раньше требовавших ВК, теперь решается штатно: HTTP-запросы, работа с JSON и XML, ZIP-архивы, хеширование и даже работа с некоторым оборудованием доступны прямо из встроенного языка. Компонента оправдана, когда нужен прямой доступ к драйверу, специфическая криптография или производительность нативного кода.
Как выбрать действие
Проверка работоспособности компоненты
После подключения убедитесь, что компонента не просто загрузилась, а реально выполняет свою функцию. Для драйверов оборудования это тестовый вызов (например, «Тест устройства» в обработках настройки оборудования), для вычислительных компонент — контрольный расчёт с известным результатом.
Как проверить результат
Истина — компонента загружена
Ложь — проверяйте разрядность, манифест, кэш и зависимости DLL
Объект создан, методы доступны
Исключение — компонента не зарегистрирована под указанным именем
Метод возвращает ожидаемое значение без исключений
Ошибка или аварийное завершение клиента — несовместимость версии библиотеки
Компонента подключается везде, где используется код
Работает только локально — нет сборки под нужную ОС или не установлено расширение браузера
Что важно запомнить
Внешняя компонента — это бинарная библиотека, расширяющая 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С или собственной разработки. Перед внедрением проверяйте компоненту антивирусом и тестируйте на копии базы.