Вкладки в формах 1С: группа-страница, конфигуратор и код
Содержание
Чтобы создать вкладки в форме 1С 8.3, отдельного элемента «вкладка» искать не нужно — закладки даёт обычная группа. В конфигураторе на форму добавляют Группу, в её свойствах ставят Вид = Страницы, а внутрь вкладывают дочерние группы с видом Страница. Сколько вложенных групп-страниц — столько и вкладок на форме.
Вкладки разбивают громоздкую форму на компактные блоки: основное, дополнительное, служебное. В типовых конфигурациях на интерфейсе «Такси» так устроены почти все карточки — номенклатура, контрагент, документ реализации.
Дальше — оба вида форм (управляемая для тонкого и веб-клиента, обычная для толстого), переключение страниц из встроенного языка, вложенные закладки и ситуации, где вкладки лучше заменить другим приёмом.
Группа-страница: что это и какими бывают закладки
Вкладка в 1С — это группа с видом Страница, а контейнер для всех вкладок — группа с видом Страницы. Снаружи они выглядят как закладки, но в метаданных это элементы формы, а не отдельная сущность.
За внешний вид отвечает свойство контейнера ОтображениеСтраниц:
- 🔖 Закладки сверху — классический ряд закладок над содержимым. Значение по умолчанию.
- 🔖 Закладки снизу — тот же ряд, но под областью страницы.
- 🚫 Нет — закладки не рисуются совсем. Переключать страницы можно только из кода. Это основа для мастеров (шаг 1 → шаг 2 → шаг 3) и для «карусели» экранов.
Вид Нет — недооценённый приём. Прячете штатные закладки, рисуете свои кнопки Далее/Назад и получаете полноценный пошаговый визард без единого стороннего элемента.
Каждая страница внутри контейнера имеет собственный Заголовок (это и есть текст на закладке) и флаг ОтображатьТитул. Порядок закладок = порядок дочерних групп в дереве формы, его меняют перетаскиванием.
Создаём вкладки в управляемой форме: пошагово
Управляемая форма работает в тонком и веб-клиенте — это основной вид форм в современных конфигурациях. Порядок действий в конфигураторе:
- Откройте форму и перейдите на закладку
Формаредактора (дерево элементов слева). - Встаньте на корень или на нужный контейнер и выполните
Добавить→Группа(кнопка на командной панели дерева или контекстное меню). - В палитре свойств новой группы задайте
Вид=Страницы. Группа превратится в контейнер закладок. - Выделите этот контейнер и снова
Добавить→Группа. У вложенной группы поставьтеВид=Страница. Это первая вкладка. - В свойстве
Заголовокстраницы напишите текст закладки — например,Основное. - Повторите шаги 4–5 для остальных вкладок:
Дополнительно,Комментарийи так далее. - Перетащите реквизиты и поля на нужные страницы. Элемент попадает ровно на ту вкладку, в чью группу вы его кладёте.
Проверьте в режиме 1С:Предприятие: закладки появятся в том порядке, в каком идут группы-страницы в дереве. Если нужно переставить — двигайте группы вверх-вниз, не трогая их содержимое.
Отдельно обратите внимание на свойство Имя у каждой страницы. Заголовок виден пользователю, а Имя — то, по чему к странице обращаются из кода. Задайте осмысленные имена сразу (СтраницаОсновное, СтраницаРасчёты), иначе в коде будут безликие Группа1 и Группа2, в которых легко запутаться.
Какая вкладка откроется первой, определяет порядок страниц в дереве — открывается верхняя. Если по логике первой должна быть другая, не переставляйте группы, а задайте активную страницу в обработчике создания формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты;
КонецПроцедуры
Если вы добавили группы-страницы, а закладок не видно — почти всегда причина в том, что у контейнера Вид остался Обычная группа, а не Страницы. Проверьте свойство именно у родителя, а не у дочерних страниц.
Вкладки в обычной форме: панель и её страницы
Обычные формы — наследие толстого клиента (конфигурации без интерфейса «Такси»). Там закладки делает не группа, а элемент управления Панель.
Порядок в конфигураторе для обычной формы:
- На палитре элементов управления выберите
Панельи разместите её на форме. - В контекстном меню панели выберите команду добавления страницы (
Добавить страницу). Каждая команда создаёт новую закладку. - Открывайте нужную страницу панели и кладите на неё поля ввода и надписи.
- Видимость ряда закладок регулирует свойство панели
ОтображатьЗакладки.
Ограничение простое: обычные формы открываются только в толстом клиенте и не работают в веб-клиенте. Если база планируется для браузера или тонкого клиента — переносить логику надо на управляемые формы, прямого «конвертера» панели в группу-страницы нет, форму собирают заново.
Новые разработки на обычных формах не начинают: это тупиковая ветка. Панель с закладками остаётся только в старых базах, которые ещё не перевели на управляемый интерфейс.
Переключение и видимость вкладок из кода
Активную вкладку задаёт свойство контейнера ТекущаяСтраница. Ему присваивают ссылку на нужную страницу из коллекции Элементы:
&НаКлиенте
Процедура ПоказатьРасчёты()
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты;
КонецПроцедуры
Прочитать, какая вкладка открыта сейчас, можно тем же свойством:
Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты Тогда
ЗаполнитьРасчёты();
КонецЕсли;
Отдельную вкладку скрывают и показывают через свойство Видимость у группы-страницы:
Элементы.СтраницаСлужебная.Видимость = ПравоДоступа("Администрирование", Метаданные);
Скрытая страница исчезает из ряда закладок целиком, а не блокируется — это удобно, чтобы прятать служебные вкладки от обычных пользователей.
Если вкладка нужна не всем, а по настройке базы, видимость удобнее завязать не на код, а на функциональную опцию. Опцию привязывают к группе-странице в конфигураторе, и при выключенной опции закладка пропадает сама, без строчки встроенного языка. Для разграничения по правам доступа подойдёт и прямое присваивание Видимость, как в примере выше, — что ближе к задаче, то и используйте.
Добавить вкладку на лету в управляемой форме тоже можно — через программное создание элементов на сервере:
&НаСервере
Процедура ДобавитьСтраницу(Имя, Заголовок)
НоваяСтраница = Элементы.Добавить(Имя, Тип("ГруппаФормы"), Элементы.ГруппаСтраницы);
НоваяСтраница.Вид = ВидГруппыФормы.Страница;
НоваяСтраница.Заголовок = Заголовок;
КонецПроцедуры
Так собирают, например, по вкладке на каждую строку табличной части. Приём мощный, но тяжёлый: динамические элементы усложняют поддержку, поэтому им пользуются, когда число вкладок заранее неизвестно.
Надёжный способ выполнить код именно в момент смены вкладки — вести переключение самому. Поставьте контейнеру ОтображениеСтраниц = Нет, сделайте свои кнопки, и в их обработчике и меняйте ТекущаяСтраница, и подгружайте данные. Так вы точно знаете, когда пользователь перешёл на страницу.
Производительность формы с вкладками
Вкладки сами по себе форму не замедляют — тормозит то, что на них лежит. Типичная ошибка: на каждой из пяти закладок висит динамический список или тяжёлый запрос, и всё это выполняется при открытии формы, хотя пользователь смотрит только первую вкладку.
Что помогает:
- 📉 Не грузите данные всех вкладок в
ПриОткрытии. Заполняйте только видимую страницу, остальные — при первом переходе на них. - 📉 Тяжёлые динамические списки разносите по разным вкладкам и, если список нужен редко, подключайте его данные по факту открытия страницы, а не сразу.
- 📉 Реквизиты, которые не показаны ни на одной активной вкладке, всё равно читаются при открытии объекта — выносите редко нужные данные в отдельную форму, а не в скрытую вкладку.
Приём с ленивой загрузкой строится на том же код-переключении: прячете штатные закладки, по нажатию кнопки переходите на страницу и там же, один раз, заполняете её данными с флагом «уже загружено». Повторный заход на вкладку запрос не гоняет.
Важно и то, что вкладки не уменьшают число элементов формы — они лишь прячут их за закладками. На скорость открытия влияет общее количество полей, таблиц и команд на форме, а не то, сколько из них сейчас видно. Если форма открывается заметно долго, а полей сотни, одними вкладками проблему не закрыть: тяжёлые блоки выносят в отдельные формы, которые открываются по команде только когда действительно нужны.
Флаги-признаки «страница загружена» держите в реквизитах формы, а не в глобальных переменных: при повторном открытии формы реквизиты сбрасываются, и данные подтянутся заново, как и должно быть.
Частые ошибки при работе с вкладками
Ошибки с закладками почти всегда — не про код, а про свойства элементов и невнимательность в дереве формы.
Вид остался Обычная группа. Поставьте Вид = Страницы именно у родительской группы.Страница на одном уровне.Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ИмяСтраницы, а не = "ИмяСтраницы".Вложенные вкладки и оформление закладок
Вкладки вкладываются друг в друга: внутрь страницы кладут ещё одну группу с видом Страницы, а в неё — свои страницы. Получается двухуровневая навигация: верхний ряд закладок и под ним — второй.
Злоупотреблять этим не стоит: два уровня закладок пользователь ещё считывает, три превращаются в лабиринт. Если тянет на третий уровень — скорее всего, данные пора разносить по отдельным формам.
Оформление настраивают свойствами группы-страниц:
Заголовокстраницы — текст на закладке.ОтображатьТитул— показывать ли заголовок самой области внутри страницы (не путать с текстом закладки).ОтображениеСтраницу контейнера — сверху, снизу или без закладок.ГруппировкаКолонокиОтображениеСостоянияПросмотрау группы помогают выстроить поля внутри страницы в несколько колонок.
Заголовок закладки меняют и из кода — например, чтобы показать на вкладке счётчик строк: Элементы.СтраницаТовары.Заголовок = СтрШаблон("Товары (%1)", Товары.Количество()). Число в строку складывайте через СтрШаблон или Формат, а не плюсом: прямая конкатенация строки с числом в 1С даёт ошибку преобразования типов.
Если закладок много и они не влезают в ширину формы, 1С сворачивает лишние в выпадающее меню автоматически — вручную это настраивать не нужно. Но это сигнал, что вкладок слишком много.
Когда вкладки не нужны: альтернативы
Вкладки оправданы, когда полей действительно много и они делятся на смысловые блоки. В остальных случаях есть решения проще и понятнее:
- 🧩 Мало полей (одна-две группы). Вкладки только мешают — оставьте поля на одной форме, разделив свёртываемыми группами (
Вид=Обычная группа,Поведение=Свёртываемая). - 🧩 Пошаговый ввод (мастер). Вместо закладок — контейнер с
ОтображениеСтраниц=Нети кнопкиДалее/Назад. Пользователь идёт по шагам, не перескакивая. - 🧩 Полностью независимые разделы. Если данные вкладок друг с другом не связаны, это часто не одна форма с вкладками, а несколько отдельных форм или команд, открываемых по кнопке.
- 🧩 Редко нужные данные. Служебную информацию лучше прятать в отдельную форму по команде, чем держать постоянно открытой вкладкой — форма откроется быстрее.
Простая проверка: если на вкладку заходят раз в месяц, ей не место в основной форме. Вкладки — для того, что смотрят регулярно, но не одновременно.
Ещё один признак, что вкладок слишком много: пользователь каждый раз ищет нужную закладку глазами. Семь-восемь равнозначных вкладок читаются хуже, чем две-три с внятными заголовками, под которыми поля сгруппированы свёртываемыми группами. Группировка вглубь часто понятнее, чем вширь по закладкам.
Частые вопросы
Чем группа «Страницы» отличается от группы «Страница»?
Страницы — это контейнер, рамка со всеми закладками. Страница — одна вкладка внутри него. Контейнер один, страниц в нём сколько угодно.Можно ли сделать вкладки без видимых закладок?
ОтображениеСтраниц = Нет. Тогда страницы переключаются только из кода через ТекущаяСтраница — так делают мастера и пошаговые формы.Как программно узнать, какая вкладка сейчас открыта?
Элементы.ИмяКонтейнера.ТекущаяСтраница и сравните со ссылкой на нужную страницу: Если … = Элементы.ИмяСтраницы Тогда.Почему закладки есть в толстом клиенте, но пропадают в браузере?
Панель с закладками существует лишь в обычных формах толстого клиента — для веба форму нужно пересобрать как управляемую.