Как запретить поворот экрана в мобильном приложении на платформе 1С:Предприятие

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

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

Способ 1. Использование сборщика мобильных приложений

Самый правильный и надежный метод фиксации ориентации — это настройка параметров на этапе сборки дистрибутива (APK для Android или IPA для iOS). В современных версиях сборщика мобильных приложений от 1С предусмотрена возможность редактирования шаблонов манифеста и конфигурационных файлов.

Для устройств на ОС Android:

Разберем, как внести изменения в AndroidManifest.xml. Нам необходимо указать системе, что основная активность приложения (Activity) поддерживает только один тип ориентации. Для этого выполним следующие шаги:

  1. Откроем проект в сборщике мобильных приложений.
  2. Найдем шаблон файла AndroidManifest.xml.
  3. Внутри тега <activity> добавим атрибут android:screenOrientation.

Проанализируем пример кода для манифеста:


<activity 
    android:name="com.e1c.mobile.AppActivity"
    android:screenOrientation="portrait"> 
    <!-- Используйте "landscape" для альбомной ориентации -->
</activity>

Важно помнить: если просто распаковать готовый APK, поменять манифест и запаковать обратно, приложение может не заработать. Система Android требует, чтобы пакет был заново подписан цифровой подписью и выровнен с помощью утилиты zipalign. Поэтому рекомендуем вносить правки именно через шаблоны сборщика 1С.

Для устройств на ОС iOS:

В экосистеме Apple управление ориентацией осуществляется через файл Info.plist. Разберем, какие ключи за это отвечают. Нам необходимо отредактировать массив UISupportedInterfaceOrientations. Если мы хотим оставить только портретный режим, оставим в списке только одно значение:


<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

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

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

Рассмотрим логику работы такой компоненты на Android. Компонента через контекст приложения получает доступ к текущей Activity и вызывает метод setRequestedOrientation. В коде 1С это будет выглядеть примерно так:


// Инициализация внешней компоненты
Попытка
    ЗагрузитьВнешнююКомпоненту("ОбщийМакет.КомпонентаУправленияЭкраном");
    УправлениеЭкраном = Новый("AddIn.ScreenControl.Main");
    
    // Установка портретного режима
    УправлениеЭкраном.УстановитьОриентацию(1); // Где 1 - портрет, 0 - ландшафт
Исключение
    Сообщить("Не удалось загрузить компоненту управления экраном");
КонецПопытки;

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

Способ 3. Программная имитация запрета (проверка размеров)

Если по каким-то причинам вмешательство в сборку или использование внешних компонент невозможно, разберем "мягкий" способ контроля через встроенный язык 1С. Мы не можем физически запретить поворот, но можем программно реагировать на него.

Выясним алгоритм действий:

  1. При открытии формы или в обработчике ожидания проверяем текущие параметры экрана.
  2. Используем свойства ШиринаЭкрана и ВысотаЭкрана (доступны через средства мобильной платформы).
  3. Если пользователь повернул устройство в нежелательный режим, выводим блокирующее сообщение.

Посмотрим на пример реализации такой проверки:


&Процедура ПроверитьОриентацию()
    Инфо = СистемнаяИнформация;
    Если Инфо.ШиринаЭкрана > Инфо.ВысотаЭкрана Тогда
        // Мы в ландшафтном режиме, а нам нужен портретный
        ПоказатьПредупреждение(, "Пожалуйста, верните устройство в вертикальное положение для продолжения работы.");
        // Можно дополнительно закрыть текущую форму или заблокировать элементы интерфейса
    КонецЕсли;
КонецПроцедуры

Особенности мобильного клиента 1С

Проанализируем ситуацию с Мобильным клиентом. Если вы используете стандартное приложение "1С:Заказы" или универсальный мобильный клиент из App Store / Google Play, то запретить поворот экрана штатными средствами не получится, так как это поведение заложено в само приложение-оболочку.

Однако, если вы собираете свой собственный дистрибутив мобильного клиента через сборщик, то к нему применимы все правила из Способа 1. Вы правите манифест конкретно для вашего экземпляра мобильного клиента, и он будет подчиняться правилам ориентации, прописанным в AndroidManifest.xml или Info.plist.

Резюме и рекомендации

Выясним, какой метод выбрать в вашем случае:

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

← На главную