При разработке мобильных приложений на платформе 1С:Предприятие разработчики часто сталкиваются с тем, что стандартное окно сканирования штрихкодов открывается в альбомной (горизонтальной) ориентации, в то время как логика интерфейса требует портретного (вертикального) режима. Это создает неудобства для пользователей, вынуждая их постоянно переворачивать устройство. Разберем подробно, почему это происходит и какими способами можно добиться нужного поведения камеры.
Для начала проанализируем типовой код, который используется для вызова сканера в мобильном приложении. Обычно он выглядит следующим образом:
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод", ОбработчикСканирования, ОбработчикЗакрытия, ТипШтрихКода.Линейный);
Метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов является высокоуровневым. Он обращается к системным функциям мобильной операционной системы (Android или iOS). Проблема заключается в том, что в параметрах этого метода отсутствует возможность явного указания ориентации экрана. Платформа 1С пытается самостоятельно определить оптимальный режим, и зачастую он не совпадает с ожиданиями разработчика.
Самый простой способ повлиять на поведение камеры — это изменить глобальные настройки мобильного приложения. Рассмотрим пошагово, как это сделать:
Важный нюанс: Начиная с версии платформы 8.3.18, стандартное окно сканирования более строго следует настройкам конфигурации. Если приложение жестко ограничено портретным режимом, камера должна открываться вертикально. Однако помните, что это ограничение затронет все формы вашего приложения.
Если вы не хотите ограничивать все приложение, мы можем попробовать управлять ориентацией конкретной формы, из которой вызывается сканер. Проанализируем ситуацию: иногда системный диалог "наследует" состояние родительского окна.
В свойствах формы 1С найдите параметр ОриентацияСтраницы. Попробуйте установить его в значение Портретная непосредственно перед вызовом метода сканирования. Это может помочь системе правильно инициализировать слой предварительного просмотра камеры (Preview Layer).
Если стандартные СредстваМультимедиа не дают нужного результата, мы можем пойти по пути интеграции с операционной системой напрямую. Для Android это реализуется через объект ЗапускПриложенияМобильногоУстройства. Рассмотрим пример вызова внешнего сканера, где можно управлять параметрами:
ПараметрыЗапуска = Новый ЗапускПриложенияМобильногоУстройства("com.google.zxing.client.android.SCAN");
ПараметрыЗапуска.ДополнительныеДанные.Добавить("SCAN_MODE", "QR_CODE_MODE");
ПараметрыЗапуска.ДополнительныеДанные.Добавить("SCAN_ORIENTATION_0", 0); // Портретная ориентация
Если ПараметрыЗапуска.ПоддерживаетсяЗапуск() Тогда
ПараметрыЗапуска.Запустить(Истина);
КонецЕсли;
Использование сторонних приложений-сканеров (например, ZXing Barcode Scanner) позволяет гораздо гибче управлять процессом. Через дополнительные параметры (Extras) можно передать команду на фиксацию экрана в определенном положении.
В промышленной автоматизации часто используются ТСД со встроенными лазерными или имидж-сканерами (Zebra, Honeywell, Атол). Выясним причину, почему в таких устройствах стандартные методы 1С вообще могут не потребоваться.
На профессиональных устройствах сканирование настраивается на уровне операционной системы через специальные сервисы (например, DataWedge на Zebra). В настройках профиля сканирования можно жестко задать ориентацию луча и экрана. В этом случае 1С не "открывает камеру", а просто ожидает ВнешнееСобытие, которое приходит мгновенно при нажатии физической кнопки сканирования на корпусе устройства.
Для создания максимально отзывчивого интерфейса профессиональные разработчики используют внешние компоненты. Это программные модули, написанные на нативных языках (Java для Android, Swift для iOS), которые подключаются к 1С.
Преимущества этого подхода:
Preview Layer (слоем предпросмотра).Рассмотрим еще один альтернативный путь. Платформа 1С позволяет размещать на форме поле HTML-документа. С помощью технологии WebRTC (метод getUserMedia) можно транслировать поток с камеры прямо в это поле.
В JavaScript управление поворотом видеопотока реализуется крайне просто с помощью CSS-трансформаций:
video {
transform: rotate(90deg);
width: 100vh;
height: 100vw;
}
Однако этот метод требует глубоких знаний веб-разработки и настройки взаимодействия между JavaScript и кодом 1С для передачи распознанного текста обратно в конфигурацию.
Подведем итоги нашего анализа. К сожалению, стандартный метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов не содержит "волшебной кнопки" для поворота камеры. Чтобы решить задачу, следует двигаться от простого к сложному:
Выбор метода зависит от ваших требований к пользовательскому интерфейсу и того, на каких устройствах будет эксплуатироваться мобильное приложение.