Как реализовать работу с RFID-сканером в мобильном приложении 1С на ТСД?

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

Разработка мобильного приложения для терминалов сбора данных (ТСД) с поддержкой RFID — задача нетривиальная, так как стандартная «Библиотека подключаемого оборудования» (БПО) для мобильных платформ поддерживает лишь ограниченный перечень устройств. В этой статье мы разберем, как интегрировать чтение RFID-меток в мобильное приложение 1С, используя различные подходы: от штатных средств БПО до низкоуровневого взаимодействия через Android Intents.

Метод 1: Проверка совместимости через стандартную БПО

Прежде чем приступать к написанию собственного кода, проанализируем возможности стандартной поставки БПО для мобильных платформ. 1С заявляет поддержку RFID-считывателей, но зачастую она ограничена устройствами, работающими по протоколу Bluetooth (HID или SPP). Чтобы быстро проверить, «увидит» ли 1С ваш встроенный сканер, выполним следующие шаги:

  1. Создадим демонстрационную базу на основе актуальной конфигурации «1С:Библиотека подключаемого оборудования».
  2. Подключим ТСД к компьютеру в режиме отладки и запустим мобильное приложение через конфигуратор.
  3. В интерфейсе мобильного приложения перейдем в раздел настроек оборудования и попробуем добавить новое устройство с типом «Устройство ввода».
  4. В качестве драйвера выберем 1С:Сканеры штрихкода (NativeApi) или 1С:Устройство ввода.

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

Метод 2: Использование механизмов Android Intent (Broadcast Receiver)

В операционной системе Android приложения могут обмениваться сообщениями с помощью интентов (Intents). Большинство производителей ТСД (Zebra, Honeywell, Urovo, Chainway) поставляют предустановленное приложение-сервис, которое управляет сканером. Настроим передачу данных из этого сервиса напрямую в 1С.

Разберем по шагам логику настройки:

  1. В системных настройках ТСД найдем утилиту сканирования (Scanner Settings / RFID Settings).
  2. Переключим режим вывода данных (Output mode) с эмуляции клавиатуры на Intent Output.
  3. Зададим уникальное имя для Intent Action (например, com.mycompany.rfid.action) и Intent Data String.
  4. В мобильном приложении 1С будем использовать методы для перехвата этого события.

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


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Источник = "RFIDScanner" Тогда
        // Обработка полученного ID метки
        ИдентификаторМетки = Данные;
        Сообщить("Считана метка: " + ИдентификаторМетки);
        ОбработатьСканирование(ИдентификаторМетки);
    КонецЕсли;
КонецПроцедуры

Важный нюанс: чтобы 1С «услышала» широковещательное сообщение Android, иногда требуется написать простейшую внешнюю компоненту, которая будет выступать слушателем (Listener) и транслировать событие в платформу 1С.

Метод 3: Работа через Developer Guide и SDK производителя

Если стандартных настроек интентов недостаточно (например, нужно управлять мощностью антенны или записывать данные в User-память метки), выясним причину, изучив документацию от производителя (Developer Guide). Обычно производитель предоставляет SDK на языке Java.

Рассмотрим, как интегрировать эти возможности в 1С:

Пример запуска стороннего приложения для сканирования с ожиданием результата:


ПараметрыЗапуска = Новый ЗапускПриложенияМобильногоУстройстваПараметры();
ПараметрыЗапуска.Действие = "com.alien.rfid.SCAN";
ПараметрыЗапуска.ДополнительныеДанные.Вставить("SCAN_MODE", "SINGLE");

ЗапуститьПриложениеМобильногоУстройства(ПараметрыЗапуска, РезультатЗапуска);

Если РезультатЗапуска = КодВозвратаДиалога.ОК Тогда
    // Получаем данные из структуры РезультатЗапуска.ДополнительныеДанные
КонецЕсли;

Метод 4: Эмуляция клавиатуры (Keyboard Wedge)

Проанализируем ситуацию, когда нет возможности писать внешние компоненты. Самый простой способ — настроить утилиту RFID на ТСД так, чтобы она «печатала» считанный код в активное поле ввода.

Рассмотрим особенности этого подхода:

  1. Плюсы: Работает «из коробки» в любой конфигурации, не требует программирования.
  2. Минусы: Крайне низкая скорость при массовом чтении меток (интерфейс 1С будет пытаться обрабатывать каждый символ). Невозможно отличить, откуда пришли данные — со сканера штрихкода, RFID или клавиатуры.

Для реализации этого метода необходимо установить фокус на поле ввода. Рекомендуется использовать событие ПриИзменении для этого поля, чтобы сразу обрабатывать считанную информацию и очищать поле для следующего сканирования.

Технические нюансы и ограничения

При разработке под мобильные ТСД следует учитывать версию ОС Android. Например, устройства на Android 4.4 (KitKat) могут не поддерживать современные версии мобильной платформы 1С. Посмотрим на пример: если ваш Developer Guide ориентирован на старые версии API, при сборке внешней компоненты необходимо строго соблюдать соответствие уровней API Android, иначе приложение будет аварийно завершаться.

Также важно помнить о «коллизиях» при чтении RFID. В отличие от штрихкода, RFID-антенна может считать 50 меток одновременно. Если вы используете БПО, убедитесь, что ваш код готов к приему массива данных в короткий промежуток времени. Разберем, как избежать зависания интерфейса: используйте асинхронные вызовы или временное накопление данных в буфере перед финальной обработкой списка инвентаризации.

Подведем итог: если стандартная БПО не видит ваш RFID-сканер, оптимальным путем будет настройка Android Intents в связке с обработчиком ВнешнееСобытие в 1С. Это обеспечит баланс между скоростью разработки и стабильностью работы промышленного оборудования.

← На главную