Многие разработчики мобильных приложений на платформе 1С сталкиваются с проблемой: при использовании встроенного сканера в ТСД, приложение не реагирует на событие сканирования программно. Давайте разберем, почему это происходит и как заставить сканер работать корректно с вашей конфигурацией.
Первое, что необходимо понять — как именно ваш терминал передает данные в операционную систему Android. В большинстве случаев китайские ТСД, такие как Sunlux, по умолчанию настроены в режиме Keyboard Emulation (эмуляция клавиатуры). В этом режиме сканер после считывания штрихкода просто «печатает» его в активное текстовое поле, как если бы вы вводили цифры с клавиатуры.
Проблема заключается в том, что 1С не получает «событие» сканирования, так как с точки зрения Android произошло обычное нажатие клавиш. Если курсор не установлен в нужное поле ввода, отсканированные данные просто теряются или попадают не туда. Именно поэтому стандартные механизмы ОбработкаОповещения или ВнешнееСобытие не срабатывают — они ожидают сигнал от драйвера устройства, а не ввод текста с клавиатуры.
Это наиболее профессиональный путь интеграции. Broadcast Intent — это механизм Android, при котором сканер рассылает «широковещательное сообщение» по всей системе. Ваше приложение может «подписаться» на это сообщение и перехватить его.
Для реализации этого метода в 1С потребуется использовать внешнюю компоненту (разработанную на Java или Kotlin), так как стандартная платформа 8.3.15 не обладает встроенным «слушателем» Android-интентов.
Если нет возможности перенастроить сканер или использовать внешнюю компоненту, можно воспользоваться тем, что сканер «печатает» данные в поле. Рассмотрим подход, при котором мы программно фокусируем поле ввода:
Чтобы данные не терялись, можно сделать следующее:
ПриИзменении для этого поля обрабатывать полученные данные.Однако помните, что этот метод является «костылем» и не гарантирует стабильную работу, так как при случайном нажатии пользователем в другое место экрана фокус будет потерян.
Вы упоминали БПО (Библиотеку подключаемого оборудования). Важно понимать, что для работы БПО в мобильном приложении необходимо выполнение двух условий:
Если вы хотите использовать БПО, рекомендуем выполнить следующие действия:
ДрайверыОборудования в вашей конфигурации.Чтобы решить задачу эффективно, проанализируйте документацию к вашему устройству Sunlux на предмет поддержки Scanner SDK или Intent Broadcast. Если устройство бюджетное, лучше сразу идти по пути перехвата Intent, так как это даст вам полный контроль над процессом сканирования, не зависящий от фокуса ввода на экране.
Не забывайте, что при написании кода для обработки событий в мобильном клиенте необходимо учитывать специфику работы мобильной платформы, используя методы ПодключитьВнешнююКомпоненту, если вы решите писать свой обработчик интентов на Java.
Желаем успехов в интеграции вашего оборудования!