Работа с терминалами сбора данных (ТСД) в мобильном клиенте 1С часто сопряжена с трудностями при попытке уйти от медленной эмуляции клавиатуры к использованию полноценных событий сканирования — для решения этих задач есть комплексное решение складской автоматизации на ТСД. В этой статье мы подробно разберем, как подключить нативную компоненту сканера, настроить перехват сообщений через Broadcast Intent и обеспечим стабильную работу оборудования даже в автономном режиме.
Первое, с чем мы сталкиваемся при внедрении — это выбор правильного дистрибутива мобильного клиента. Проанализируем ситуацию: на многих современных ТСД установлены 64-битные процессоры, однако нативная компонента 1С (особенно старых версий или извлеченная из типовых конфигураций вроде УНФ) может некорректно работать в 64-битной среде. Основной симптом — бесконечное требование «перезагрузиться для обновления» после установки драйвера.
Для решения этой проблемы рекомендуется использовать 32-битную версию мобильного клиента (1cem-client-arm.apk). Практика показывает, что именно на 32-битной архитектуре нативные библиотеки .so загружаются стабильнее, а внешние события корректно пробрасываются в платформу 1С.
Выясним причину, по которой типовые драйверы из БПО могут не заводиться — есть автоматизация склада с прямым подключением ТСД. Часто в конфигурациях зашиты устаревшие версии, не поддерживающие архитектуру Android 11+. Рассмотрим по шагам процесс подготовки:
1С:Сканер штрихкода (NativeApi). Хорошие результаты показывает версия 10.4.2.6 и выше. Ее можно извлечь из свежих релизов 1С:УНФ или 1С:Розница.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. Активируем устройство
Результат = ОбъектДрайвера.Подключить("");
Если Результат Тогда
// Сохраняем объект в глобальную переменную, чтобы он не удалился сборщиком мусора
глТорговоеОборудование.Вставить("Сканер", ОбъектДрайвера);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Проанализируем ситуацию, когда драйвер подключен, тест проходит успешно, но события при сканировании не приходят. Причина кроется в несовпадении настроек в системном приложении сканера (DataWedge, Scanner Settings) и параметров, переданных в объект драйвера 1С.
Broadcast Intent работает по принципу «радиостанции»: сканер вещает сообщение с определенным именем (Action), а 1С «слушает» именно это имя. Внутри сообщения лежит «конверт» с данными (Extra).
Посмотрим на примеры настроек для популярных моделей:
com.android.scanner.broadcast, Extra — data (или scandata).com.ptm.action.SCANNER_DATA, Extra — value.УстановитьПараметр были переданы идентичные значения.Выясним, где ловить отсканированный штрихкод. После успешного подключения события будут попадать в процедуру ВнешнееСобытие на формах.
Важный нюанс: Событие может приходить во все открытые формы, но по стандарту 1С оно должно обрабатываться сначала в активной форме. Посмотрим на типовую структуру обработки:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Источник — это имя, которое мы дали при подключении ("InputDevice")
// Событие — обычно "ScanData" или "Штрихкод"
// Данные — сам считанный штрихкод
Если Источник = "InputDevice" Тогда
ОбработатьШтрихкод(Данные);
КонецЕсли;
КонецПроцедуры
Если вы используете автономный режим мобильного клиента, убедитесь, что компонента была загружена и установлена при наличии связи, так как в чистом офлайне скачать библиотеку с сервера IIS не получится. Для этой задачи есть приложение для ТСД: сканирование и маркировка.
Иногда компонента отказывается скачиваться на устройство из-за блокировок на стороне сервера. Проанализируем настройки MIME-типов. Для корректной передачи файлов на Android-устройство в настройках IIS следует добавить расширения:
.so — тип application/octet-stream.apk — тип application/vnd.android.package-archiveБез этих настроек сервер может отдавать ошибку 404 или 403 при попытке мобильного клиента скачать нативную библиотеку драйвера.
Если ничего не помогает, воспользуемся инструментами разработчика Android. Подключим ТСД к компьютеру и через ADB Logcat посмотрим, какие интенты реально отправляет устройство при нажатии на курок сканера. Команда adb logcat | grep -i intent покажет точное имя Action, которое нужно прописать в коде 1С. Это исключит гадание на документации производителя, которая часто бывает неточной.