При разработке мобильных приложений для терминалов сбора данных (ТСД) начинающие разработчики часто сталкиваются с тем, что стандартные средства платформы ведут себя не так, как ожидалось. Типовая команда СредстваМультимедиа.ПоказатьСканированиеШтрихКодов активирует встроенную фотокамеру устройства, что категорически не подходит для профессиональной работы. На устройствах вроде Urovo i6200 установлен специализированный лазерный или имидж-сканер, который работает в десятки раз быстрее и точнее камеры. В этой статье мы подробно разберем, как правильно интегрировать аппаратное сканирование в ваше самописное приложение на базе мобильной платформы 1С:Предприятие.
Разберем ситуацию: команда СредстваМультимедиа.ПоказатьСканированиеШтрихКодов предназначена для универсальных мобильных устройств (смартфонов и планшетов), где нет выделенного модуля сканирования. При ее вызове операционная система запускает интерфейс видеоискателя, анализирует изображение и пытается распознать код программно.
Основные недостатки этого метода для ТСД:
Проанализируем наиболее надежное решение — использование внешней компоненты из состава БПО. Фирма 1С поставляет специальный драйвер 1С:Сканер штрихкода (NativeApi), который умеет перехватывать сообщения от операционной системы Android. Это позволяет приложению получать данные штрихкода в фоновом режиме через событие ВнешнееСобытие.
Рассмотрим алгоритм подключения:
Scanner1CNative_m.zip или аналогичный файл в зависимости от версии).Чтобы 1С «услышала» сканер, необходимо правильно настроить само устройство. По умолчанию многие ТСД работают в режиме Keyboard Mode (эмуляция клавиатуры), когда штрихкод просто «печатается» в то поле, где стоит курсор. Это плохой путь, так как данные могут теряться, а приложение не может отличить ввод со сканера от ручного ввода.
Выясним, как настроить режим Intent на Urovo i6200:
android.intent.ACTION_DECODE_DATA.barcode_string.Теперь разберем, как написать код для приема данных. Весь процесс строится на обработке внешнего события. В модуле управляемого приложения или в модуле конкретной формы (если сканирование нужно только там) необходимо реализовать перехват.
Пример структуры кода для обработки события:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проанализируем источник события
Если Источник = "BarcodeScanner" Тогда
// Обработаем полученный штрихкод
Штрихкод = СокрЛП(Данные);
ПоискТовараПоШтрихкоду(Штрихкод);
КонецЕсли;
КонецПроцедуры
Важно помнить, что если вы используете компоненту БПО, то параметры Источник и Событие будут зависеть от того, как вы инициализировали драйвер при запуске приложения. Обычно это настраивается один раз в процедуре инициализации торгового оборудования.
На Urovo i6200 есть физические кнопки сканирования (обычно желтого цвета по бокам). При использовании режима Intent вам не нужно программно описывать нажатие этих кнопок. Настройка в системной утилите Scanner связывает физическую кнопку с активацией луча и последующей отправкой Intent-сообщения в 1С.
Однако, если вам требуется по нажатию кнопки на экране 1С заставить ТСД включить луч (программный вызов), вам придется отправить ответный Intent системе Android. Для этого также используются методы внешней компоненты БПО, такие как ОбъектДрайвера.ВыполнитьКоманду("StartScan") (точные названия команд зависят от версии драйвера).
Urovo i6200 — проверенная, но достаточно старая модель. Она работает на Android версии 4.x или 5.1. Это накладывает определенные ограничения на разработку:
Для качественной работы со сканером на Urovo i6200 забудьте про СредстваМультимедиа. Используйте внешнюю компоненту БПО, настройте на ТСД Intent Output и обрабатывайте результат через ВнешнееСобытие. Это обеспечит промышленную скорость работы и надежность вашего мобильного решения.