При разработке мобильных решений на платформе 1С:Предприятие разработчики часто сталкиваются с необходимостью сканирования штрихкодов и матричных QR-кодов. Однако вызов стандартного метода СредстваМультимедиа.ПоказатьСканированиеШтрихКодов() принудительно переключает интерфейс смартфона в ландшафтный (альбомный) режим. Для длинных линейных кодов 1D это может быть удобно, но при считывании квадратных QR-кодов поворот устройства вызывает неудобство у пользователей. Разберем причины такого поведения платформы и практические способы решения задачи в портретной ориентации.
Проанализируем работу встроенного видоискателя. Метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов() открывает отдельное системное окно (Activity в ОС Android), параметры отображения которого зафиксированы разработчиками платформы. В свойствах мобильного приложения, настройках форм или параметрах экранов разработчик не может переопределить эту ориентацию программно.
Чтобы предоставить пользователю возможность сканировать QR-коды вертикально, рассмотрим несколько проверенных альтернативных подходов.
Наиболее быстрый способ реализации без необходимости пересборки мобильной платформы с низкоуровневым кодом — использование объекта ЗапускПриложенияМобильногоУстройства. Мы можем вызвать установленное на устройстве приложение сканера, которое поддерживает работу в портретном режиме и умеет возвращать результат обратно в 1С.
Посмотрим на пример вызова внешнего сканера с получением считанных данных:
НовВз = Новый ЗапускПриложенияМобильногоУстройства;
НовВз.Действие = "la.droid.qr.scan";
НовВз.Приложение = "la.droid.qr";
Результат = НовВз.Запустить(Истина);
Если Результат = 0 Тогда
Для Каждого Стр Из НовВз.ДополнительныеДанные Цикл
// Обрабатываем полученные параметры сканирования
Сообщить("" + Стр.Ключ + Символы.ПС + Стр.Значение + Символы.ПС + Стр.ИмяТипа);
КонецЦикла;
КонецЕсли;
Разберем по шагам важные нюансы этого подхода:
Если решение разрабатывается для широкого круга клиентов или сторонних пользователей, требование устанавливать дополнительную программу-сканер может быть неприемлемым. В таком случае лучшим вариантом будет встраивание нативной компоненты (C++/Java) непосредственно в сборку мобильного приложения (APK или AAB).
Рассмотрим преимущества данного варианта:
ВнешнееСобытие формы или модуля управляемого приложения.Выясним еще один гибкий способ, не требующий вызова системных Activity платформы. Мы можем встроить функционал считывания прямо в макет управляемой формы мобильного клиента или мобильного приложения:
getUserMedia).Для корпоративных задач на складах и в розничной торговле оптимальным решением является отказ от программного сканирования камерой в пользу аппаратных сканеров-колец или терминалов сбора данных (ТСД). Подключение такого оборудования через Bluetooth в режиме эмуляции клавиатуры (HID) или перехват системных широковещательных сообщений (Broadcast Intent) позволяет считывать коды мгновенно в фоновом режиме, сохраняя текущий портретный экран рабочей формы 1С активным.