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

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

Addin в 1С: что это и как работать с внешними компонентами

Addin в 1С — внешняя компонента для расширения функций платформы. Разбираем, что это, зачем нужна, как установить, подключить и устранить типичные ошибки.

Addin в контексте 1С — это внешняя компонента (от англ. add-in, «надстройка»), которая расширяет штатные возможности платформы. Сама платформа 1С написана на встроенном языке и не умеет напрямую работать, например, со сканерами штрихкодов, криптографией, специфическими протоколами обмена или отрисовкой QR-кодов. Внешняя компонента закрывает этот пробел: она написана на C++, C# или другом компилируемом языке и подключается к 1С как динамическая библиотека.

Чаще всего с addin пользователь сталкивается не целенаправленно, а по ошибке: программа выводит сообщение «Не удалось загрузить внешнюю компоненту» или «Объект AddIn не найден». Это значит, что конфигурация пытается использовать компоненту, которой нет на компьютере, либо она не зарегистрирована в системе. Понимание того, как устроен механизм, позволяет быстро устранить проблему без вызова специалиста.

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

Что такое внешняя компонента и как она устроена

Технически addin — это динамическая библиотека, реализующая определённый интерфейс взаимодействия с платформой. Современные компоненты разрабатываются по технологии Native API: один и тот же исходный код можно собрать под Windows, Linux и даже под мобильные платформы. Более старые компоненты используют COM-модель и работают только в Windows.

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

Зачем нужны addin: типовые сценарии

Практических сценариев, где без внешней компоненты не обойтись, немало. Наиболее распространённые:

  • Работа с торговым оборудованием: сканеры штрихкодов, принтеры этикеток, весы — через драйверы, реализованные как компоненты.
  • Генерация и печать штрихкодов и QR-кодов (известная компонента печати двумерных кодов).
  • Криптографические операции, электронная подпись, работа с криптопровайдерами.
  • Интеграция с внешними системами по специфическим протоколам, которые сложно реализовать на встроенном языке.
  • Защита конфигураций: некоторые поставщики выносят критичную логику в компоненту, чтобы её нельзя было прочитать.

Если задача решается штатными средствами платформы — HTTP-запросами, веб-сервисами, расширением конфигурации — внешнюю компоненту лучше не вводить. Каждая компонента — это дополнительная зависимость: её нужно обновлять, тестировать на новых релизах платформы и следить за совместимостью разрядности.

Как подключить addin в 1С

В типовых конфигурациях компоненты обычно уже встроены в состав поставки и хранятся в макетах или справочнике внешних компонент (в решениях на базе БСП). Платформа подключает их автоматически при первом обращении. В собственной разработке подключение выполняется программно.

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

Пример программного подключения из макета:

Результат = ПодключитьВнешнююКомпоненту(

"ОбщийМакет.КомпонентаПечати", "BarCode",

ТипВнешнейКомпоненты.Native);

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

Компонента = Новый("AddIn.BarCode.Barcode");

КонецЕсли;

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

Разрядность, клиенты и ограничения

Самая частая причина неработающего addin — несовпадение разрядности. 64-разрядный клиент 1С не загрузит 32-разрядную DLL, и наоборот. Если компонента поставляется только в 32-битной сборке, а у пользователей 64-битный клиент, вариантов два: найти 64-битную версию компоненты или выполнять обращение к ней на сервере с подходящей разрядностью.

Второе ограничение — тип клиента. COM-компоненты работают только в Windows и не поддерживаются веб-клиентом. Native API компоненты могут работать в веб-клиенте, но для этого должны быть собраны под соответствующую технологию и упакованы в архив с манифестом. Перед внедрением проверьте, на каких клиентах реально будут работать пользователи.

Типичные ошибки и их устранение

Сообщение «Не удалось подключить внешнюю компоненту» имеет ограниченный набор причин, и их можно проверить последовательно. Сначала убедитесь, что файл физически существует и доступен для чтения. Затем проверьте разрядность и тип компоненты. Для COM-компонент — успешна ли регистрация через regsvr32, запущенную от имени администратора.

