Почему ТСД перестал читать штрихкоды с русскими буквами после обновления мобильной платформы 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Многие разработчики и системные администраторы сталкиваются с неприятной ситуацией: после обновления мобильной платформы 1С (например, до версии 8.3.21 и выше) терминалы сбора данных (ТСД), такие как Urovo или Zebra, перестают корректно обрабатывать штрихкоды, содержащие русские буквы (кириллицу). При этом латинские символы и цифры продолжают считываться без проблем. В приложении просто не возникает внешнее событие сканирования штрихкода. Давайте подробно разберем эту ситуацию, выясним причину такого поведения и по шагам рассмотрим надежное решение данной задачи.

Проанализируем причину проблемы

Для начала выясним причину, по которой кириллица перестает считываться. Как правило, сложность кроется в выбранном режиме работы драйвера сканера. Исторически многие настраивают ТСД в режиме эмуляции клавиатуры. В этом режиме операционная система Android и мобильная платформа 1С воспринимают сканирование штрихкода не как цельный пакет данных, а как очень быстрое последовательное нажатие клавиш на виртуальной или физической клавиатуре.

Из-за этого итоговый результат сильно зависит от текущей языковой раскладки, активной в операционной системе терминала. Если раскладка не совпадает, или если в новых релизах мобильной платформы 1С изменились механизмы обработки системных событий ввода, кириллические символы начинают игнорироваться, искажаться, и компонента драйвера попросту "молчит", не генерируя событие сканирования.

Рассмотрим оптимальное решение: отказ от эмуляции клавиатуры

Наиболее правильным и стабильным решением, которое раз и навсегда устраняет проблему с кодировками и кириллицей на ТСД, является полный отказ от эмуляции клавиатуры. Мы переключим устройство и драйвер 1С на использование системных сообщений Android — в режим Broadcast (Intent).

В этом режиме данные считанного штрихкода передаются от системной службы сканирования ТСД прямо в драйвер 1С (Native API) в исходном виде, единым текстовым пакетом. Механизм работает в обход визуальной клавиатуры устройства, а значит, языковые раскладки больше не будут влиять на результат. Типовой драйвер 1С:Сканеры штрихкода (Native API) из "1С:Библиотека подключаемого оборудования для мобильных приложений" полностью поддерживает данный функционал.

Разберем по шагам настройку на стороне ТСД (Android)

Сначала настроим саму операционную систему терминала. Рассмотрим процесс на примере популярных устройств Urovo, однако для других терминалов логика будет идентичной (могут немного отличаться названия системных утилит).

  1. Откройте на терминале системное приложение для настройки сканера. Обычно оно называется Barcode Utility, Scanner Settings или ScanWedge.
  2. Перейдите в раздел настроек (Scan Settings) и найдите пункт, отвечающий за вывод данных на экран.
  3. Обязательно отключите функцию "Сканирование в поле", которая также может называться Keyboard emulation или Output via keyboard.
  4. Измените метод вывода данных (Режим вывода / Data Receive Method) на значение BROADCAST_EVENT (в некоторых прошивках называется Output via Intent).
  5. Найдите и запишите системные переменные, которые сканер будет отправлять в систему. Для терминалов Urovo стандартные значения обычно выглядят так:
    - Имя события (Intent action / Action Name): com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST
    - Имя параметра с данными (Intent string extra / Barcode Data): EXTRA_BARCODE_DECODING_DATA

Выполним настройку в мобильном приложении 1С

Теперь, когда терминал отправляет широковещательные сообщения, научим наше мобильное приложение 1С их ловить. Настройку проведем в пользовательском режиме:

  1. Запустите ваше мобильное приложение 1С и перейдите в раздел Подключение и настройка оборудования.
  2. Откройте карточку экземпляра подключаемого оборудования для вашего сканера штрихкодов, который использует драйвер Native API.
  3. Перейдите к параметрам драйвера.
  4. Найдите поле Тип подключения (или "Устройство") и измените его значение с "Клавиатура" на Broadcast.
  5. После выбора этого режима появятся новые поля для ввода системных параметров. Заполните их в точности теми данными, которые мы получили на предыдущем этапе (обратите внимание, что регистр символов здесь критически важен!):
    - В поле Пользовательский Intent Action пропишите: com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST
    - В поле Пользовательский Intent Extra пропишите: EXTRA_BARCODE_DECODING_DATA
  6. Сохраните изменения в настройках оборудования.

Проанализируем дополнительные нюансы работы

После применения описанных выше настроек перезапустите мобильное приложение. Теперь при считывании любых штрихкодов, в том числе содержащих кириллицу, драйвер будет стабильно генерировать внешнее событие в 1С. Однако, при использовании режима Broadcast, стоит помнить о нескольких важных моментах:

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

Обновление драйверов: Если в вашей конфигурации в настройках оборудования отсутствует пункт "Broadcast", это означает, что используется устаревшая версия компоненты. Рекомендуем обновить драйвер Native API. Самую актуальную компоненту можно выгрузить из свежего релиза типовой конфигурации 1С:Библиотека подключаемого оборудования для мобильных приложений или взять из типовых мобильных клиентов (например, 1С:Кладовщик).

Разрядность мобильной платформы: При переходе на новые версии (8.3.21, 8.3.22 и выше) учитывайте разрядность приложения (32-бит или arm64). Как правило, Native компоненты для работы с оборудованием поддерживают обе архитектуры, однако на некоторых устройствах могут возникать ошибки при попытке подключения оборудования именно на 64-битной версии мобильного клиента. Если драйвер падает при инициализации, попробуйте установить 32-битный APK-файл мобильной платформы.

Используя режим Broadcast, вы не только решите проблему с русскими буквами в штрихкодах, но и значительно повысите общую скорость и стабильность сканирования на складе или в торговом зале.

← На главную