Как установить и подключить внешнюю компоненту в 1С
Содержание
Внешняя компонента (ВК) — это подключаемый к платформе 1С двоичный модуль, чаще всего DLL, который умеет то, чего не умеет язык 1С: работать с оборудованием, шифровать, разбирать нестандартные форматы. Установка внешней компоненты
1С сводится к трём действиям: положить файл в нужное место, зарегистрировать его для платформы и подключить из кода командой ПодключитьВнешнююКомпоненту.
Путь зависит от технологии. Native API ставится средствами самой платформы, без прав администратора. COM-компонента регистрируется в Windows и требует прав. Дальше — как отличить одно от другого и что сделать, чтобы всё заработало с первого раза.
Из чего состоит внешняя компонента
ВК распространяется в одном из двух видов:
- 📦 ZIP-архив с файлом
MANIFEST.XMLи одной или несколькими библиотеками под разные системы. Это формат Native API. - 🔧 Отдельная DLL или EXE, которую нужно регистрировать в системе. Так устроены COM-компоненты.
В архиве Native API манифест описывает, какая библиотека для какой ОС и какой разрядности. Платформа сама выбирает подходящую. Пример манифеста:
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">
<component os="Windows" path="Scanner32.dll" type="native" arch="i386"/>
<component os="Windows" path="Scanner64.dll" type="native" arch="x86_64"/>
<component os="Linux" path="libScanner.so" type="native" arch="x86_64"/>
</bundle>
Один архив обслуживает и 32-, и 64-разрядный клиент, и Windows с Linux. COM-компонента так не умеет: под каждую разрядность нужна своя регистрация.
Какие бывают внешние компоненты
| Технология | Где работает | Установка | Права администратора |
|---|---|---|---|
| Native API | Windows, Linux, macOS, тонкий и веб-клиент | Средствами платформы | Не нужны |
| COM | Только Windows, толстый и тонкий клиент | regsvr32 или установщик | Нужны |
Для чего их используют на практике:
- 🖨 фискальные регистраторы, сканеры штрихкодов, весы, эквайринг;
- 🔐 криптография и электронная подпись;
- 📄 разбор PDF, сжатие, нестандартные форматы обмена;
- 🌐 сетевые протоколы, которых нет в платформе;
- ⚡ тяжёлые вычисления, где встроенный язык слишком медленный.
Если у разработчика есть выбор, он берёт Native API. Он работает в браузере, не зависит от разрядности Windows и не требует регистрации в реестре.
Чем внешняя компонента отличается от внешней обработки
Путают их постоянно, хотя это разные вещи.
| Внешняя обработка | Внешняя компонента | |
|---|---|---|
| Что внутри | Код на языке 1С и формы | Скомпилированный машинный код |
| Формат | .epf, .erf | .dll, .so или ZIP с манифестом |
| Подключается | Через меню «Файл → Открыть» или справочник БСП | Из кода: ПодключитьВнешнююКомпоненту |
| Риск | Ограничен возможностями платформы | Доступ ко всей системе, как у любой программы |
Обработка работает внутри песочницы 1С. Компонента песочницы не имеет: это обычная библиотека с теми же правами, что у пользователя, запустившего клиент. Отсюда и разница в требованиях к безопасности.
От расширений конфигурации (.cfe) ВК тоже отличается: расширение меняет логику конфигурации, а компонента добавляет новые возможности платформе.
Где хранить компоненту
Есть три распространённых варианта.
- Общий макет конфигурации. Файл лежит внутри конфигурации как двоичные данные. Удобно: обновляется вместе с базой, версии не расходятся.
- Справочник в базе. В типовых конфигурациях на БСП для этого есть отдельный справочник внешних компонент. Найти раздел проще всего через поиск по форме: слово «компонент».
- Файл на диске или по ссылке. Подходит для проверки и отладки, для работы — неудобно.
Не кладите ВК в общую папку «для всех» без контроля версий. Через месяц у половины пользователей окажется старая библиотека, а у половины новая, и баг будет «плавающим».
Подключение внешней компоненты из кода
Базовый вариант для компоненты, лежащей в общем макете:
Подключена = ПодключитьВнешнююКомпоненту(
"ОбщийМакет.КомпонентаСканера",
"Scanner",
ТипВнешнейКомпоненты.Native);
Если Подключена Тогда
Сканер = Новый("AddIn.Scanner.ScannerObject");
Иначе
// сообщить пользователю, что компонента не загрузилась
КонецЕсли;
Три параметра: место хранения, любое уникальное имя (символьный идентификатор) и тип технологии. Имя классу AddIn.<идентификатор>.<имя класса> задаёт сам разработчик компоненты, оно указано в её документации.
Если компонента ещё не установлена на компьютере, сначала вызывают установку. В актуальных платформах вместо синхронных вызовов принято использовать асинхронные: НачатьУстановкуВнешнейКомпоненты и ПодключитьВнешнююКомпонентуАсинх. Они не «замораживают» окно и корректно работают в веб-клиенте.
В веб-клиенте установка требует расширения браузера для 1С и подтверждения пользователя. Автоматически, «тихо», ВК в браузере не ставится.
Установка внешней компоненты по шагам
Native API (ZIP-архив)
- Получите архив у разработчика оборудования или программы. Проверьте, что в нём есть
MANIFEST.XML. - Загрузите архив в базу: в общий макет конфигуратором или в справочник компонент через интерфейс.
- Запустите функцию, которая вызывает
ПодключитьВнешнююКомпоненту. Платформа спросит подтверждение при первой установке. - Нажмите «Установить». Платформа распакует библиотеку в профиль пользователя, обычно это каталог внутри
%APPDATA%\1C\1cv8\ExtCompT. - Повторите проверку: теперь подключение проходит без вопросов.
Устанавливается компонента на каждом рабочем месте отдельно. Если в базе работают 30 человек с кассами, диалог увидят все 30, один раз каждый.
COM-компонента
- Скопируйте DLL в постоянную папку, например
C:\Program Files\Vendor\Scanner\. Не оставляйте её в «Загрузках». - Откройте командную строку от имени администратора.
- Зарегистрируйте библиотеку:
regsvr32 "C:\Program Files\Vendor\Scanner\Scanner.dll"
- Дождитесь сообщения об успешной регистрации.
- Для 32-разрядной DLL на 64-разрядной Windows используйте
regsvr32из каталогаC:\Windows\SysWOW64. Обычныйregsvr32изSystem32ставит только 64-разрядные библиотеки.
Подключение из кода — через Новый COMОбъект("Scanner.Application"). Либо, если компонента подключается как внешняя, через ПодключитьВнешнююКомпоненту с типом COM.
Безопасность: чему верить, а чему нет
Компонента исполняет произвольный машинный код. Один недобросовестный файл способен прочитать документы пользователя, поэтому подход такой:
- ✅ берите ВК только у производителя оборудования или проверенного разработчика;
- ✅ сверяйте контрольную сумму файла, если поставщик её публикует;
- ✅ проверяйте цифровую подпись DLL в свойствах файла (вкладка «Цифровые подписи»);
- ❌ не ставьте компоненты из чатов, с файлообменников и «подправленные» версии.
В серверных базах пользователь не должен получать право устанавливать компоненты произвольно. В конфигурациях на БСП запуск ВК из недоверенного источника проходит через безопасный режим. Права на установку выдаёт администратор отдельной ролью.
Компонента не хранится «в базе безопасно». Она запускается в процессе клиента (или сервера, если её вызывают серверным кодом) и работает с правами этого процесса. Потому серверное подключение допустимо лишь для проверенных библиотек.
Типичные ошибки при подключении
Сообщения платформы бывают разными, но причин немного.
Кроме перечисленного, полезно проверить три вещи:
- 📁 Права на каталог. Если профиль пользователя перенаправлен или закрыт групповой политикой, платформа не распакует файл.
- 🛡 Антивирус. Он часто срабатывает на неизвестные DLL. Добавьте каталог компонент в исключения.
- 🔄 Кеш. Если вы заменили ВК на новую версию, а платформа берёт старую, закройте все клиенты и удалите содержимое каталога
ExtCompTдля этой компоненты. Остальные кеши платформы чистить не нужно.
Перед удалением файлов из профиля убедитесь, что клиент 1С закрыт на всех сеансах пользователя, иначе файлы окажутся заняты.
Обновление и версии
Компонента обновляется отдельно от платформы и конфигурации. Если вы обновили ВК в общем макете, пользователям нужно получить её заново. Платформа сверяет версии не всегда, поэтому надёжный путь такой:
- меняйте идентификатор подключения при несовместимых изменениях, например
Scanner2; - храните номер версии компоненты рядом с файлом (в названии макета или реквизите справочника);
- после обновления проверяйте работу на одном рабочем месте, а потом раскатывайте на остальные.
Как добавить компоненту в общий макет
Если вы администратор или разработчик конфигурации, порядок такой:
- Откройте конфигурацию в Конфигураторе. В дереве найдите ветку «Общие → Общие макеты».
- Создайте новый макет, тип — «Двоичные данные». Имя дайте понятное, например
КомпонентаСканера. - Загрузите ZIP-архив в макет командой «Загрузить из файла».
- Сохраните конфигурацию и обновите конфигурацию базы данных.
- В коде обращайтесь к макету строкой
ОбщийМакет.КомпонентаСканера.
Если конфигурация на поддержке, изменение общего макета отключит объект от обновлений поставщика. Для типовых баз удобнее хранить компоненту в справочнике, а не править конфигурацию. Либо вынести подключение в расширение конфигурации, не трогая типовой код.
Размер ZIP-архива обычно невелик: от сотен килобайт до нескольких мегабайт. Базу такой макет почти не раздувает, а вот частая замена версий засоряет историю хранилища.
Что выбрать для нового проекта
Если вы сами заказываете или пишете компоненту, ориентируйтесь на задачу:
- 🌐 нужен веб-клиент или Linux — только Native API;
- 🖥 всё работает на одном Windows-сервере терминалов, а оборудование поставляет COM-драйвер — оставьте COM, не переписывайте без нужды;
- 🔁 нужна работа без блокировки интерфейса — выбирайте асинхронные методы подключения;
- 🧪 нужна быстрая проверка идеи — сначала сделайте прототип на языке 1С и только потом уходите в нативный код.
Как узнать, что компонента подключена
Простая проверка в консоли кода или в отладчике: после вызова ПодключитьВнешнююКомпоненту возвращается Истина, а Новый("AddIn.…") не падает с исключением. Если возвращается Ложь, причину платформа сама не пишет, поэтому обрабатывайте это в коде и сообщайте пользователю понятный текст.
Полезный приём при отладке: оберните вызов в Попытка … Исключение, а в тексте исключения выводите ОписаниеОшибки(). Там обычно видно, что не так: «файл не найден», «неверный формат», «компонента несовместима с платформой».
Частые вопросы
Нужны ли права администратора для установки внешней компоненты?
Работают ли внешние компоненты в Linux и в браузере?
Можно ли использовать 32-разрядную компоненту в 64-разрядном клиенте?
Где платформа хранит установленные компоненты?
%APPDATA%\1C\1cv8\ExtCompT. Для каждого пользователя Windows — свой набор.