Как обеспечить полноэкранное отображение форм в мобильном клиенте 1С на различных устройствах

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

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

Анализируем причины: почему форма открывается в окне, а не на весь экран

Для начала выясним причину такого поведения. Платформа 1С:Предприятие определяет тип интерфейса автоматически, основываясь на логическом разрешении экрана в единицах dp (density-independent pixels). Критическим порогом является значение 600 dp.

  1. Если ширина экрана менее 600 dp, система считает устройство телефоном и принудительно разворачивает все формы на весь экран.
  2. Если ширина составляет 600 dp и более, включается «планшетный режим». В этом режиме платформа считает, что экран достаточно велик, чтобы отображать формы в виде перекрывающихся окон или панелей.

Именно поэтому на устройствах с высоким DPI (где физических пикселей много, но логических мало) мы видим полный экран, а на планшетах — компактное окно. Рассмотрим, какими методами мы можем заставить систему игнорировать эти правила.

Метод 1. Использование режима независимого окна

Проанализируем программный способ открытия формы, который позволяет избежать «оконного» эффекта на планшетах. Одним из наиболее действенных способов является использование свойства РежимОткрытияОкна со значением Независимый.

Рассмотрим пример кода, который следует использовать при вызове формы (такое программное изменение форм значительно ускоряет разработку):


ПараметрыФормы = Новый Структура;
// Добавьте ваши параметры, если они нужны

ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("РежимОткрытияОкна", ВариантОткрытьРабочееМесто.Независимый);

ОткрытьФорму("ОбщаяФорма.МояРабочаяФорма", ПараметрыФормы, , , , , , ВариантОткрытьРабочееМесто.Независимый);

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

Метод 2. Скрытие командного интерфейса через «форму-пустышку»

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

Разберем алгоритм по шагам:

  1. В свойствах конфигурации назначаем основной формой рабочего стола пустую форму без элементов управления.
  2. В модуле этой «пустышки» в обработчике ПриОткрытии прописываем программное открытие нашей основной рабочей формы.
  3. Для рабочей формы устанавливаем режим БлокироватьВесьИнтерфейс.

В этом случае системное меню («бутерброд») остается «под» рабочей формой, в слое пустой формы, и визуально скрывается. Проанализируем пример кода для реализации закрытия приложения при выходе из такой формы:


// В модуле рабочей формы
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
    // При закрытии основной формы завершаем работу всей системы
    ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

Важное примечание: Даже при таком подходе на некоторых версиях платформы и Android-устройствах меню можно вызвать свайпом от левого края экрана (здесь помогут расширенные внешняя компонента: Android tools). Полностью заблокировать это поведение штатными средствами платформы 1С на текущий момент крайне сложно.

Метод 3. Принудительное растягивание элементов формы

Иногда форма открывается «окном» просто потому, что платформа считает её содержимое недостаточно широким. Чтобы заставить форму занять всю ширину в мобильном клиенте, попробуем изменить настройки самой управляемой формы в конфигураторе.

Выполним следующие действия:

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

Метод 4. Тонкая настройка через свойства последних версий платформы

Начиная с версии платформы 8.3.20, появились дополнительные возможности управления интерфейсом мобильного клиента. Для качественного оформления пригодится менеджер цветовых схем — 300+ готовых тем для 1С. Проанализируем свойства, которые могут помочь в решении нашей задачи:

1. Отображать системный заголовок. Если отключить это свойство у формы, верхняя планка с названием формы исчезнет, что даст дополнительные 5–10 миллиметров полезной площади (см. также запуск 1С на полный экран без заголовка окна).

2. Режим основного окна. Используйте программную установку полноэкранного режима для скрытия панели состояния Android (часы, уведомления, заряд батареи):


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    #Если МобильныйКлиент Тогда
        ЭтаФорма.РежимОсновногоОкна = РежимОсновногоОкна.Полноэкранный;
    #КонецЕсли
КонецПроцедуры

3. Использование WindowOpeningMode.Workplace. Попробуйте открывать форму в режиме «Рабочее место». В мобильном клиенте это свойство заставляет форму вести себя более агрессивно по отношению к экранному пространству, стараясь вытеснить другие элементы интерфейса.

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

Как мы выяснили, идеального «переключателя» одной кнопкой не существует, так как поведение продиктовано адаптивностью платформы 1С. Однако совместное использование режима независимого окна, отключения системных заголовков и принудительного растягивания элементов позволяет добиться приемлемого результата на большинстве современных планшетов.

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

← На главную