Как сохранить портретную ориентацию экрана при сканировании QR-кодов в мобильном приложении 1С?

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

При разработке мобильных решений на платформе 1С:Предприятие разработчики часто сталкиваются с необходимостью сканирования штрихкодов и матричных QR-кодов. Однако вызов стандартного метода СредстваМультимедиа.ПоказатьСканированиеШтрихКодов() принудительно переключает интерфейс смартфона в ландшафтный (альбомный) режим. Для длинных линейных кодов 1D это может быть удобно, но при считывании квадратных QR-кодов поворот устройства вызывает неудобство у пользователей. Разберем причины такого поведения платформы и практические способы решения задачи в портретной ориентации.

Почему штатный механизм разворачивает экран

Проанализируем работу встроенного видоискателя. Метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов() открывает отдельное системное окно (Activity в ОС Android), параметры отображения которого зафиксированы разработчиками платформы. В свойствах мобильного приложения, настройках форм или параметрах экранов разработчик не может переопределить эту ориентацию программно.

Чтобы предоставить пользователю возможность сканировать QR-коды вертикально, рассмотрим несколько проверенных альтернативных подходов.

Способ 1. Вызов внешнего специализированного сканера через Intent

Наиболее быстрый способ реализации без необходимости пересборки мобильной платформы с низкоуровневым кодом — использование объекта ЗапускПриложенияМобильногоУстройства. Мы можем вызвать установленное на устройстве приложение сканера, которое поддерживает работу в портретном режиме и умеет возвращать результат обратно в 1С.

Посмотрим на пример вызова внешнего сканера с получением считанных данных:


НовВз = Новый ЗапускПриложенияМобильногоУстройства;
НовВз.Действие = "la.droid.qr.scan";
НовВз.Приложение = "la.droid.qr";

Результат = НовВз.Запустить(Истина);

Если Результат = 0 Тогда
    Для Каждого Стр Из НовВз.ДополнительныеДанные Цикл
        // Обрабатываем полученные параметры сканирования
        Сообщить("" + Стр.Ключ + Символы.ПС + Стр.Значение + Символы.ПС + Стр.ИмяТипа);
    КонецЦикла;
КонецЕсли;

Разберем по шагам важные нюансы этого подхода:

  1. Скорость обработки: Специализированные приложения часто используют оптимизированные алгоритмы распознавания, благодаря чему считывание QR-кода происходит практически мгновенно.
  2. Контроль выгрузки из памяти: При переключении между приложениями служба Low Memory Killer операционной системы Android на устройствах с небольшим объемом оперативной памяти может выгрузить неактивный процесс 1С. Чтобы избежать потери состояния сеанса, необходимо в настройках операционной системы отключить для приложения 1С оптимизацию батареи и разрешить неограниченную фоновую активность (или закрепить приложение в диспетчере задач).

Способ 2. Использование внешних Native-компонент

Если решение разрабатывается для широкого круга клиентов или сторонних пользователей, требование устанавливать дополнительную программу-сканер может быть неприемлемым. В таком случае лучшим вариантом будет встраивание нативной компоненты (C++/Java) непосредственно в сборку мобильного приложения (APK или AAB).

Рассмотрим преимущества данного варианта:

  1. Интерфейс видоискателя создается внутри компоненты с жестко заданной или адаптивной портретной ориентацией (например, с использованием Android CameraX, Google ML Kit или ZXing).
  2. Пользователю не требуется устанавливать стороннее программное обеспечение из магазина приложений — весь функционал находится внутри дистрибутива.
  3. Результат считывания передается в конфигурацию 1С мгновенно через механизм ВнешнееСобытие формы или модуля управляемого приложения.

Способ 3. Сканирование внутри формы через «Поле HTML документа»

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

  1. Размещаем на форме элемент Поле HTML документа.
  2. Загружаем в поле HTML-страницу с легковесной JavaScript-библиотекой для декодирования видеопотока с камеры устройства (через веб-API getUserMedia).
  3. Камера отображается строго в рамках элемента формы в любой требуемой ориентации.
  4. После успешного распознавания код передается в 1С через навигационную ссылку или перехват событий HTML-документа.

Способ 4. Использование аппаратных сканеров и сборщиков данных

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

← На главную