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

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

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

Разбираем механизм работы через Intent Broadcast

Для начала проанализируем, как именно данные попадают из сканера в 1С. В современных ТСД на базе Android существует два основных режима работы сканера: Keyboard Wedge (эмуляция клавиатуры) и Intent (широковещательное сообщение). Для профессиональной разработки в 1С мы всегда выбираем Intent или Android Native API для перехвата сканирования, так как это позволяет системе получать данные в фоновом режиме, не привязываясь к фокусу на конкретном поле ввода.

Когда вы нажимаете кнопку сканирования, операционная система Android отправляет «сигнал» (интент). Наше мобильное приложение должно быть настроено на «прослушивание» именно этого сигнала. Если параметры сигнала в настройках ТСД и в коде 1С не совпадают, процедура ОбработкаВнешнегоСобытия никогда не будет вызвана.

Настройка параметров Интента в коде 1С

Выясним причину, по которой событие может не возникать. Чаще всего она кроется в жестко прописанных строковых значениях Action (Действие) и Extra data (Наименование данных). Рассмотрим пример кода, который необходимо разместить в модуле для инициализации сканера:


// Пример настройки параметров для ТСД XCheng
Интент = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST";
ИнтентДанные = "EXTRA_BARCODE_DECODING_DATA";

// Эти параметры должны быть переданы в метод подключения оборудования
// или использованы при настройке широковещательного приемника

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

Синхронизация с настройками самого терминала

Проанализируем ситуацию: что делать, если вы не знаете, какие параметры использует ваш ТСД? Нам необходимо зайти в системное приложение для настройки сканера на самом устройстве. Обычно оно называется Scanner, DataWedge или Scan settings. Внутри приложения нужно найти раздел Intent Output или Broadcast Config.

Там вы увидите два ключевых поля:

  1. Intent Action — именно это значение мы записываем в переменную Интент.
  2. Intent Data String (или Extra Key) — это значение идет в ИнтентДанные.

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

Реализация обработчика внешнего события

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

В модуле формы, где требуется сканирование, реализуем обработку:


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    // Проверим, что событие пришло именно от сканера
    // Источник и Событие зависят от настроек драйвера
    
    Штрихкод = СокрЛП(Данные);
    
    Если ЗначениеЗаполнено(Штрихкод) Тогда
        ОбработатьСканирование(Штрихкод);
    КонецЕсли;
    
КонецПроцедуры

Посмотрим на пример организации универсального кода. Чтобы не переписывать программу при смене модели ТСД, лучше всего вынести настройки интентов в справочник «Рабочие места» или в Константы. Тогда при запуске приложения 1С будет считывать нужные строки Action из базы данных и подставлять их в драйвер.

Типичные ошибки при настройке

Рассмотрим по шагам моменты, которые могут блокировать работу даже при правильном коде:

Проанализировав вышесказанное, мы видим, что ключ к успеху лежит в точной настройке соответствия между Android-системой и кодом 1С. Используя гибкие настройки для каждого рабочего места, вы сможете создать надежное решение, работающее с любыми моделями ТСД.

← На главную