Как настроить сканирование штрихкодов на Android 10 в 1С:Предприятии при отказе старого приложения 1С:Устройство ввода?

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

При обновлении парка терминалов сбора данных (ТСД) или переходе с устаревших версий операционной системы (например, Android 7) на актуальные (Android 10 и выше) разработчики и администраторы часто сталкиваются с ситуацией, когда привычный компонент 1С:Устройство ввода (пакет com.e1c.inputdevice) перестает функционировать или вовсе не поддерживается операционной системой. Попытка перейти на стандартную Библиотеку подключаемого оборудования (БПО) и компонент 1С:Сканер штрихкода (NativeApi) при этом нередко заканчивается неудачей: встроенная утилита ТСД успешно считывает штрихкоды, но в тесте 1С ничего не отображается. Разберем причины такого поведения и настроим корректный обмен данными между сканером ТСД и мобильным приложением 1С.

Почему старое приложение 1С:Устройство ввода не работает на Android 10

Проанализируем системные изменения операционной системы Android, приведшие к неработоспособности старого решения:

  1. Ограничения фоновой работы (Background Execution Limits): Начиная с Android 8.0 (API 26) и особенно в Android 10 (API 29), Google существенно ужесточил правила работы фоновых служб. Старое приложение com.e1c.inputdevice проектировалось под архитектуру Android 4–7, где службы могли бесконтрольно оставаться в памяти и перехватывать глобальные события. На современных ОС система принудительно выгружает такие процессы или изолирует их.
  2. Ограничения неявных широковещательных рассылок (Implicit Broadcasts): В актуальных версиях Android запрещено прослушивание неявных широковещательных намерений через статические манифесты, что полностью блокирует механизм передачи считанных данных, заложенный в старой утилите ввода.
  3. Требования к целевой версии SDK (targetSdkVersion): Приложения, не обновлявшиеся под современные API, блокируются при установке либо не получают системных разрешений для перехвата событий сканирования.

Почему не подходит режим эмуляции клавиатуры (разрыв клавиатуры)

Первое решение, которое часто пробуют при возникновении проблем, — перевод сканера ТСД в режим эмуляции клавиатуры (Keyboard Wedge). Выясним, почему для корпоративного учета этот путь является тупиковым:

  1. Потеря управляющих символов в маркировке: При сканировании двухмерных кодов (в частности, DataMatrix систем маркировки «Честный ЗНАК») штрихкод содержит специальный непечатный символ-разделитель групп данных <GS> (ASCII 29 / FNC1). Режим клавиатуры трансформирует ввод в системные нажатия клавиш и просто отбрасывает служебные символы. В результате считанный код признается невалидным при проверке в 1С.
  2. Жесткая привязка к фокусу ввода: Для приема данных курсор пользователя обязан постоянно находиться в конкретном поле формы, что делает работу оператора склада неудобной и приводит к частым ошибкам интерфейса.

Принцип работы драйвера NativeApi и устранение сбоя при тестировании

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

Если тест в Библиотеке подключаемого оборудования молчит, это означает лишь одно: параметры широковещательного канала сканера в Android не совпадают с параметрами, которые ожидает драйвер в 1С.

Пошаговая настройка совместной работы ТСД и 1С

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

  1. Настройка системной утилиты сканера на ТСД:

    Откроем на терминале встроенное приложение управления сканером (на ТСД Urovo это утилита «Настройки сканера» / «Scanner Settings»). Найдем раздел настроек вывода данных (Data Output Mode) и переключим его из режима вывода в фокус/клавиатуру в режим передачи широковещательного сообщения (Broadcast или Intent).

  2. Синхронизация параметров Intent:

    В настройках утилиты ТСД проверим и зафиксируем два ключевых строковых параметра:

    — Действие намерения (Action): имя события рассылки (например, urovo.rcv.message или android.intent.ACTION_DECODE_DATA).

    — Имя дополнительного поля (String Extra Key): имя ключа, под которым утилита вкладывает декодированную строку штрихкода в сообщение (например, barcode_string или barcode).

  3. Установка параметров в 1С:

    В форме настройки подключаемого оборудования в 1С или непосредственно в структуре параметров инициализации драйвера NativeApi зададим режим соединения как получение широковещательных сообщений (Broadcast) и пропишем в соответствующие поля точные наименования параметров Action и Extra, указанные на ТСД.

Прямая работа с драйвером NativeApi из макета (без громоздкой БПО)

Как показывает практика, при разработке собственных мобильных приложений на базе мобильной платформы 1С нет необходимости внедрять тяжеловесную подсистему БПО со всеми ее вспомогательными регистрами и формами. Достаточно загрузить внешнюю компоненту 1С:Сканер штрихкода (NativeApi) прямо из макета конфигурации и инициализировать ее базовыми методами.

Посмотрим на пример инициализации драйвера в модуле формы или мобильного приложения:


&НаКлиенте
Процедура ПодключитьСканерТСД()
    
    // Подключаем внешнюю компоненту NativeApi из макета
    Если Не ПодключитьВнешнююКомпоненту("Макет.ДрайверСканераNativeApi", "СканерТСД", ТипВнешнейКомпоненты.Native) Тогда
        Сообщить("Не удалось загрузить внешнюю компоненту сканера!");
        Возврат;
    КонецЕсли;
    
    ОбъектДрайвера = Новый ("AddIn.СканерТСД.BarcodeScanner");
    
    // Открываем устройство и передаем параметры Broadcast
    Если ОбъектДрайвера.Open() = 0 Тогда
        // Задаем параметры широковещательного намерения
        ОбъектДрайвера.SetParameter("IntentAction", "urovo.rcv.message");
        ОбъектДрайвера.SetParameter("IntentExtraBarcode", "barcode_string");
        ОбъектДрайвера.SetParameter("ListeningMode", "Broadcast");
        
        ОбъектДрайвера.DeviceEnable = 1;
    Иначе
        Сообщить("Ошибка при открытии устройства сканирования.");
    КонецЕсли;

КонецПроцедуры

После успешной инициализации драйвер перехватывает системный Broadcast от терминала сбора данных и генерирует событие платформы. Обработка полученных данных выполняется в стандартном предопределенном обработчике формы:


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

КонецПроцедуры

Таким образом, отказ от устаревшего 1С:Устройство ввода и правильная синхронизация параметров широковещательных пакетов в связке с компонентой NativeApi позволяют быстро и надежно запустить сканирование на любых современных ТСД под управлением Android 10 и выше с полной поддержкой кодов маркировки.

← На главную