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