Многие разработчики и системные администраторы сталкиваются с неприятной ситуацией: после обновления мобильной платформы 1С (например, до версии 8.3.21 и выше) терминалы сбора данных (ТСД), такие как Urovo или Zebra, перестают корректно обрабатывать штрихкоды, содержащие русские буквы (кириллицу). При этом латинские символы и цифры продолжают считываться без проблем. В приложении просто не возникает внешнее событие сканирования штрихкода. Давайте подробно разберем эту ситуацию, выясним причину такого поведения и по шагам рассмотрим надежное решение данной задачи.
Для начала выясним причину, по которой кириллица перестает считываться. Как правило, сложность кроется в выбранном режиме работы драйвера сканера. Исторически многие настраивают ТСД в режиме эмуляции клавиатуры. В этом режиме операционная система Android и мобильная платформа 1С воспринимают сканирование штрихкода не как цельный пакет данных, а как очень быстрое последовательное нажатие клавиш на виртуальной или физической клавиатуре.
Из-за этого итоговый результат сильно зависит от текущей языковой раскладки, активной в операционной системе терминала. Если раскладка не совпадает, или если в новых релизах мобильной платформы 1С изменились механизмы обработки системных событий ввода, кириллические символы начинают игнорироваться, искажаться, и компонента драйвера попросту "молчит", не генерируя событие сканирования.
Наиболее правильным и стабильным решением, которое раз и навсегда устраняет проблему с кодировками и кириллицей на ТСД, является полный отказ от эмуляции клавиатуры. Мы переключим устройство и драйвер 1С на использование системных сообщений Android — в режим Broadcast (Intent).
В этом режиме данные считанного штрихкода передаются от системной службы сканирования ТСД прямо в драйвер 1С (Native API) в исходном виде, единым текстовым пакетом. Механизм работает в обход визуальной клавиатуры устройства, а значит, языковые раскладки больше не будут влиять на результат. Типовой драйвер 1С:Сканеры штрихкода (Native API) из "1С:Библиотека подключаемого оборудования для мобильных приложений" полностью поддерживает данный функционал.
Сначала настроим саму операционную систему терминала. Рассмотрим процесс на примере популярных устройств Urovo, однако для других терминалов логика будет идентичной (могут немного отличаться названия системных утилит).
Keyboard emulation или Output via keyboard.Output via Intent).com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST
EXTRA_BARCODE_DECODING_DATA
Теперь, когда терминал отправляет широковещательные сообщения, научим наше мобильное приложение 1С их ловить. Настройку проведем в пользовательском режиме:
com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST
EXTRA_BARCODE_DECODING_DATA
После применения описанных выше настроек перезапустите мобильное приложение. Теперь при считывании любых штрихкодов, в том числе содержащих кириллицу, драйвер будет стабильно генерировать внешнее событие в 1С. Однако, при использовании режима Broadcast, стоит помнить о нескольких важных моментах:
Конфликты фоновых приложений: Операционная система Android работает с Intent-сообщениями таким образом, что если у вас в фоне висят другие открытые приложения (или другие базы 1С) с аналогичными настройками сканера, система может отправить перехваченный штрихкод не активному приложению, а фоновому. Всегда следите за тем, чтобы операторы закрывали неиспользуемые программы на ТСД.
Обновление драйверов: Если в вашей конфигурации в настройках оборудования отсутствует пункт "Broadcast", это означает, что используется устаревшая версия компоненты. Рекомендуем обновить драйвер Native API. Самую актуальную компоненту можно выгрузить из свежего релиза типовой конфигурации 1С:Библиотека подключаемого оборудования для мобильных приложений или взять из типовых мобильных клиентов (например, 1С:Кладовщик).
Разрядность мобильной платформы: При переходе на новые версии (8.3.21, 8.3.22 и выше) учитывайте разрядность приложения (32-бит или arm64). Как правило, Native компоненты для работы с оборудованием поддерживают обе архитектуры, однако на некоторых устройствах могут возникать ошибки при попытке подключения оборудования именно на 64-битной версии мобильного клиента. Если драйвер падает при инициализации, попробуйте установить 32-битный APK-файл мобильной платформы.
Используя режим Broadcast, вы не только решите проблему с русскими буквами в штрихкодах, но и значительно повысите общую скорость и стабильность сканирования на складе или в торговом зале.