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

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

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

Разбор архитектуры: Клавиатура или Broadcast?

Прежде чем писать код, нам необходимо понять, как именно сканер ТСД передает данные в операционную систему Android. Существует два основных режима:

  1. Эмуляция клавиатуры (Keyboard Emulation): Сканер «печатает» штрихкод в активное поле ввода. В этом режиме внешнее событие в 1С не генерируется. Это удобно для простых задач, но неудобно для профессиональной разработки, так как фокус всегда должен быть в текстовом поле.
  2. Широковещательное сообщение (Broadcast Intent): Сканер отправляет системное сообщение в Android. Внешняя компонента 1С перехватывает его и вызывает процедура ОбработкаВнешнегоСобытия. Это профессиональный подход, позволяющий сканировать в любом месте программы. Именно так работает настраиваемое мобильное приложение для сканирования штрихкодов через механизмы Intent.

Для реализации второго варианта нам потребуется использовать внешнюю компоненту из БПО (Библиотеки подключаемого оборудования) и правильно её настроить.

Шаг 1. Инициализация драйвера в мобильном приложении

Рассмотрим процесс подключения внешней компоненты. Для стабильной работы крайне важно объявить переменную драйвера как глобальную (например, в модуле приложения или в общем модуле с признаком «Клиент»), чтобы сборщик мусора Android не удалил объект из памяти.

Проанализируем пример кода для инициализации компоненты:


// В модуле управляемого приложения
Перем глДрайверСкана Экспорт;

Процедура ПриНачалеРаботыСистемы()
    
    // Пытаемся установить и подключить компоненту из макета
    РезультатУстановки = УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода");
    
    Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода", "InputDevice", ТипВнешнейКомпоненты.Native) Тогда
        
        глДрайверСкана = Новый("AddIn.InputDevice.InputDevice");
        
        // Указываем, что будем слушать системные сообщения (Broadcast)
        глДрайверСкана.УстановитьПараметр("BluetoothDevice", "BROADCAST");
        
        // Настройка параметров обработки данных
        глДрайверСкана.УстановитьПараметр("OutputDataType", 0); // Данные возвращаются как строка
        глДрайверСкана.УстановитьПараметр("Timeout", 35);
        
        // Подключаем устройство программно
        IDParametr = "";
        Результат = глДрайверСкана.Подключить(IDParametr);
        
        Если Результат Тогда
            Сообщить("Сканер успешно подключен и ожидает данных.");
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Шаг 2. Настройка Intent параметров (Action и Extra)

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

Рассмотрим, как прописать эти параметры в коде для конкретного устройства (на примере M3 Mobile):


// Эти параметры должны соответствовать настройкам в приложении Scanner на самом ТСД
глДрайверСкана.УстановитьПараметр("Action", "com.android.server.scannerservice.broadcast");
глДрайверСкана.УстановитьПараметр("Extra", "m3scannerdata");
глДрайверСкана.УстановитьПараметр("Category", "android.intent.category.DEFAULT");

Если вы не знаете параметры вашего ТСД, выполните следующие действия:

  1. Зайдите в настройки Android на ТСД.
  2. Найдите пункт Scanner или Barcode.
  3. Перейдите в раздел Intent Output или Broadcast Settings.
  4. Там вы увидите поля Intent Action и Intent String Extra. Скопируйте эти значения в код 1С.

Ниже приведен список стандартных настроек для популярных моделей:

Шаг 3. Обработка полученных данных

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


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

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

Почему сканер может молчать? Выясняем причины

Если вы все настроили, но данных нет, проанализируем типичные ошибки:

Использование связки Native-компоненты 1С и Broadcast Intent является наиболее стабильным способом автоматизации склада. Это позволяет избежать проблем с переключением раскладки клавиатуры и необходимостью постоянно держать фокус в поле ввода. Для этого также разработана обработка для инвентаризации с мобильных устройств и ТСД.

← На главную