Как подключить Native-компоненту сканера штрихкода на ТСД в мобильном клиенте 1С на Android

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

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

Проблема разрядности мобильного клиента

Первое, с чем мы сталкиваемся при внедрении — это выбор правильного дистрибутива мобильного клиента. Проанализируем ситуацию: на многих современных ТСД установлены 64-битные процессоры, однако нативная компонента 1С (особенно старых версий или извлеченная из типовых конфигураций вроде УНФ) может некорректно работать в 64-битной среде. Основной симптом — бесконечное требование «перезагрузиться для обновления» после установки драйвера.

Для решения этой проблемы рекомендуется использовать 32-битную версию мобильного клиента (1cem-client-arm.apk). Практика показывает, что именно на 32-битной архитектуре нативные библиотеки .so загружаются стабильнее, а внешние события корректно пробрасываются в платформу 1С.

Подбор и подготовка драйвера

Выясним причину, по которой типовые драйверы из БПО могут не заводиться — есть автоматизация склада с прямым подключением ТСД. Часто в конфигурациях зашиты устаревшие версии, не поддерживающие архитектуру Android 11+. Рассмотрим по шагам процесс подготовки:

  1. Найдем актуальную версию драйвера 1С:Сканер штрихкода (NativeApi). Хорошие результаты показывает версия 10.4.2.6 и выше. Ее можно извлечь из свежих релизов 1С:УНФ или 1С:Розница.
  2. Драйвер должен быть оформлен как Внешняя компонента в макете конфигурации.
  3. Убедимся, что внутри ZIP-архива компоненты присутствуют библиотеки для нужных архитектур (папки libs/armeabi-v7a).

Программное подключение компоненты

Разберем код, который позволяет инициализировать сканер вручную, минуя возможные скрытые ошибки типовых механизмов БПО — удобнее использовать готовое решение для маркировки на ТСД. Нам необходимо выполнить установку, подключение и создание объекта драйвера.

Рассмотрим пример кода для инициализации:


// 1. Устанавливаем и подключаем компоненту из общего макета
РезультатУстановки = УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1СУстройстваВводаNative");

Если РезультатУстановки Тогда
    РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1СУстройстваВводаNative", "InputDevice", ТипВнешнейКомпоненты.Native);
    
    Если РезультатПодключения Тогда
        // 2. Создаем экземпляр объекта
        ОбъектДрайвера = Новый ("AddIn.InputDevice.InputDevice");
        
        // 3. Настраиваем работу через Broadcast Intent
        ОбъектДрайвера.УстановитьПараметр("BluetoothDevice", "BROADCAST");
        
        // Эти параметры зависят от модели вашего ТСД
        ОбъектДрайвера.УстановитьПараметр("Action", "com.android.scanner.broadcast");
        ОбъектДрайвера.УстановитьПараметр("Extra", "scandata");
        
        // 4. Активируем устройство
        Результат = ОбъектДрайвера.Подключить("");
        
        Если Результат Тогда
             // Сохраняем объект в глобальную переменную, чтобы он не удалился сборщиком мусора
             глТорговоеОборудование.Вставить("Сканер", ОбъектДрайвера);
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Настройка Intent: Action и Extra

Проанализируем ситуацию, когда драйвер подключен, тест проходит успешно, но события при сканировании не приходят. Причина кроется в несовпадении настроек в системном приложении сканера (DataWedge, Scanner Settings) и параметров, переданных в объект драйвера 1С.

Broadcast Intent работает по принципу «радиостанции»: сканер вещает сообщение с определенным именем (Action), а 1С «слушает» именно это имя. Внутри сообщения лежит «конверт» с данными (Extra).

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

Обработка событий в коде 1С

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

Важный нюанс: Событие может приходить во все открытые формы, но по стандарту 1С оно должно обрабатываться сначала в активной форме. Посмотрим на типовую структуру обработки:


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

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

Настройка веб-сервера (IIS/Apache)

Иногда компонента отказывается скачиваться на устройство из-за блокировок на стороне сервера. Проанализируем настройки MIME-типов. Для корректной передачи файлов на Android-устройство в настройках IIS следует добавить расширения:

Без этих настроек сервер может отдавать ошибку 404 или 403 при попытке мобильного клиента скачать нативную библиотеку драйвера.

Диагностика и поиск неисправностей

Если ничего не помогает, воспользуемся инструментами разработчика Android. Подключим ТСД к компьютеру и через ADB Logcat посмотрим, какие интенты реально отправляет устройство при нажатии на курок сканера. Команда adb logcat | grep -i intent покажет точное имя Action, которое нужно прописать в коде 1С. Это исключит гадание на документации производителя, которая часто бывает неточной.

← На главную