Разработка интерфейсов для мобильных устройств на платформе 1С требует особого подхода, так как экранное пространство сильно ограничено, а стандартное поведение форм предполагает автоматическую прокрутку всего содержимого. Часто возникает задача закрепить важные элементы управления (кнопки "Оформить", "Готово", итоговые суммы или навигационные панели) так, чтобы они всегда оставались на виду, в то время как основной контент формы можно было скроллить. В этой статье мы подробно разберем, как реализовать механизм фиксированных зон (Header/Footer) штатными средствами управляемых форм.
Проанализируем наиболее эффективный способ, который упоминается опытными разработчиками. Основная идея заключается в том, чтобы «обмануть» стандартный механизм скролла формы, перенеся прокрутку с самой формы на внутренний контейнер. Разберем по шагам создание такой структуры:
ВертикальнаяПрокрутка. Нам необходимо установить его в значение Авто или Не использовать. Это лишит форму возможности скроллить всё содержимое целиком.Обычная группа. В ней разместим элементы, которые должны быть жестко зафиксированы вверху. Для этой группы свойство РастягиватьПоВертикали должно быть установлено в Ложь.Группу страниц. Внутри этой группы создаем одну единственную Страницу. Именно для этой страницы мы устанавливаем флаг ВертикальнаяПрокруткаПриСжатии (в некоторых версиях свойство называется ВертикальнаяПрокрутка).Обычная группа. В нее кладем кнопки или итоги. Чтобы футер всегда «прилипал» к низу, убедимся, что средняя часть (группа страниц) имеет свойство РастягиватьПоВертикали в значении Истина.Таким образом, мы получаем жесткий каркас, где верх и низ статичны, а центральная часть занимает все свободное пространство и обеспечивает прокрутку контента.
Рассмотрим альтернативный вариант, который предоставляет сама платформа для работы с кнопками. В свойствах управляемой формы существует объект СоставКоманднойПанелиНаМобильномУстройстве. Это специализированный механизм, предназначенный для адаптации интерфейса под смартфоны и планшеты.
Выясним причину, почему это удобно: кнопки, включенные в этот состав, автоматически группируются платформой и закрепляются в нижней части экрана (как системный футер). Это гарантирует, что важные действия будут доступны пользователю вне зависимости от того, в какой части формы он находится. Рассмотрим программный доступ к этому свойству, если нам нужно управлять кнопками динамически:
// Пример получения доступа к составу командной панели
СоставПанели = ЭтаФорма.СоставКоманднойПанелиНаМобильномУстройстве;
// Мы можем только просматривать состав, настройка производится в конфигураторе
Важный нюанс: Этот метод подходит только для кнопок (команд). Если вам нужно закрепить текстовое поле с итоговой суммой или декорацию, этот способ не сработает — используйте Метод 1.
При работе на мобильных устройствах часто возникает проблема: когда пользователь начинает вводить текст в поле, появляется экранная клавиатура, которая может перекрывать закрепленный футер или делать интерфейс слишком тесным. Проанализируем ситуацию и найдем решение. Мы можем программно скрывать футер, когда фокус устанавливается в поле ввода.
Для этого воспользуемся событием формы ПриАктивизацииПоля. Разберем пример кода:
&НаКлиенте
Процедура ПриАктивизацииПоля(Элемент)
// Если фокус попал в текстовое поле, скрываем футер для экономии места
Если ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
Элементы.ГруппаФутер.Видимость = Ложь;
Иначе
Элементы.ГруппаФутер.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Такой подход делает интерфейс более «живым» и удобным для пользователя, предотвращая конфликты между элементами формы и системными компонентами ОС.
Чтобы закрепление работало корректно, необходимо правильно настроить свойства растягивания. Рассмотрим основные правила настройки свойств РастягиватьПоВертикали и РастягиватьПоГоризонтали:
РастягиватьПоВертикали = Ложь. Группа должна занимать ровно столько места, сколько нужно её содержимому.РастягиватьПоВертикали = Истина. Это критично, так как именно эта группа должна «выталкивать» футер к нижней границе экрана.РастягиватьПоВертикали = Ложь. Аналогично хедеру, он фиксируется по размеру содержимого.Если вы заметили, что футер «плавает» или находится сразу под контентом, не доходя до низа экрана — проверьте свойство Высота у центральной группы страниц. Иногда полезно установить минимальную высоту, чтобы при пустом контенте структура не схлопывалась.
В современных мобильных устройствах (особенно на iOS с их «челками» и нижними полосками навигации) элементы управления в самом низу могут накладываться на системные жесты. Выясним, как этого избежать. Рекомендуется в самый низ закрепленного футера добавлять элемент типа Декорация - Поясняющая надпись с пустой строкой и фиксированной высотой (например, 2 или 3). Это создаст необходимый отступ, который убережет пользователя от случайного закрытия приложения при попытке нажать на кнопку в футере.
Мы проанализировали несколько подходов к закреплению элементов в мобильном приложении 1С. Подведем итоги:
СоставКоманднойПанелиНаМобильномУстройстве.ВертикальнаяПрокрутка у самой формы, если используете внутренний контейнер для скролла.ВертикальнаяПрокруткаПриСжатии у страниц — это «сердце» мобильного скролла.Применяя эти правила, вы сможете создавать профессиональные и удобные мобильные интерфейсы на платформе 1С, которые не уступают нативным приложениям по удобству навигации.