Как определить активную вкладку (страницу) в управляемой форме 1С и отреагировать на ее смену?

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

При разработке сложных управляемых форм 1С часто возникает задача управлять видимостью и доступностью элементов в зависимости от того, какая вкладка (страница) в данный момент выбрана пользователем — с этим поможет расширение для динамического управления видимостью элементов. Например, нужно показывать определенные кнопки только на вкладке "Товары", а на вкладке "Доставка" скрывать их и отображать поля с адресом. Существуют различные способы изменения управляемых форм, но прежде чем приступать к масштабным правкам, разберем, как получить информацию о текущей активной странице и как выполнить код в момент ее смены.

Способ 1: Получение текущей активной страницы по запросу

Самый простой способ узнать, какая страница сейчас активна, — это обратиться к свойству ТекущаяСтраница у элемента формы типа Группа страниц. Это свойство возвращает элемент формы, соответствующий активной странице. Если вам необходимо в реальном времени анализировать и менять параметры элементов, будет полезен редактор форм в режиме предприятия.

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


// Код выполняется, например, в обработчике нажатия кнопки
&НаКлиенте
Процедура УзнатьТекущуюСтраницу(Команда)
    
    // Получаем объект текущей страницы
    АктивнаяСтраница = Элементы.ГруппаОсновная.ТекущаяСтраница;
    
    // Получаем имя страницы из ее свойств
    ИмяАктивнойСтраницы = АктивнаяСтраница.Имя;
    
    Сообщить("Сейчас активна страница: " + ИмяАктивнойСтраницы);
    
    // Теперь можно строить логику на основе имени
    Если ИмяАктивнойСтраницы = "СтраницаТовары" Тогда
        // Выполнить действия для вкладки "Товары"
        Сообщить("Выполняем действия для товаров...");
    КонецЕсли;

КонецПроцедуры

Рассмотрим подробнее:

  1. Элементы.ГруппаОсновная — это обращение к нашему элементу формы, который является контейнером для вкладок. Важно заменить ГруппаОсновная на имя вашей группы страниц.
  2. .ТекущаяСтраница — это свойство, которое возвращает не просто имя, а объект типа ЭлементФормы, то есть саму страницу.
  3. .Имя — у полученного объекта страницы мы обращаемся к свойству Имя, чтобы получить его строковое представление, которое мы задали в конфигураторе.

Этот метод идеально подходит, когда нужно проверить активную вкладку в определенный момент времени, например, при нажатии на кнопку или перед записью объекта.

Способ 2: Обработка события смены страницы

Если нам нужно выполнять какие-то действия сразу же в момент, когда пользователь переключается на другую вкладку, то простой проверки будет недостаточно. Для этого существует специальное событие ПриСменеСтраницы у элемента "Группа страниц". При реализации сложной логики поведения интерфейса разработчики часто используют общие модули для программного изменения форм, чтобы стандартизировать обработку подобных событий.

Разберем по шагам, как его использовать:

  1. Откройте вашу форму в конфигураторе.
  2. Выделите в дереве элементов формы вашу группу страниц (например, ГруппаОсновная).
  3. В палитре свойств перейдите на вкладку "События".
  4. Найдите событие ПриСменеСтраницы и нажмите на иконку с лупой, чтобы создать обработчик этого события на клиенте.

Платформа автоматически сгенерирует процедуру-обработчик в модуле формы. Обратите внимание на ее параметры:


&НаКлиенте
Процедура ГруппаОсновнаяПриСменеСтраницы(Элемент, ТекущаяСтраница)
    
    // Элемент - это сама группа страниц (в нашем случае Элементы.ГруппаОсновная)
    // ТекущаяСтраница - это элемент формы, который СТАЛ активным (тот же объект, что и в способе 1)
    
КонецПроцедуры

В этом обработчике уже есть все необходимое. Параметр ТекущаяСтраница содержит ссылку на страницу, на которую пользователь только что переключился.

Практический пример: Динамическое изменение формы при смене вкладок

Проанализируем ситуацию: у нас есть форма документа "Заказ клиента" с двумя вкладками: "Основное" (имя СтраницаОсновное) и "Товары" (имя СтраницаТовары). Нам нужно, чтобы кнопка "Подобрать товары" (имя КнопкаПодобратьТовары) была видна только на вкладке "Товары".

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


&НаКлиенте
Процедура ГруппаОсновнаяПриСменеСтраницы(Элемент, ТекущаяСтраница)
    
    // Проверяем имя страницы, которая стала активной
    Если ТекущаяСтраница.Имя = "СтраницаТовары" Тогда
        // Если это вкладка "Товары", делаем кнопку видимой
        Элементы.КнопкаПодобратьТовары.Видимость = Истина;
    Иначе
        // На всех остальных вкладках скрываем кнопку
        Элементы.КнопкаПодобратьТовары.Видимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем имя текущей страницы при открытии формы
    ИмяНачальнойСтраницы = Элементы.ГруппаОсновная.ТекущаяСтраница.Имя;
    
    // Устанавливаем видимость кнопки в зависимости от того, какая страница активна по умолчанию
    Элементы.КнопкаПодобратьТовары.Видимость = (ИмяНачальнойСтраницы = "СтраницаТовары");
    
КонецПроцедуры

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

← На главную