Разработка решений для терминалов сбора данных (ТСД) на базе Android требует глубокого понимания взаимодействия между операционной системой, аппаратной частью и мобильной платформой 1С. В данной статье мы детально разберем процесс интеграции специализированного RFID-сканера Chainway C72 в мобильное приложение 1С. Мы проанализируем ситуацию, когда стандартных средств эмуляции клавиатуры недостаточно, и выясним, как правильно использовать SDK производителя для получения массивов данных в режиме инвентаризации.
Перед тем как приступить к написанию кода, проанализируем специфику оборудования. Модели типа Chainway C72 оснащены мощным RFID-чипом (например, Impinj R2000), который способен считывать сотни меток в секунду. Если использовать обычную эмуляцию клавиатуры, мобильная платформа 1С быстро "захлебнется" от входящего потока символов, а бизнес-логика не получит необходимых метаданных (таких как RSSI — уровень сигнала или частота метки).
Рассмотрим два основных пути реализации:
Большинство устройств Chainway поставляются с предустановленным приложением AppCenter, внутри которого находится утилита KeyboardEmulator. Разберем по шагам, как настроить получение данных без написания ВК:
Во-первых, в настройках KeyboardEmulator необходимо изменить Output Mode с Keyboard Speed на Intent. Здесь мы задаем Action (например, com.rfid.action.DATA) и Data String Key. Теперь при каждом успешном сканировании Android будет рассылать сообщение.
Во-вторых, в коде 1С нам нужно подписаться на это событие. Для этого используется механизм оповещений. Рассмотрим пример инициализации подписки:
// В модуле управляемого приложения или в коде инициализации формы
СредстваТелефонии.ПодключитьОбработчикСобытийТелефонии(Объект);
// Однако для Intent чаще используется внешнее событие
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечати", "Printer", ТипВнешнейКомпоненты.Native);
Если используется стандартная системная утилита, данные будут попадать в процедуру ВнешнееСобытие:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Событие = "RFID_Data" Тогда
// Разбираем строку с данными метки
Сообщить("Считана метка: " + Данные);
КонецЕсли;
КонецПроцедуры
Если требуется полный контроль над чипом Impinj R2000, разработаем полноценную ВК. Для этого нам понадобится Android Studio и SDK от производителя (библиотека com.rscja.deviceapi).
Выясним основную структуру проекта. Внешняя компонента для 1С на Android — это по сути Java-библиотека (.aar), которая реализует определенный интерфейс. Ключевым классом в SDK Chainway является RFIDWithUHF. Рассмотрим, как правильно инициализировать устройство в коде Java:
import com.rscja.deviceapi.RFIDWithUHF;
public class MyRFIDComponent {
private RFIDWithUHF mReader;
public void initScanner() {
try {
mReader = RFIDWithUHF.getInstance();
// Подаем питание на модуль - это критически важно!
if (mReader != null) {
mReader.init();
}
} catch (Exception e) {
// Обработка ошибки инициализации
}
}
}
Важный нюанс: Управление питанием модуля. Мобильная 1С может работать в фоновом режиме, и если не вызвать метод free() при закрытии формы или приложения, аккумулятор устройства разрядится очень быстро, так как RFID-модуль продолжит потреблять энергию.
Проанализируем ситуацию: при инвентаризации склада сканер находит 500 меток за 2 секунды. Если мы будем на каждую метку вызывать ExternalEvent в 1С, приложение зависнет. Правильный подход — накопление данных на стороне Java и передача их "пачками".
Рассмотрим алгоритм реализации такой очереди:
HashSet (чтобы избежать дублей).Пример кода на стороне Java для передачи события в 1С:
// m_iConnect - интерфейс взаимодействия с 1С
String allTags = "Tag1;Tag2;Tag3";
m_iConnect.addErrorLog("RFID_Batch", "InventoryData", allTags, 0);
Одной из главных причин разработки ВК является необходимость управления мощностью. В SDK Chainway это реализуется методом setPower. Разберем, как это реализовать, чтобы вызывать из 1С:
public void setAntennaPower(int power) {
if (mReader != null && mReader.isPowerOn()) {
// power обычно от 5 до 30 dBm
mReader.setPower(power);
}
}
В коде 1С это будет выглядеть как вызов метода объекта внешней компоненты: ОбъектВК.УстановитьМощность(25);. Это позволяет программно ограничивать радиус действия сканера, что полезно, например, при поиске конкретной ячейки, чтобы не "цеплять" соседние.
Для удобства пользователя сканирование должно запускаться физической кнопкой на рукоятке ТСД. В Android это обрабатывается через перехват события нажатия клавиши onKeyDown. В вашей ВК следует реализовать слушатель нажатий, который будет автоматически запускать цикл инвентаризации и оповещать 1С о том, что процесс пошел (например, для смены иконки в интерфейсе).
Проанализируем финальные шаги сборки компоненты:
.jar или .so от Chainway) включены в состав вашего .zip архива компоненты.manifest.xml) четко укажите поддерживаемые архитектуры. Современные ТСД часто используют arm64-v8a.Logcat в Android Studio. Поскольку отладить ВК напрямую из конфигуратора 1С сложно, логирование в системный журнал Android станет вашим главным инструментом.Использование внешней компоненты — это трудоемкий, но наиболее надежный способ интеграции RFID. Он обеспечивает максимальную скорость работы и стабильность при больших объемах данных, что критично для складских операций.