Как программно изменить текущую страницу панели в форме 1С?

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

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

Программная смена страницы в обычных формах (8.2 и более ранние версии)

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

Проанализируем базовый пример кода, который работает в большинстве случаев:


// Получим коллекцию страниц панели
СтраницыПанели = ЭлементыФормы.Панель1.Страницы;

// Получим нужную страницу по индексу
НужнаяСтраница = СтраницыПанели.Получить(ИндексСтраницы);

// Или получим страницу напрямую по имени
// НужнаяСтраница = ЭлементыФормы.Панель1.Страницы.ИмяНужнойСтраницы;

// Устанавливаем страницу как текущую
ЭлементыФормы.Панель1.ТекущаяСтраница = НужнаяСтраница;

Важно помнить, что свойству ТекущаяСтраница нужно присваивать именно объект типа СтраницаПанели, а не её строковое имя или числовой индекс. Если вы попробуете написать ЭлементыФормы.Панель1.ТекущаяСтраница = 1, платформа не поймет вашу команду, так как ожидает ссылку на конкретный объект страницы.

Реализация переключения в управляемых формах (8.3, интерфейс «Такси»)

В управляемом интерфейсе логика работы с формой изменилась. Здесь мы работаем с Элементами формы напрямую. Если у вас на форме есть группа с видом «Страницы», то для смены активной закладки используется аналогичное свойство, но синтаксис обращения будет отличаться. Посмотрим на пример, который актуален для современных конфигураций:


// Находим целевую страницу среди подчиненных элементов группы страниц
ПереходНаСтраницу = ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.Найти("ИмяВашейСтраницы");

// Устанавливаем текущую страницу
ЭтаФорма.Элементы.ГруппаСтраницы.ТекущаяСтраница = ПереходНаСтраницу;

В управляемых формах крайне важно выполнять эти действия на стороне клиента (в процедурах &НаКлиенте), так как управление визуальным состоянием формы — это задача клиентского приложения. Если вы попытаетесь изменить страницу в серверном контексте при инициализации, это сработает, но для динамического изменения в процессе работы пользователя используйте клиентские методы.

Почему страница не переключается? Разбор основных причин

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

1. Свойство Видимость (Visibility). Это самая частая причина «невидимого» бага. В 1С действует строгое правило: нельзя программно сделать текущей ту страницу, у которой свойство Видимость установлено в значение Ложь — для управления состоянием элементов есть инструмент настройки управления формами без кода. Платформа просто проигнорирует команду присваивания. Перед переключением обязательно убедитесь, что страница доступна для просмотра.

Рассмотрим правильный алгоритм с проверкой видимости:


ЦелеваяСтраница = ЭлементыФормы.Панель1.Страницы.Отчеты;
Если Не ЦелеваяСтраница.Видимость Тогда
    ЦелеваяСтраница.Видимость = Истина;
КонецЕсли;
ЭлементыФормы.Панель1.ТекущаяСтраница = ЦелеваяСтраница;

2. Свойство Доступность (Enabled). Аналогично видимости, если для страницы или всей панели установлено Доступность = Ложь, интерактивное и иногда программное переключение может блокироваться. Проверьте, не заблокирован ли элемент в коде по какому-либо условию.

3. Обновление отображения. В некоторых сложных формах, особенно в обычных, графический интерфейс может не успеть перерисоваться. В этом случае помогает принудительный вызов метода обновления. Рассмотрим, как это сделать:


ЭлементыФормы.ПанельПараметров.ТекущаяСтраница = НужнаяСтраница;
ЭтаФорма.ОбновитьОтображениеДанных(ЭлементыФормы.ПанельПараметров);

Продвинутые техники управления страницами

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

Фокусировка на элементах. После того как вы программно сменили страницу, пользователь ожидает, что фокус (курсор) окажется в первом значимом поле этой страницы. Рекомендуется дополнять код смены страницы установкой текущего элемента:


ЭтаФорма.Элементы.ГруппаСтраницы.ТекущаяСтраница = ЭтаФорма.Элементы.СтраницаДанные;
ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.РеквизитОсновнойНомер;

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

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

Альтернативный метод управления через видимость. Иногда проще не переключать страницы, а управлять их видимостью. Если у вас всего две страницы, вы можете просто выключать видимость одной, и тогда вторая автоматически станет активной (если она единственная видимая). Однако этот метод считается менее гибким и может вызывать лишние клиент-серверные вызовы в управляемых формах.

Резюме для разработчика

Подведем итог. Для успешного программного переключения страниц в 1С придерживайтесь следующего чек-листа:

  1. Убедитесь, что вы присваиваете свойству ТекущаяСтраница именно объект страницы, полученный из коллекции элементов.
  2. Проверьте, что у целевой страницы установлено Видимость = Истина.
  3. Если работаете в обычных формах, используйте ОбновитьОтображениеДанных(), если визуального эффекта не произошло.
  4. В управляемых формах выполняйте смену страниц строго в клиентских процедурах.
  5. Не забывайте переводить фокус на нужный элемент новой страницы для удобства пользователя.

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

← На главную