Как настроить работу встроенного сканера ТСД Zebra в мобильном клиенте 1С без вызова экранной клавиатуры?

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

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

Разбор проблемы: почему не подходит режим эмуляции клавиатуры

По умолчанию многие ТСД Zebra настроены на передачу данных в активное поле ввода (режим Keystroke output). С точки зрения системы это выглядит так, будто пользователь очень быстро набрал текст на клавиатуре. Для 1С это создает две сложности:

  1. Необходимость фокуса: поле ввода должно быть всегда активно.
  2. Интерфейсный мусор: активация поля ввода неизбежно вызывает системную экранную клавиатуру Android.

Наша задача — перевести работу сканера в режим Broadcast Intent, когда данные передаются напрямую в приложение 1С как системное оповещение, не требуя фокуса на конкретном поле и не вызывая клавиатуру.

Решение 1: Настройка профиля Zebra DataWedge

Проанализируем системные настройки ТСД. Основным инструментом управления сканером на Zebra является приложение DataWedge. Разберем по шагам, как настроить профиль для мобильного клиента 1С:

  1. Откроем приложение DataWedge и создадим новый профиль (например, "1C_Mobile_Client").
  2. В разделе Associated Apps выберем пакет мобильного клиента 1С (обычно это com.e1c.mobile.client).
  3. Найдем раздел Keystroke output и снимем галочку Enabled. Это самое важное действие для отключения клавиатуры.
  4. Перейдем в раздел Intent output и установим галочку Enabled.
  5. В поле Intent delivery выберем значение Broadcast Intent.
  6. В поле Intent Action пропишем строку, которую мы будем указывать в 1С, например: com.zebra.1c.action.

Теперь ТСД вместо "печати" символов будет рассылать широковещательное сообщение в системе Android, которое мы сможем перехватить в коде 1С.

Решение 2: Использование внешних компонент (ВК)

Если штатные возможности БПО (Библиотеки подключаемого оборудования) не позволяют гибко настроить перехват интентов, воспользуемся специализированными внешними компонентами. Существуют проверенные решения, позволяющие мобильному клиенту подписываться на системные события Android.

Рассмотрим пример логики работы с такой компонентой. В модуле формы или в общем модуле необходимо инициализировать компоненту и настроить обработку события:


// Подключение внешней компоненты в мобильном клиенте
&НаКлиенте
Процедура ПодключитьСканерZebra()
    УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканера");
    ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСканера", "ZebraScanner", ТипВнешнейКомпоненты.Native);
    ОбъектСканера = Новый ("AddIn.ZebraScanner.ScannerExtension");
    
    // Настройка параметров интента, соответствующих профилю DataWedge
    ОбъектСканера.Action = "com.zebra.1c.action";
    ОбъектСканера.ExtraData = "com.symbol.datawedge.data_string";
    ОбъектСканера.ПодключитьОповещение();
КонецПроцедуры

При таком подходе данные будут приходить в процедуру ВнешнееСобытие формы, где мы сможем их обработать стандартным образом.

Решение 3: Сборка собственного APK мобильного клиента

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

Многие разработчики отмечают, что стабильная работа достигается только после сборки собственного APK-файла мобильного клиента через Сборщик мобильных приложений 1С. Рассмотрим, что это дает:

  1. Включение драйверов в поставку: вы можете включить необходимые макеты драйверов БПО непосредственно в состав приложения.
  2. Фиксация разрешений: в манифесте приложения можно явно указать права на доступ к оборудованию и работу с фоновыми процессами.
  3. Стабильность версий: вы гарантируете, что версия мобильной платформы соответствует версии сервера.

При сборке важно указать в настройках сборщика путь к базе и включить компоненты 1С для работы с торговым оборудованием. После этого в самой 1С при настройке подключаемого оборудования следует выбирать тип подключения "Интерт" (Intent) и указывать имена действий, настроенных в DataWedge.

Программное управление лучом сканера

Иногда требуется не только получать данные, но и программно управлять сканером (например, отключать его, пока идет обработка данных). Это можно сделать через DataWedge API. Выполним это с помощью команды отправки интента из 1С:


&НаКлиенте
Процедура УправлениеСканером(Включить = Истина)
    ПараметрыЗапуска = Новый ПараметрыЗапускаПриложения;
    Если Включить Тогда
        ПараметрыЗапуска.ДополнительныеДанные.Вставить("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN");
    Иначе
        ПараметрыЗапуска.ДополнительныеДанные.Вставить("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "DISABLE_PLUGIN");
    КонецЕсли;
    
    ЗапуститьПриложение("com.symbol.datawedge.api.ACTION", ПараметрыЗапуска);
КонецПроцедуры

Этот код позволяет гибко управлять поведением ТСД в зависимости от контекста текущей формы в мобильном клиенте.

Борьба с клавиатурой: дополнительные хитрости

Если вы всё же используете режим ввода в поле, но хотите скрыть клавиатуру, проанализируем следующие варианты:

Важный нюанс: при использовании современных версий Android (10 и выше) убедитесь, что мобильному клиенту выдано разрешение на работу поверх других окон и отключена оптимизация энергопотребления для приложения 1С и сервиса DataWedge, иначе системная шина интентов может "засыпать" вместе с устройством.

← На главную