При работе с мобильными устройствами на базе Android, особенно с профессиональными терминалами сбора данных (ТСД) марки Zebra, разработчики часто сталкиваются с проблемой: драйвер установлен, устройство видит сканер, но данные в 1С не поступают. Рассмотрим подробно, как организовать взаимодействие между системной утилитой DataWedge и Библиотекой подключаемого оборудования (БПО) 1С для мобильных приложений, используя наиболее стабильный механизм — Intent.
Прежде чем приступать к настройкам, разберем, почему стандартный метод «эмуляции клавиатуры» (Keystroke) не всегда подходит для профессиональной автоматизации. При эмуляции клавиатуры сканер просто «печатает» символы в активное поле. Это неудобно, так как требует фокуса на конкретном элементе интерфейса. Механизм Intent (намерения) работает иначе: система Android рассылает широковещательное сообщение, которое драйвер 1С «слушает» в фоновом режиме. Это позволяет корректно обрабатывать штрихкоды даже в тех случаях, когда на экране нет активного поля ввода.
Для начала проанализируем настройки на самом терминале Zebra. Нам необходимо создать или отредактировать профиль, который будет отвечать за передачу данных именно в наше мобильное приложение.
1C_Scanner) или выберем существующий (обычно это Profile0, но лучше создать отдельный).com.e1c.mobile.client или уникальное имя, заданное при сборке). Это гарантирует, что настройки сработают только тогда, когда запущена 1С.Broadcast intent.com.symbol.datawedge.ACTION или com.dwexample.ACTION.android.intent.category.DEFAULT.Теперь перейдем в интерфейс мобильного приложения 1С (демо-база БПО или ваша конфигурация) и настроим параметры оборудования. Выясним причину, почему данные могут не доходить: чаще всего это несовпадение строковых идентификаторов.
Проанализируем сопоставление полей:
com.dwexample.ACTION). Помним, что регистр букв важен!android.intent.category.DEFAULT).com.symbol.datawedge.data_stringString.Если в форме настройки драйвера в 1С присутствуют поля Standard android.intent.action и Standard Intent Extra, которые предлагают выбор из списка, выберем ACTION_MAIN или введем пользовательские значения вручную, если список не содержит нужного варианта.
Разберем ситуацию, когда штрихкод передается, но он некорректен (например, отсутствует контрольный символ в EAN13). ТСД Zebra по умолчанию могут отсекать часть данных. Чтобы это исправить, в настройках DataWedge внутри раздела Decoders (в подразделе EAN13) найдите опцию Check digit и убедитесь, что она включена.
Если мы работаем с маркировкой (DataMatrix), нам может потребоваться получение «сырых» данных для корректного разбора спецсимволов (FNC1). В этом случае в 1С вместо data_string иногда используют другой ключ:
com.symbol.datawedge.decode_data
Это поле передает штрихкод в виде массива байтов, что позволяет 1С более точно идентифицировать разделители в кодах GS1.
Проанализируем поведение системы в режиме ожидания. На Android 8.1 и новее агрессивные настройки энергосбережения могут «усыплять» процессы Intent-фильтров. Если сканирование перестает работать после выхода устройства из сна, выполним следующие действия:
Если вы самостоятельно дорабатываете мобильное приложение и не используете типовую форму БПО, важно понимать, как программно инициализируется слушатель событий. Рассмотрим концептуальную схему инициализации:
// Пример логики настройки Intent-фильтра в коде драйвера
ИнтентФильтр = Новый IntentFilter();
ИнтентФильтр.addAction("com.dwexample.ACTION"); // То самое действие из DataWedge
ИнтентФильтр.addCategory("android.intent.category.DEFAULT");
// Регистрация приемника для прослушивания сканера
AndroidПриемник = Новый BroadcastReceiver(ОбработкаСобытияСканирования);
КонтекстПриложения.registerReceiver(AndroidПриемник, ИнтентФильтр);
В самой функции ОбработкаСобытияСканирования мы будем извлекать данные по ключу:
Штрихкод = Интент.getStringExtra("com.symbol.datawedge.data_string");
ТипШтрихкода = Интент.getStringExtra("com.symbol.datawedge.label_type");
// Далее передаем Штрихкод в логику 1С
Чтобы окончательно убедиться, что всё «взлетело», выполним простой тест. Откроем в 1С форму, готовую к приему штрихкодов (например, подбор товаров). При нажатии на кнопку сканирования на корпусе Zebra, лазер должен активироваться, а после считывания в 1С должно сработать событие ВнешнееСобытие. Если лазер срабатывает, но в 1С ничего не происходит — проверьте еще раз соответствие строк Action и Extra. Они должны совпадать до последнего знака.
Рассмотренный метод является наиболее надежным для промышленной эксплуатации, так как он полностью изолирует процесс сканирования от пользовательского интерфейса, исключая ошибки ввода «не в то поле».