Как разработать внешнюю компоненту для мобильной 1С для работы с RFID-сканером Chainway C72

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

Разработка решений для терминалов сбора данных (ТСД) на базе Android требует глубокого понимания взаимодействия между операционной системой, аппаратной частью и мобильной платформой 1С. В данной статье мы детально разберем процесс интеграции специализированного RFID-сканера Chainway C72 в мобильное приложение 1С. Мы проанализируем ситуацию, когда стандартных средств эмуляции клавиатуры недостаточно, и выясним, как правильно использовать SDK производителя для получения массивов данных в режиме инвентаризации.

Анализ задачи и выбор архитектуры решения

Перед тем как приступить к написанию кода, проанализируем специфику оборудования. Модели типа Chainway C72 оснащены мощным RFID-чипом (например, Impinj R2000), который способен считывать сотни меток в секунду. Если использовать обычную эмуляцию клавиатуры, мобильная платформа 1С быстро "захлебнется" от входящего потока символов, а бизнес-логика не получит необходимых метаданных (таких как RSSI — уровень сигнала или частота метки).

Рассмотрим два основных пути реализации:

  1. Использование Broadcast Intent: Самый простой путь, не требующий разработки внешней компоненты (ВК). Мы настраиваем системную утилиту терминала на отправку данных через широковещательные сообщения Android, которые 1С может перехватывать.
  2. Разработка внешней компоненты на Java: Этот метод необходим, если нам нужно управлять режимами сканера (например, изменять мощность антенны прямо из интерфейса 1С) или работать со сложными протоколами обмена.

Вариант 1. Использование механизма Broadcast Intent

Большинство устройств Chainway поставляются с предустановленным приложением AppCenter, внутри которого находится утилита KeyboardEmulator. Разберем по шагам, как настроить получение данных без написания ВК:

Во-первых, в настройках KeyboardEmulator необходимо изменить Output Mode с Keyboard Speed на Intent. Здесь мы задаем Action (например, com.rfid.action.DATA) и Data String Key. Теперь при каждом успешном сканировании Android будет рассылать сообщение.

Во-вторых, в коде 1С нам нужно подписаться на это событие. Для этого используется механизм оповещений. Рассмотрим пример инициализации подписки:


// В модуле управляемого приложения или в коде инициализации формы
СредстваТелефонии.ПодключитьОбработчикСобытийТелефонии(Объект);
// Однако для Intent чаще используется внешнее событие
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечати", "Printer", ТипВнешнейКомпоненты.Native);

Если используется стандартная системная утилита, данные будут попадать в процедуру ВнешнееСобытие:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Событие = "RFID_Data" Тогда
        // Разбираем строку с данными метки
        Сообщить("Считана метка: " + Данные);
    КонецЕсли;
КонецПроцедуры

Вариант 2. Разработка внешней компоненты на Java

Если требуется полный контроль над чипом 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 и передача их "пачками".

Рассмотрим алгоритм реализации такой очереди:

  1. Создаем в Java-коде поток (Thread) для циклического опроса сканера.
  2. Все найденные EPC-коды меток складываем в HashSet (чтобы избежать дублей).
  3. По таймеру (например, каждые 500 мс) или по команде "Стоп" формируем из накопленных меток одну длинную строку с разделителями.
  4. Передаем эту строку в 1С одним внешним событием.

Пример кода на стороне 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С о том, что процесс пошел (например, для смены иконки в интерфейсе).

Рекомендации по сборке и развертыванию

Проанализируем финальные шаги сборки компоненты:

  1. Убедитесь, что все зависимости (библиотеки .jar или .so от Chainway) включены в состав вашего .zip архива компоненты.
  2. В манифесте компоненты (manifest.xml) четко укажите поддерживаемые архитектуры. Современные ТСД часто используют arm64-v8a.
  3. Для отладки используйте Logcat в Android Studio. Поскольку отладить ВК напрямую из конфигуратора 1С сложно, логирование в системный журнал Android станет вашим главным инструментом.

Использование внешней компоненты — это трудоемкий, но наиболее надежный способ интеграции RFID. Он обеспечивает максимальную скорость работы и стабильность при больших объемах данных, что критично для складских операций.

← На главную