Разработка мобильного приложения для терминалов сбора данных (ТСД) с поддержкой RFID — задача нетривиальная, так как стандартная «Библиотека подключаемого оборудования» (БПО) для мобильных платформ поддерживает лишь ограниченный перечень устройств. В этой статье мы разберем, как интегрировать чтение RFID-меток в мобильное приложение 1С, используя различные подходы: от штатных средств БПО до низкоуровневого взаимодействия через Android Intents.
Прежде чем приступать к написанию собственного кода, проанализируем возможности стандартной поставки БПО для мобильных платформ. 1С заявляет поддержку RFID-считывателей, но зачастую она ограничена устройствами, работающими по протоколу Bluetooth (HID или SPP). Чтобы быстро проверить, «увидит» ли 1С ваш встроенный сканер, выполним следующие шаги:
1С:Сканеры штрихкода (NativeApi) или 1С:Устройство ввода.Если после настройки при сканировании RFID-метки данные попадают в форму (например, через обработчик ВнешнееСобытие), значит, производитель ТСД реализовал проброс данных на системном уровне. Однако, как показывает практика, для встроенных RFID-модулей в списке выбора оборудования часто не оказывается нужного пункта. В этом случае перейдем к более гибким методам.
В операционной системе Android приложения могут обмениваться сообщениями с помощью интентов (Intents). Большинство производителей ТСД (Zebra, Honeywell, Urovo, Chainway) поставляют предустановленное приложение-сервис, которое управляет сканером. Настроим передачу данных из этого сервиса напрямую в 1С.
Разберем по шагам логику настройки:
Intent Action (например, com.mycompany.rfid.action) и Intent Data String.Для приема данных в 1С используется обработчик внешнего события. Рассмотрим пример того, как это может выглядеть в коде модуля управляемого приложения или формы:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "RFIDScanner" Тогда
// Обработка полученного ID метки
ИдентификаторМетки = Данные;
Сообщить("Считана метка: " + ИдентификаторМетки);
ОбработатьСканирование(ИдентификаторМетки);
КонецЕсли;
КонецПроцедуры
Важный нюанс: чтобы 1С «услышала» широковещательное сообщение Android, иногда требуется написать простейшую внешнюю компоненту, которая будет выступать слушателем (Listener) и транслировать событие в платформу 1С.
Если стандартных настроек интентов недостаточно (например, нужно управлять мощностью антенны или записывать данные в User-память метки), выясним причину, изучив документацию от производителя (Developer Guide). Обычно производитель предоставляет SDK на языке Java.
Рассмотрим, как интегрировать эти возможности в 1С:
.so и упаковывается в ZIP-архив согласно требованиям 1С к Native API.ЗапуститьПриложениеМобильногоУстройства(), передавая параметры и ожидая результат выполнения.Пример запуска стороннего приложения для сканирования с ожиданием результата:
ПараметрыЗапуска = Новый ЗапускПриложенияМобильногоУстройстваПараметры();
ПараметрыЗапуска.Действие = "com.alien.rfid.SCAN";
ПараметрыЗапуска.ДополнительныеДанные.Вставить("SCAN_MODE", "SINGLE");
ЗапуститьПриложениеМобильногоУстройства(ПараметрыЗапуска, РезультатЗапуска);
Если РезультатЗапуска = КодВозвратаДиалога.ОК Тогда
// Получаем данные из структуры РезультатЗапуска.ДополнительныеДанные
КонецЕсли;
Проанализируем ситуацию, когда нет возможности писать внешние компоненты. Самый простой способ — настроить утилиту RFID на ТСД так, чтобы она «печатала» считанный код в активное поле ввода.
Рассмотрим особенности этого подхода:
Для реализации этого метода необходимо установить фокус на поле ввода. Рекомендуется использовать событие ПриИзменении для этого поля, чтобы сразу обрабатывать считанную информацию и очищать поле для следующего сканирования.
При разработке под мобильные ТСД следует учитывать версию ОС Android. Например, устройства на Android 4.4 (KitKat) могут не поддерживать современные версии мобильной платформы 1С. Посмотрим на пример: если ваш Developer Guide ориентирован на старые версии API, при сборке внешней компоненты необходимо строго соблюдать соответствие уровней API Android, иначе приложение будет аварийно завершаться.
Также важно помнить о «коллизиях» при чтении RFID. В отличие от штрихкода, RFID-антенна может считать 50 меток одновременно. Если вы используете БПО, убедитесь, что ваш код готов к приему массива данных в короткий промежуток времени. Разберем, как избежать зависания интерфейса: используйте асинхронные вызовы или временное накопление данных в буфере перед финальной обработкой списка инвентаризации.
Подведем итог: если стандартная БПО не видит ваш RFID-сканер, оптимальным путем будет настройка Android Intents в связке с обработчиком ВнешнееСобытие в 1С. Это обеспечит баланс между скоростью разработки и стабильностью работы промышленного оборудования.