Как подключить Bluetooth-сканер штрихкодов к мобильному приложению 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция внешнего торгового оборудования с мобильной платформой 1С — задача, требующая понимания не только встроенного языка, но и особенностей операционной системы Android, протоколов передачи данных Bluetooth и механизмов работы внешних компонент. В этой статье мы подробно разберем, как обеспечить стабильную работу BT-сканера в мобильном приложении, какие режимы работы существуют и с какими подводными камнями можно столкнуться при разработке.

Выбор режима работы сканера: HID против SPP

Перед тем как приступать к написанию кода, мы должны определить, в каком режиме будет работать наш сканер. Большинство современных Bluetooth-устройств поддерживают два основных профиля:

  1. HID (Human Interface Device): В этом режиме сканер эмулирует обычную Bluetooth-клавиатуру. При считывании штрихкода данные просто "печатаются" в то поле, где сейчас находится фокус ввода. Плюсы: не требуется написание сложного кода или внешних компонент. Минусы: невозможно отличить ввод со сканера от ручного ввода клавиатурой, необходимо постоянно держать фокус в текстовом поле, возникают проблемы при необходимости программной обработки данных до их появления на экране.
  2. SPP (Serial Port Profile): Сканер работает как виртуальный последовательный COM-порт. Именно этот режим позволяет реализовать полноценную работу через Native API 1С. Плюсы: данные приходят в систему в виде внешнего события, приложение может "слушать" сканер в фоновом режиме, не требуя фокуса на конкретном поле. Минусы: требуется внешняя компонента или использование мобильной БПО.

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

Использование Мобильной библиотеки подключаемого оборудования (БПО)

Рассмотрим наиболее рациональный путь — использование типовых механизмов 1С. Фирма 1С предоставляет специальную версию Библиотеки подключаемого оборудования для мобильных устройств. Она содержит готовую внешнюю компоненту AddIn.MobileDevice, которая инкапсулирует в себе всю сложность работы с Java и Bluetooth-стеком Android.

Проанализируем шаги по подключению через БПО:

  1. Внедрите макет с компонентой в вашу конфигурацию.
  2. Используйте метод для поиска доступных устройств. Программа должна просканировать эфир и найти MAC-адрес вашего сканера.
  3. Вызовите метод подключения. Система создаст канал связи и будет транслировать считанные штрихкоды в процедуру ОбработкаВнешнегоСобытия.

Хотя некоторые разработчики считают мобильную БПО избыточной, она избавляет от необходимости самостоятельно обрабатывать нюансы подключения на разных версиях Android.

Реализация через Native API и Java-модуль

Если вам требуется уникальная логика или минимальный размер приложения, разберем создание собственной компоненты Native API. Основная работа здесь происходит на стороне Java. Для работы в режиме SPP используется стандартный идентификатор UUID для последовательного порта:


// Стандартный UUID для Bluetooth SPP
private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

Проанализируем ситуацию с правами доступа. Начиная с Android 10, операционная система требует разрешения на доступ к местоположению для поиска Bluetooth-устройств. В Android 12 и выше появились специализированные разрешения, которые необходимо явно запрашивать у пользователя:

В коде 1С работа с такой компонентой выглядит следующим образом. Сначала мы должны загрузить и подключить библиотеку:


&НаКлиенте
Процедура ПодключитьСканер()
    Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканера", "ScannerLib", ТипВнешнейКомпоненты.Native);
    Если Результат Тогда
        ОбъектСканер = Новый("AddIn.ScannerLib.BTScanner");
        ОбъектСканер.УстановитьПараметр("MACAddress", "00:11:22:33:44:55");
        ОбъектСканер.Подключить();
    КонецЕсли;
КонецПроцедуры

После успешного подключения данные от сканера будут поступать в модуль приложения или формы:


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Источник = "BTScanner" И Событие = "Barcode" Тогда
        Сообщить("Считан штрихкод: " + Данные);
        // Обработка штрихкода
    КонецЕсли;
КонецПроцедуры

Особенности работы: Публикация против APK

Выясним важную причину, по которой оборудование часто отказывается работать в режиме отладки. Когда вы запускаете приложение через стандартную мобильную платформу 1С (желтая иконка), подключаясь к опубликованной базе на сервере (через http), вы ограничены правами доступа самой платформы.

Важный нюанс: внешние компоненты (бинарные файлы .so или .jar) должны быть физически установлены в памяти устройства. В режиме "загрузки из публикации" (мобильный клиент или запуск через платформу) Android часто блокирует динамическую загрузку исполняемого кода из соображений безопасности.

Рассмотрим решение: для стабильной работы со сканером необходимо использовать "Сборщик мобильных приложений" и создавать собственный APK-файл. При сборке компонента включается непосредственно в пакет приложения, получает все необходимые привилегии в манифесте AndroidManifest.xml и корректно инициализируется при запуске.

Альтернативный метод: Использование Intent (для ТСД)

Если ваша задача — подключить сканер, встроенный в промышленный терминал сбора данных (ТСД), то вместо Bluetooth-соединения лучше использовать механизм Android Intent. В этом случае системная служба сканера самого ТСД считывает код и рассылает широковещательное сообщение по всей системе.

В настройках ТСД (раздел Scanner или DataWedge) выберите метод передачи Intent Broadcast. В 1С вам останется только "подписаться" на это событие. Это самый надежный метод, так как он не зависит от стабильности Bluetooth-канала и энергосберегающих функций смартфона, которые могут "усыплять" ваше соединение в фоновом режиме.

Рекомендации по отказоустойчивости

Проанализируем проблему обрыва связи. Bluetooth — среда нестабильная. Мы рекомендуем реализовать в коде компоненты или мобильного приложения механизм автоматического переподключения (Reconnection). Если метод ExternalEvent сообщает об ошибке связи, система должна инициировать попытку повторного соединения через определенные интервалы времени, чтобы пользователю не приходилось перезаходить в приложение после каждого выхода сканера из зоны действия.

Подводя итог: для быстрой реализации используйте БПО и обязательно собирайте собственный APK. Если же вы разрабатываете решение "с нуля", уделите особое внимание правам доступа в манифесте Android и обработке жизненного цикла Bluetooth-соединения.

← На главную