Как настроить сканирование штрихкодов в мобильном приложении 1С на ТСД под Android?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выясняем причины отсутствия реакции в 1С

Первое, что необходимо понять — как именно ваш терминал передает данные в операционную систему Android. В большинстве случаев китайские ТСД, такие как Sunlux, по умолчанию настроены в режиме Keyboard Emulation (эмуляция клавиатуры). В этом режиме сканер после считывания штрихкода просто «печатает» его в активное текстовое поле, как если бы вы вводили цифры с клавиатуры.

Проблема заключается в том, что 1С не получает «событие» сканирования, так как с точки зрения Android произошло обычное нажатие клавиш. Если курсор не установлен в нужное поле ввода, отсканированные данные просто теряются или попадают не туда. Именно поэтому стандартные механизмы ОбработкаОповещения или ВнешнееСобытие не срабатывают — они ожидают сигнал от драйвера устройства, а не ввод текста с клавиатуры.

Вариант 1: Настройка режима Broadcast Intent

Это наиболее профессиональный путь интеграции. Broadcast Intent — это механизм Android, при котором сканер рассылает «широковещательное сообщение» по всей системе. Ваше приложение может «подписаться» на это сообщение и перехватить его.

  1. Найдите на ТСД приложение для настройки сканера (обычно это Scanner Settings или Barcode Settings).
  2. В настройках вывода (Data Output или Output Mode) переключите режим с Keyboard Emulation на Broadcast Intent.
  3. Вам потребуется уточнить параметры этого события: Action name и Extra key. Без них вы не сможете «поймать» данные в коде.

Для реализации этого метода в 1С потребуется использовать внешнюю компоненту (разработанную на Java или Kotlin), так как стандартная платформа 8.3.15 не обладает встроенным «слушателем» Android-интентов.

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

Если нет возможности перенастроить сканер или использовать внешнюю компоненту, можно воспользоваться тем, что сканер «печатает» данные в поле. Рассмотрим подход, при котором мы программно фокусируем поле ввода:

Чтобы данные не терялись, можно сделать следующее:

  1. Создать на форме невидимое или скрытое поле ввода.
  2. При открытии формы принудительно устанавливать фокус на это поле.
  3. В процедуре ПриИзменении для этого поля обрабатывать полученные данные.

Однако помните, что этот метод является «костылем» и не гарантирует стабильную работу, так как при случайном нажатии пользователем в другое место экрана фокус будет потерян.

Почему БПО не «взлетело»?

Вы упоминали БПО (Библиотеку подключаемого оборудования). Важно понимать, что для работы БПО в мобильном приложении необходимо выполнение двух условий:

Если вы хотите использовать БПО, рекомендуем выполнить следующие действия:

  1. Обновите мобильную платформу на ТСД до актуальной версии.
  2. Проверьте, предоставляет ли производитель (Sunlux) драйвер именно для 1С (архив с расширением .zip, содержащий файл манифеста и .so библиотеки).
  3. Подключите этот драйвер в справочнике ДрайверыОборудования в вашей конфигурации.

Итоговые рекомендации по работе

Чтобы решить задачу эффективно, проанализируйте документацию к вашему устройству Sunlux на предмет поддержки Scanner SDK или Intent Broadcast. Если устройство бюджетное, лучше сразу идти по пути перехвата Intent, так как это даст вам полный контроль над процессом сканирования, не зависящий от фокуса ввода на экране.

Не забывайте, что при написании кода для обработки событий в мобильном клиенте необходимо учитывать специфику работы мобильной платформы, используя методы ПодключитьВнешнююКомпоненту, если вы решите писать свой обработчик интентов на Java.

Желаем успехов в интеграции вашего оборудования!

← На главную