Как подключить ТСД Chainway на Android 11 к 1С через Broadcast для сканирования штрихкодов и RFID-меток?

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

В современных реалиях автоматизации складского учета использование терминалов сбора данных (ТСД) на базе операционной системы Android становится стандартом. Однако с выходом Android 11 и последующих версий разработчики столкнулись с серьезными изменениями в политике безопасности и архитектуре системы. Старые методы работы через прямые библиотеки (DLL или специфические внешние компоненты) часто перестают функционировать, так как система блокирует низкоуровневый доступ к оборудованию или не поддерживает 32-битную архитектуру устаревших библиотек. Рассмотрим самый надежный и современный способ интеграции — использование механизма Broadcast Intent в связке с мобильной платформой 1С.

Разберем суть проблемы: почему не работают DLL?

Проанализируем ситуацию: в Android 11 компания Google ужесточила контроль над взаимодействием приложений. Традиционные внешние компоненты (ВК), написанные на C++ и подключаемые как динамические библиотеки, часто имеют жесткую привязку к архитектуре процессора (например, только armeabi-v7a). Современные ТСД Chainway работают на 64-битных процессорах, и попытка запустить 32-битную ВК может привести к ошибке загрузки. Кроме того, прямой доступ к портам сканера требует специфических разрешений, которые сложно пробросить через мобильную платформу 1С. Решение заключается в использовании системной службы ТСД, которая уже имеет доступ к железу и готова транслировать данные любому приложению через «широковещательные сообщения» — Broadcast.

Шаг 1. Настройка программного обеспечения ТСД

Прежде чем приступать к коду в 1С, нам необходимо настроить само устройство. На ТСД Chainway за это отвечает предустановленное приложение, которое обычно называется KeyboardEmulator (в некоторых прошивках — Scan Settings). Выполним следующие действия:

  1. Откроем приложение KeyboardEmulator на ТСД.
  2. Перейдем в раздел App Settings или Function Switch.
  3. Найдем параметр Release Mode (или Output Mode) и переключим его с «Keyboard Mode» на «Broadcast Intent». Это критически важно: устройство перестанет имитировать нажатие клавиш и начнет отправлять системные сообщения.
  4. Зафиксируем (или зададим свои) значения в полях Action и Extra. Для Chainway стандартом обычно являются:
    • Action: com.rscja.android.scanaction
    • Extra (Data): data

Проанализируем эти настройки: когда лазер сканирует код, служба KeyboardEmulator перехватывает его и создает «сообщение» (Intent) с именем com.rscja.android.scanaction, внутрь которого упаковывает текст штрихкода в поле data. Наша задача в 1С — «поймать» именно это сообщение.

Шаг 2. Подготовка конфигурации 1С и выбор драйвера

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

Выясним, как правильно добавить драйвер в самописную конфигурацию:

  1. Найдем актуальную версию БПО для мобильных приложений на сайте поддержки пользователей 1С.
  2. Извлечем макет драйвера (обычно это ZIP-архив с компонентой).
  3. В нашей конфигурации создадим Общий макет с типом «Двоичные данные» и загрузим туда этот архив. Назовем его, например, Драйвер1ССканерШтрихкода.

Теперь компонента доступна для мобильного приложения. Посмотрим, как ее инициализировать программно.

Шаг 3. Программная инициализация и настройка устройства в 1С

В мобильном приложении нам нужно не просто подключить ВК, но и правильно настроить параметры связи. Разберем пример кода для подключения компоненты:


&НаКлиенте
Процедура ПодключитьСканер()
    Результат = УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода");
    Если Результат Тогда
        ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода", "Сканер", ТипВнешнейКомпоненты.Native);
        ОбъектДрайвера = Новый ("AddIn.Сканер.BarcodeScanner");
        
        // Настройка параметров Broadcast
        ОбъектДрайвера.УстановитьПараметр("DeviceType", "Broadcast");
        ОбъектДрайвера.УстановитьПараметр("Action", "com.rscja.android.scanaction");
        ОбъектДрайвера.УстановитьПараметр("Extra", "data");
        // Категорию обычно оставляем пустой, если не задано иное в ТСД
        ОбъектДрайвера.УстановитьПараметр("Category", ""); 
    КонецЕсли;
КонецПроцедуры

Важный момент: если вы используете типовую БПО, то все эти настройки выполняются в справочнике «Подключаемое оборудование». В форме настройки устройства нужно выбрать режим «Broadcast» и вручную вписать параметры Action и Extra, которые мы подсмотрели в KeyboardEmulator на первом шаге.

Шаг 4. Обработка внешнего события

Когда сканирование произведено, мобильная платформа 1С генерирует ВнешнееСобытие. Нам нужно правильно его обработать в модуле формы. Рассмотрим типовой сценарий:


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Источник — это имя устройства, которое мы задали при подключении
    // Событие — обычно "Barcode"
    // Данные — сам считанный штрихкод
    
    Если Событие = "Barcode" Тогда
        Штрихкод = СокрЛП(Данные);
        ОбработатьШтрихкод(Штрихкод);
    ИначеЕсли Событие = "RFID" Тогда
        // Обработка RFID-метки, если драйвер разделяет потоки
        ОбработатьМетку(Данные);
    КонецЕсли;
КонецПроцедуры

Особенности работы с RFID на Chainway

Рассмотрим ситуацию с RFID, упомянутую в обсуждении. RFID-модуль в Chainway зачастую работает через отдельную службу или требует специфических настроек в приложении RFID Tool. В отличие от штрихкода, RFID-метка может содержать данные в разных форматах (HEX, ASCII).

Выясним причины, по которым RFID может не работать через стандартный драйвер сканера:

  1. Разные Action: В настройках RFID Tool может быть задан другой Action (например, com.rscja.android.rfidaction). В этом случае стандартный драйвер 1С, настроенный на scanaction, проигнорирует эти сообщения.
  2. Формат данных: RFID-метки часто считываются пачками. Механизм Broadcast должен быть настроен на передачу каждой метки отдельным событием, иначе 1С получит «кашу» из данных.

Если вам требуется одновременная работа и сканера, и RFID, рекомендуется настроить их на один и тот же Action в системных утилитах ТСД, но добавлять префикс к данным, чтобы в коде 1С вы могли их различить.

Типичные ошибки при внедрении

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

Подводя итог, использование Broadcast Intent — это наиболее стабильный путь для Android 11. Мы уходим от зависимости от конкретных версий библиотек .so и полагаемся на системный механизм передачи сообщений ОС Android, который поддерживается мобильной платформой 1С «из коробки» через стандартную компоненту печати и сканирования.

← На главную