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