Если компонента подключается, но объект не создаётся (ошибка при вызове конструктора AddIn), проблема обычно в несовпадении программного имени. Имя объекта задаётся разработчиком компоненты и должно точно совпадать с тем, что указано в коде, включая регистр и префикс.

Типичные ошибки
01
Регистрация 32-битной DLL для 64-битного клиента — компонента не загружается без внятного описания причины.
02
Вызов ПодключитьВнешнююКомпоненту на сервере, когда файл лежит только на клиентском компьютере, — путь недоступен.
03
Игнорирование возвращаемого значения подключения — код падает позже на создании объекта, и истинная причина теряется.
04
Обновление платформы без проверки совместимости компоненты — старая сборка может перестать загружаться на новом релизе.
Контрольные точки

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

Подключение компоненты
Норма

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

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

Возвращает Ложь или вызывает исключение — проверяйте путь, разрядность, регистрацию

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

Конструктор AddIn возвращает объект, доступны его свойства

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

Ошибка «объект не найден» — неверное программное имя

Работа методов
Норма

Методы компоненты выполняются и возвращают ожидаемые данные

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

Ошибки времени выполнения — несовместимость версии компоненты и платформы

Альтернативы внешним компонентам

Прежде чем вводить addin в проект, оцените альтернативы. Расширение конфигурации покрывает большинство задач доработки прикладной логики без бинарных зависимостей. HTTP-сервисы и веб-сервисы позволяют вынести «тяжёлую» логику во внешнее приложение и общаться с ним по сети — это проще сопровождать, чем компоненту на каждом рабочем месте.

Для печати штрихкодов в современных релизах типовых конфигураций часто достаточно штатных механизмов и компонент, уже включённых в поставку. COM-соединение с другими приложениями (например, для выгрузки в офисные пакеты) тоже не требует разработки собственной компоненты.

Сравнение вариантов

Внешняя компонента (addin)

Подходит для оборудования, криптографии, низкоуровневых задач. Ограничение: зависимость от разрядности, ОС и версии платформы.

Расширение конфигурации

Подходит для доработки прикладной логики без снятия с поддержки. Не умеет работать с бинарными библиотеками и оборудованием.

Внешний сервис по HTTP

Подходит для сложных вычислений и интеграций. Требует сетевой доступности сервиса и отдельного сопровождения.

FAQ: частые вопросы про addin в 1С

Чем addin отличается от расширения конфигурации?

Addin — это бинарная библиотека (DLL или архив с манифестом), добавляющая платформе новые объекты и методы. Расширение конфигурации — надстройка над прикладным решением на встроенном языке 1С без бинарных файлов. Первый расширяет платформу, второе — конкретную конфигурацию.

Что делать при ошибке «Не удалось загрузить внешнюю компоненту»?

Проверьте по порядку: существует ли файл и доступен ли он для чтения, совпадает ли разрядность компоненты с разрядностью клиента 1С, зарегистрирована ли COM-компонента через regsvr32 от имени администратора, не блокирует ли файл антивирус. Чаще всего причина — несовпадение разрядности.

Можно ли использовать addin в веб-клиенте?

COM-компоненты — нет, они работают только в Windows-клиентах. Компоненты по технологии Native API могут работать в веб-клиенте, если собраны для этого и упакованы в архив с манифестом. Конкретную поддержку нужно уточнять в документации поставщика компоненты.

Безопасно ли устанавливать сторонние внешние компоненты?

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

Нужно ли обновлять компоненту при обновлении платформы?

Не всегда, но проверять совместимость обязательно. После обновления платформы протестируйте подключение и работу компоненты на тестовой базе. Если разработчик выпустил новую сборку под актуальную версию платформы, лучше обновиться до неё.

Итог

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

Addin в 1С — внешняя бинарная компонента для задач, недоступных встроенному языку: оборудование, штрихкоды, криптография. Ключевые правила: совпадение разрядности с клиентом, проверка возвращаемого значения при подключении, установка только из доверенных источников. Если задачу можно решить расширением конфигурации или внешним сервисом — предпочтите их, чтобы не тащить бинарную зависимость.