Разработка и Конфигурация · 12 мин
Что такое компонента в 1С и как с ней работать
Что такое внешняя компонента в 1С: назначение, технологии Native API и COM, способы подключения, типичные ошибки загрузки и способы их устранения.
Компонента в 1С — это внешний программный модуль (обычно файл DLL или ZIP-архив), который расширяет возможности платформы функциями, недоступными во встроенном языке. Через компоненты 1С взаимодействует со сканерами штрихкодов, ККТ, эквайринговыми терминалами, весами, а также выполняет специфические вычисления — например, генерацию штрихкодов или работу с криптографией.
Когда пользователь сталкивается с сообщением «Не удалось загрузить внешнюю компоненту» или «Компонента не обнаружена», речь идёт именно об этом механизме: конфигурация пытается обратиться к внешнему модулю, но платформа не может его найти, загрузить или сопоставить с разрядностью клиента. Понимание устройства компонент помогает быстро локализовать проблему и не переустанавливать всю систему.
Ниже разобрано, какие бывают компоненты, как они подключаются в типовых и самописных конфигурациях, почему возникают ошибки и что проверить в первую очередь.
Что именно называют компонентой в 1С
В экосистеме 1С термин используется в нескольких значениях, и их стоит различать. В узком техническом смысле внешняя компонента — это бинарный файл, написанный обычно на C++ или Delphi, который реализует интерфейс взаимодействия с платформой. Платформа загружает его в память и предоставляет встроенному языку новые объекты, методы и свойства.
В широком смысле пользователи называют компонентами любые дополнения: драйверы торгового оборудования, обработки, расширения. Это создаёт путаницу: обработка (файл .epf) — это код на встроенном языке, а компонента — скомпилированный машинный код. Подходы к их установке и диагностике принципиально разные.
Также в терминологии платформы существуют «компоненты» в составе технологической поставки — например, компоненты сервера 1С или веб-сервисов. Это другое значение слова, относящееся к установке самой платформы, а не к расширению функциональности прикладного решения.
Технологии создания: Native API, COM и веб-расширения
Исторически первой технологией был COM: компонента регистрируется в Windows как COM-объект, а 1С обращается к нему через механизм OLE/COM. Этот способ до сих пор встречается в старых драйверах оборудования. Его ограничение — привязка к Windows, необходимость регистрации в реестре и частые конфликты прав доступа.
Современный стандарт — Native API. Компонента поставляется в виде ZIP-архива, содержащего DLL для разных платформ (Windows 32/64, Linux, иногда macOS) и файл манифеста. Платформа сама выбирает подходящую версию под разрядность клиента. Регистрация в системе не требуется, архив можно хранить прямо в конфигурации в виде макета.
Сравнение технологий
Современный стандарт: кроссплатформенность, хранение в конфигурации, не требует регистрации в ОС. Рекомендуется для всех новых разработок.
Только Windows, требует регистрации в реестре (regsvr32), чувствителен к правам пользователя. Подходит для старых драйверов, где альтернативы нет.
Не компонента в техническом смысле, но часто заменяет её, если задачу можно решить на встроенном языке. Проще в сопровождении, но не даёт доступа к оборудованию.
Для браузерного клиента применяются расширения работы с файлами и криптографией — отдельный механизм, поскольку веб-клиент не может напрямую загружать DLL на компьютер пользователя. Если компонента нужна в веб-клиенте, проверяйте, поставляется ли она с версией для браузера.
Где компоненты хранятся и как подключаются
Существует три типовых источника компоненты. Первый — макет конфигурации: ZIP-архив встроен разработчиком в конфигурацию, и типовые решения (например, для печати штрихкодов) подключают его автоматически при первом обращении. Второй — файл в каталоге на диске или сетевом ресурсе, указанный явно. Третий — регистрация COM-объекта в операционной системе.
Во встроенном языке подключение выполняется последовательно: сначала вызывается метод подключения, затем создаётся объект компоненты, и только после успешного создания можно вызывать её методы. Пропуск проверки результата подключения — самая частая причина ошибок в прикладном коде.
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarCode", ТипВнешнейКомпоненты.Native) Тогда
ОбъектКомпоненты = Новый("AddIn.BarCode.Barcode");
Иначе
Сообщить("Компонента не подключена: проверьте разрядность клиента и наличие макета");
КонецЕсли;В типовых конфигурациях подключение обычно уже реализовано в общих модулях, и пользователю достаточно, чтобы компонента была доступна. В файловых базах она загружается на каждом клиентском компьютере локально, в клиент-серверном варианте может выполняться на сервере — это влияет на то, где искать проблему.
Как самостоятельно подключить компоненту
Если компонента поставляется отдельно (например, драйвер оборудования от вендора), порядок действий зависит от её типа. Для Native API достаточно указать путь к ZIP-архиву или поместить его в макет. Для COM потребуется регистрация в системе с правами администратора.
- 1Определите тип компоненты: ZIP с манифестом — Native API, отдельная DLL с инструкцией по регистрации — COM.
- 2Проверьте разрядность вашего клиента 1С (32 или 64 бита) в сведениях о программе или диспетчере задач.
- 3Для Native API: подключите архив методом ПодключитьВнешнююКомпоненту() с указанием пути или макета, проверьте возвращаемое значение.
- 4Для COM: зарегистрируйте DLL командой regsvr32 от имени администратора, используя версию regsvr32 нужной разрядности.
- 5Создайте объект компоненты и вызовите тестовый метод, чтобы убедиться в работоспособности.
- 6Проверьте работу под учётной записью рядового пользователя, а не только администратора.
После подключения обязательно проверьте сценарий в штатном режиме: откройте форму, которая использует компоненту, выполните целевое действие (например, напечатайте этикетку или считайте штрихкод). Успешная загрузка DLL ещё не гарантирует корректной работы её функций.
Типичные ошибки и их причины
Ошибка «Не удалось подключить внешнюю компоненту» почти всегда сводится к одной из нескольких причин: несовпадение разрядности (64-разрядный клиент пытается загрузить 32-разрядную DLL), отсутствие файла по указанному пути, блокировка антивирусом или отсутствие прав на чтение каталога. В клиент-серверном режиме добавляется вариант: компонента есть на клиенте, но код выполняется на сервере, где её нет.
Отдельный случай — работа в браузере. Веб-клиент не загружает произвольные DLL, поэтому компоненты для него должны поставляться разработчиком в специальном формате. Если в тонком клиенте всё работает, а в браузере — нет, причина почти наверняка в этом ограничении, а не в настройках.
Как проверить, что компонента работает корректно
Минимальная проверка — успешное выполнение двух шагов: подключение вернуло «Истина», объект создан без исключения. Далее нужен функциональный тест: вызов реальной операции компоненты. Для штрихкодов — сформировать изображение, для оборудования — выполнить тест связи из интерфейса настройки.
Как проверить результат
Метод вернул Истина, объект создаётся без исключения
Возвращено Ложь или ошибка «Компонента не обнаружена» — проверяйте путь, разрядность, макет
Тестовая операция (печать, сканирование, тест устройства) выполняется и даёт ожидаемый результат
Объект создан, но методы возвращают ошибки — версия компоненты может не совпадать с кодом конфигурации
Компонента работает под учётной записью без прав администратора
Работает только у администратора — проблема с правами на каталог или COM-регистрацией
Компонента доступна на том узле (клиент или сервер), где выполняется код
На клиенте работает, в серверном вызове — нет: компонента не установлена на сервере
Если ошибка воспроизводится только у части пользователей, сравните их окружение: разрядность клиента, версию платформы, антивирусные политики и права. Различия почти всегда находятся в этих четырёх пунктах.
Когда компонента не нужна: альтернативы
Прежде чем искать или разрабатывать компоненту, проверьте, нельзя ли решить задачу штатными средствами. Значительная часть задач интеграции закрывается HTTP-запросами, веб-сервисами, файловым обменом и фоновыми заданиями без единой строчки машинного кода. Расширения конфигурации покрывают доработки логики без снятия с поддержки.
Компонента действительно необходима, когда требуется прямой доступ к оборудованию (USB, COM-порт), высокопроизводительные вычисления или системные API операционной системы. Во всех остальных случаях более простое решение на встроенном языке дешевле в сопровождении и не создаёт проблем с разрядностью и обновлениями.
Как выбрать действие
Частые вопросы
Чем внешняя компонента отличается от внешней обработки?
Обработка (EPF) — это код на встроенном языке 1С, который платформа интерпретирует. Компонента — скомпилированный бинарный модуль, расширяющий саму платформу новыми объектами и функциями. Обработку можно открыть и изменить в конфигураторе, компоненту — только в среде разработки на C++ или аналогичном языке.
Почему после обновления конфигурации перестала работать печать штрихкодов?
Чаще всего на клиенте закэшировалась старая версия компоненты, а конфигурация вызывает новую. Помогает очистка кэша клиентского приложения (удаление базы из списка и повторное добавление или очистка каталога кэша). Если не помогло — проверьте, что макет компоненты в новой версии конфигурации содержит бинарник под разрядность вашего клиента.
Можно ли использовать 32-разрядную компоненту на 64-разрядном клиенте?
Нет, разрядность должна совпадать: 64-разрядный процесс не загружает 32-разрядные DLL. Решения: установить 32-разрядный клиент 1С, найти 64-разрядную версию компоненты или использовать ZIP-сборку Native API, содержащую бинарники для обеих архитектур.
Безопасно ли подключать компоненты, найденные в интернете?
Нет. Компонента выполняется с правами пользователя и имеет доступ к файловой системе, сети и данным сеанса. Используйте только компоненты от производителя оборудования, поставки фирмы «1С» или разработчика, которому вы доверяете, и проверяйте цифровую подпись файла, если она есть.
Компонента работает в тонком клиенте, но не в браузере — в чём причина?
Веб-клиент не может загружать произвольные DLL на компьютер пользователя. Для браузера компонента должна поставляться в специальном формате расширения для браузера, и не все компоненты имеют такую версию. Уточните у поставщика, поддерживается ли веб-клиент, либо перенесите операции с оборудованием на тонкий клиент.
Как узнать, какие компоненты использует конфигурация?
В конфигураторе откройте список макетов и найдите макеты с двоичными данными (обычно ZIP-архивы компонент). Также поищите в коде вызовы ПодключитьВнешнююКомпоненту — по ним видно, какие компоненты и в каких сценариях подключаются.
Что важно запомнить
Компонента в 1С — это внешний бинарный модуль (Native API или COM), расширяющий платформу функциями вроде работы с оборудованием. Подключайте её с проверкой результата, следите за совпадением разрядности клиента и бинарника, используйте компоненты только из доверенных источников, а перед обновлением проверяйте работу на тестовой копии.