Интеграция мобильных устройств сбора данных (ТСД) в экосистему 1С — задача, с которой сталкивается практически каждый разработчик складских или логистических приложений. ТСД фирмы Zebra являются стандартом индустрии, и их основной инструмент управления — DataWedge. Однако при попытке связать мобильный клиент 1С и API DataWedge через систему интентов часто возникают сложности. Рассмотрим подробно, как заставить этот «каменный цветок» ожить, и разберем типичные ошибки при настройке.
Для управления аппаратным сканером в устройствах Zebra используется механизм Android Intent. В контексте 1С это реализуется через объект ЗапускПриложенияМобильногоУстройства. Проанализируем типичный пример кода, который часто вызывает затруднения у разработчиков при попытке программно отключить или включить плагин сканера:
ИнтентБлокировки = Новый ЗапускПриложенияМобильногоУстройства;
ИнтентБлокировки.Действие = "com.symbol.datawedge.api.ACTION";
ИнтентБлокировки.ДополнительныеДанные.Добавить("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "DISABLE_PLUGIN");
Результат = ИнтентБлокировки.Запустить(Истина);
Сообщить(Результат);
В этой ситуации метод Запустить(Истина) может возвращать 0, но фактически действие не выполняется. Выясним причину: DataWedge ожидает широковещательные сообщения (Broadcast Intents), и для корректной отработки команды необходимо правильно настроить профиль самого приложения на ТСД.
Прежде чем приступать к написанию кода в 1С, мы должны подготовить среду на самом ТСД. Без правильной конфигурации профиля DataWedge 1С просто не увидит входящие данные. Разберем по шагам процесс настройки:
com.e1c.mobile (или ID вашей сборки мобильного приложения).ru.mycompany.scan.ACTION. Эту же строку мы будем использовать в 1С для фильтрации событий.Одной из самых коварных проблем при интеграции является использование категорий интентов. Проанализируем опыт разработчиков: во многих инструкциях и примерах для Android указывается, что необходимо передавать android.intent.category.DEFAULT. Однако практика показывает, что на многих моделях Zebra (например, TC25 с Android 7) наличие этого параметра блокирует передачу данных в 1С.
Вывод: При настройке профиля DataWedge в разделе Intent Output поле Intent Category следует оставить пустым. Если вы используете внешнюю компоненту для перехвата событий, также убедитесь, что в фильтрах не прописана категория по умолчанию.
После того как сканер настроен на отправку Broadcast Intent, нам нужно научить 1С принимать эти данные. Рассмотрим основные подходы:
Самый надежный способ для старых версий платформы — использование внешней компоненты для перехвата Android-интентов. Такая компонента подписывается на системные сообщения и транслирует их в стандартное событие 1С ОбработкаВнешнегоСобытия.
При получении данных из DataWedge следует обращать внимание на ключи в экстра-данных интента:
com.symbol.datawedge.data_string — здесь содержится считанный штрихкод.com.symbol.datawedge.label_type — тип штрихкода (например, LABEL-TYPE-EAN13).Начиная с версии мобильной платформы 8.3.18, компания 1С значительно упростила жизнь разработчикам. Теперь в Библиотеке подключаемого оборудования (БПО) предусмотрен драйвер "1С:Сканер штрихкодов (Android)" с поддержкой режима Intent. Разберем, как это использовать:
ru.mycompany.scan.ACTION).Иногда требуется реализовать кнопку «Сканировать» прямо в интерфейсе 1С, чтобы пользователю не обязательно было нажимать физическую кнопку на корпусе ТСД. Посмотрим на пример кода для программной активации сканера:
ИнтентСканирования = Новый ЗапускПриложенияМобильногоУстройства;
ИнтентСканирования.Действие = "com.symbol.datawedge.api.ACTION";
ИнтентСканирования.ДополнительныеДанные.Добавить("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING");
ИнтентСканирования.Запустить(Ложь);
Для остановки луча используется параметр STOP_SCANNING. Также полезно знать о командах SUSPEND_PLUGIN и RESUME_PLUGIN. В отличие от полной деактивации плагина (DISABLE_PLUGIN), приостановка работает мгновенно и не требует времени на повторную инициализацию оборудования, что повышает комфорт работы пользователя.
Если данные все равно не приходят, проанализируем ситуацию с помощью сторонних утилит. Рекомендуется установить на ТСД приложение типа Intent Interceptor. Это позволит увидеть:
Помните, что использование режима Keystroke Output (эмуляция клавиатуры) — это тупиковый путь для профессиональной разработки. Он медленный, зависит от фокуса ввода и не позволяет обрабатывать типы штрихкодов. Настройка через Intent требует больше времени на начальном этапе, но обеспечивает стабильную и быструю работу складского приложения.