Как изменить ориентацию камеры при сканировании штрихкодов в мобильном приложении 1С

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

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

Анализ стандартного метода сканирования

Для начала проанализируем типовой код, который используется для вызова сканера в мобильном приложении. Обычно он выглядит следующим образом:


ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод", ОбработчикСканирования, ОбработчикЗакрытия, ТипШтрихКода.Линейный);

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

Решение 1: Настройка свойств конфигурации

Самый простой способ повлиять на поведение камеры — это изменить глобальные настройки мобильного приложения. Рассмотрим пошагово, как это сделать:

  1. Откройте конфигуратор и перейдите в свойства корневого объекта Конфигурация.
  2. Найдите раздел Используемые ориентации экрана.
  3. Если в вашем приложении критически важен только вертикальный режим, снимите галочки с пунктов "Ландшафтная лево" и "Ландшафтная право", оставив только Портретная.

Важный нюанс: Начиная с версии платформы 8.3.18, стандартное окно сканирования более строго следует настройкам конфигурации. Если приложение жестко ограничено портретным режимом, камера должна открываться вертикально. Однако помните, что это ограничение затронет все формы вашего приложения.

Решение 2: Управление ориентацией конкретной формы

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

В свойствах формы 1С найдите параметр ОриентацияСтраницы. Попробуйте установить его в значение Портретная непосредственно перед вызовом метода сканирования. Это может помочь системе правильно инициализировать слой предварительного просмотра камеры (Preview Layer).

Решение 3: Использование системных Интентов (для Android)

Если стандартные СредстваМультимедиа не дают нужного результата, мы можем пойти по пути интеграции с операционной системой напрямую. Для Android это реализуется через объект ЗапускПриложенияМобильногоУстройства. Рассмотрим пример вызова внешнего сканера, где можно управлять параметрами:


ПараметрыЗапуска = Новый ЗапускПриложенияМобильногоУстройства("com.google.zxing.client.android.SCAN");
ПараметрыЗапуска.ДополнительныеДанные.Добавить("SCAN_MODE", "QR_CODE_MODE");
ПараметрыЗапуска.ДополнительныеДанные.Добавить("SCAN_ORIENTATION_0", 0); // Портретная ориентация
Если ПараметрыЗапуска.ПоддерживаетсяЗапуск() Тогда
    ПараметрыЗапуска.Запустить(Истина);
КонецЕсли;

Использование сторонних приложений-сканеров (например, ZXing Barcode Scanner) позволяет гораздо гибче управлять процессом. Через дополнительные параметры (Extras) можно передать команду на фиксацию экрана в определенном положении.

Решение 4: Работа с Терминалами Сбора Данных (ТСД)

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

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

Решение 5: Внешние компоненты (Native SDK)

Для создания максимально отзывчивого интерфейса профессиональные разработчики используют внешние компоненты. Это программные модули, написанные на нативных языках (Java для Android, Swift для iOS), которые подключаются к 1С.

Преимущества этого подхода:

Решение 6: Использование HTML5 и JavaScript

Рассмотрим еще один альтернативный путь. Платформа 1С позволяет размещать на форме поле HTML-документа. С помощью технологии WebRTC (метод getUserMedia) можно транслировать поток с камеры прямо в это поле.

В JavaScript управление поворотом видеопотока реализуется крайне просто с помощью CSS-трансформаций:


video {
    transform: rotate(90deg);
    width: 100vh;
    height: 100vw;
}

Однако этот метод требует глубоких знаний веб-разработки и настройки взаимодействия между JavaScript и кодом 1С для передачи распознанного текста обратно в конфигурацию.

Резюме

Подведем итоги нашего анализа. К сожалению, стандартный метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов не содержит "волшебной кнопки" для поворота камеры. Чтобы решить задачу, следует двигаться от простого к сложному:

  1. Проверить свойства конфигурации и ограничить ориентацию портретным режимом.
  2. Проверить свойства формы, из которой происходит вызов.
  3. Если это не помогает, рассмотреть использование внешних приложений через механизмы Интентов или специализированных внешних компонент.

Выбор метода зависит от ваших требований к пользовательскому интерфейсу и того, на каких устройствах будет эксплуатироваться мобильное приложение.

← На главную