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