Найти в Дзене
DmitrievLab

Внешние компоненты

Внешние компоненты предоставляют разработчику методы и объекты подключаемой динамической библиотеки, расширяя функционал платформы. Это позволяет программно взаимодействовать с торговым оборудованием и фискальными регистраторами, использовать криптографические библиотеки для электронной подписи, шифрования и работы с сертификатами, работать с изображениями и операционной системой. Кроме того, они используются для сложных вычислительных задач, требующих высокой производительности. Например, при сканировании штрихкода подключённый прайс-чекер передаёт считанные данные , а платформа 1С обрабатывает событие сканирования, вызывая метод компоненты, выводящий на экран стоимость товара. Внешняя компонента - это динамическая библиотека(DLL), реализующая интерфейсы взаимодействия с платформой 1С. Она подключается во время выполнения, и предоставляет методы, свойства и события, доступные из встроенного языка. Благодаря этому платформа может обращаться к функционалу, реализованному на других язы
Оглавление

Зачем нужны внешние компоненты

Внешние компоненты предоставляют разработчику методы и объекты подключаемой динамической библиотеки, расширяя функционал платформы. Это позволяет программно взаимодействовать с торговым оборудованием и фискальными регистраторами, использовать криптографические библиотеки для электронной подписи, шифрования и работы с сертификатами, работать с изображениями и операционной системой. Кроме того, они используются для сложных вычислительных задач, требующих высокой производительности.

Например, при сканировании штрихкода подключённый прайс-чекер передаёт считанные данные , а платформа 1С обрабатывает событие сканирования, вызывая метод компоненты, выводящий на экран стоимость товара.

-2

Что это такое

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

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

Объект внешней компоненты может представлять собой, например подключенное устройство, криптографический модуль, сетевой клиент. Компонента инициализирует свои объекты, осуществляет обработку вызовов от платформы и возврат результата выполнения.

-3

Архитектура внешней компоненты

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

Первым этапом жизненного цикла компоненты является загрузка в память. Поиск осуществляется по имени(например, "AddIn.Scanner"), или идентификатору в реестре. После загрузки 1С создает экземпляр компоненты и инициализирует её интерфейсы, производится проверка доступности необходимых ресурсов. Затем производится регистрация компоненты - платформа запрашивает доступные методы, свойства и события библиотеки.

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

При завершении работы библиотека освобождает занятые ресурсы, закрывает соединения и очищает память, это важно для предотвращения утечек памяти.

-4

Разработка внешней компоненты

Разработка внешней компоненты - это разработка динамической библиотеки(.dll), взаимодействующей с платформой 1С:Предприятие. Задача разработчика заключается в реализации интерфейсов, ожидаемых платформой, и обеспечением совместимости с ОС. Компонента должна корректно обрабатывать вызовы платформы, предоставлять свои методы и свойства, управлять выделением памяти.
Основой разработки служит Native API - набор интерфейсов и соглашений, определяющих взаимодействие платформы с библиотекой. 1С предоставляет "Технология создания внешних компонент", содержащий примеры реализации внешних компонент, которые удобно использовать в качестве шаблона для быстрого создания проекта.

-5

Интерфейс IComponentBase - основа компоненты. При загрузке платформа создает экземпляр класса, реализующий этот интерфейс, и последовательно вызывает его методы:

Метод Init инициализирует компоненту и передает указатель на интерфейс IAddInDefBase, через который происходит взаимодействие с платформой. Через этот интерфейс можно передавать, например, внешние события, ошибки, а так же изменять строку состояния, работать с менеджером памяти

Метод GetInfo возвращает версию библиотеки, используется для проверки совместимости

Метод RegisterExtentionAs возвращает имя компоненты, которое будет использоваться для обращения из языка 1С, например "AddIn.Scanner"

Методы GetPropName и GetMethodName используются для получения имен свойств и методов для вызова из платформы, а CallAsProc и CallAsFunc для обработки вызова

Последним всегда вызывается метод Done, который освобождает память и обрабатывает завершение работы - например, закрывает драйвер сканера или соединение с СУБД

Использование во внешней обработке

Данный пример показывает применение внешней компоненты во внешней обработке на примере драйвера прайс-чекера.

При открытии формы обработки выполняется подключение внешней компоненты по её идентификатору. Идентификаторы после регистрации утилитой regsvr хранятся в реестре в ветке HKEY_CLASSES_ROOT.

При успешном подключении по тому же идентификатору создается объект компоненты, выполняется соединение с физическим оборудованием и открытие порта сервера, сохраненного в его параметрах. Так же возможно программно установить свойства, отвечающие за настройку устройства, например, скорость считывания сканирования или таймаут ответа.

Компонента прайс-чекера генерирует события, которые обрабатываются процедурой ВнешнееСобытие в модуле формы или ОбработкаВнешнегоСобытия в модуле приложения.

Параметр Источник содержит имя компоненты, Событие - идентификатор клиента, а Данные - результат сканирования.
Параметр Источник содержит имя компоненты, Событие - идентификатор клиента, а Данные - результат сканирования.

Так как одновременно может быть подключено несколько устройств, размещенных в разных местах, необходимо идентифицировать их по IP. Для этого задается значение SenderId, и вызывается метод, получающий параметры клиента, который устанавливает свойство SenderIP. Таким образом для разных торговых точек будет отображаться актуальные цены. Полученные данные отправляются методом SendAnswer, использующем SenderId для адресации.

Заключение

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