Внедрение терминалов сбора данных (ТСД) на базе операционной системы Android в инфраструктуру предприятий — один из самых популярных способов автоматизации складского учета, логистики и розничной торговли. Однако разработчики мобильных приложений на платформе 1С часто сталкиваются с технической проблемой: как заставить встроенный лазерный или имидж-сканер ТСД передавать считанные штрихкоды напрямую в конфигурацию 1С при нажатии на физическую кнопку сканирования (кнопку Scan)?
В этой статье мы подробно разберем, как решить эту задачу с помощью Мобильной библиотеки подключаемого оборудования (мБПО), правильно настроить сам терминал (на примере популярного ТСД Chainway C4050 Q4) и написать стабильный код для перехвата событий сканирования в управляемых формах мобильного приложения.
Когда мы запускаем мобильное приложение 1С на обычном смартфоне, для сканирования штрихкодов чаще всего используется встроенная фотокамера. Платформа 1С умеет обращаться к ней напрямую. Но профессиональный ТСД оборудован специализированным аппаратным сканирующим модулем (лазерным светодиодом или фото-матрицей). Для операционной системы Android этот модуль является отдельным периферийным устройством.
Если просто установить мобильную платформу 1С на ТСД, нажатие физической кнопки сканирования либо вообще ни к чему не приведет, либо штрихкод будет вставляться хаотично, как обычный текст с клавиатуры, ломая интерфейс приложения. Наша задача — настроить систему так, чтобы при успешном сканировании мобильная платформа генерировала внутреннее событие 1С, которое мы сможем обработать в коде конфигурации.
Прежде чем переходить к программированию в 1С, необходимо правильно настроить службу сканера на самом ТСД под управлением Android. На терминалах Chainway (и многих других марках, таких как Urovo, Атол, Honeywell) за работу встроенного сканера отвечает предустановленное системное приложение — утилита Keyboardemulator (или аналогичная Barcode Utility).
Выполним последовательную настройку утилиты на ТСД:
Для интеграции торгового оборудования фирма 1С предоставляет готовое решение — Библиотеку подключаемого оборудования для мобильных приложений (мБПО). Мы настоятельно рекомендуем использовать именно ее, так как она содержит готовые шаблоны интеграции, сертифицированные драйверы и демонстрационную базу данных, на которой можно протестировать любые комбинации настроек.
Рассмотрим важный нюанс, с которым столкнулся автор темы: использование стандартного драйвера Native API (разработки 1С) на некоторых моделях ТСД со старыми версиями Android или специфическими прошивками может не дать результата. В этом случае наиболее надежным и стабильным решением является использование драйвера «Устройство ввода».
Для настройки оборудования в мобильном приложении выполним следующие действия:
После того как оборудование зарегистрировано в системе, нам необходимо написать программный перехватчик в конфигурации. Мобильная платформа 1С общается с драйверами асинхронно через систему внешних событий и глобальных оповещений.
Рассмотрим правильную схему инициализации и перехвата штрихкода.
Сначала при старте приложения или при открытии формы документа нам нужно подключить глобальный обработчик оповещений. Это делается в модуле управляемого приложения или непосредственно при создании формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Подключаем глобальный обработчик оповещений для приема сигналов от оборудования
ПодключитьОбработчикОповещения("ГлобальнаяОбработкаОповещения");
КонецПроцедуры
Далее в модуле формы, где ведется работа со сканированием (например, форма подбора товаров или инвентаризации), мы инициализируем стандартную экспортную процедуру ОбработкаОповещения. Именно сюда драйвер мБПО «Устройство ввода» будет присылать данные расшифрованного штрихкода после нажатия физической кнопки ТСД:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Проверяем, что оповещение пришло именно от подсистемы подключаемого оборудования
Если Источник = "ПодключаемоеОборудование" Или Источник = "BarCodeScan" Тогда
// Анализируем имя события
Если ИмяСобытия = "ВладелецОповещения" Или ИмяСобытия = "Штрихкод" Тогда
// Получаем штрихкод из параметра оповещения
ТекущийШтрихкод = СокрЛП(Параметр);
// Запускаем нашу логику обработки считанного штрихкода
ОбработатьПолученныйШтрихкод(ТекущийШтрихкод);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьПолученныйШтрихкод(Штрихкод)
// Здесь мы пишем прикладную логику: поиск товара, добавление в табличную часть, запрос к веб-сервису
ПоказатьОповещениеПользователя("Сканирование", , "Считан штрихкод: " + Штрихкод, СтатусОповещения.Информация);
// Пример поиска товара в локальной кэш-таблице мобильного приложения
// ... Код поиска товара по штрихкоду ...
КонецПроцедуры
Описанный выше метод клавиатурной эмуляции («Scan Content on Cursor») прост в реализации, но имеет существенный недостаток: сканирование работает только тогда, когда фокус ввода находится на форме (или активна конкретная строка ввода). Если пользователь случайно закроет активное поле или откроется модальное окно предупреждения, штрихкод может не считаться или вставиться некорректно.
Для крупных промышленных решений более надежным методом является использование Broadcast Intents (Широковещательных сообщений Android). При таком подходе операционная система Android при сканировании отправляет фоновое системное событие, которое мобильное приложение 1С ловит независимо от фокуса курсора.
Рассмотрим, как настроить этот режим:
com.scanner.broadcast.barcode_string.При такой настройке считанные данные будут поступать в предопределенную процедуру мобильной платформы ОбработкаВнешнегоСобытия:
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Обрабатываем аппаратное событие от сканера Native API в режиме Broadcast
Если Источник = "СканерШтрихкода" Или Источник = "BarCodeScan" Тогда
Штрихкод = СокрЛП(Данные);
ОбработатьПолученныйШтрихкод(Штрихкод);
КонецЕсли;
КонецПроцедуры
При тестировании встроенных сканеров разработчики часто сталкиваются с аппаратными особенностями ТСД и ОС Android. Проанализируем самые частые из них:
.so) во внутреннюю память устройства, необходимо в системных настройках Android для приложения 1С разрешить параметр «Установка приложений из неизвестных источников», а также выдать все права на доступ к памяти устройства.Используя предложенные методики настройки утилиты ТСД и возможности мобильной библиотеки подключаемого оборудования 1С, вы сможете реализовать быстрое, стабильное и удобное сканирование штрихкодов без использования костылей, превратив ваш Android-терминал в полноценный рабочий инструмент кладовщика.