Вкладки в формах 1С: группа-страница, конфигуратор и код

· 9 мин

Содержание

Чтобы создать вкладки в форме 1С 8.3, отдельного элемента «вкладка» искать не нужно — закладки даёт обычная группа. В конфигураторе на форму добавляют Группу, в её свойствах ставят Вид = Страницы, а внутрь вкладывают дочерние группы с видом Страница. Сколько вложенных групп-страниц — столько и вкладок на форме.

Вкладки разбивают громоздкую форму на компактные блоки: основное, дополнительное, служебное. В типовых конфигурациях на интерфейсе «Такси» так устроены почти все карточки — номенклатура, контрагент, документ реализации.

Дальше — оба вида форм (управляемая для тонкого и веб-клиента, обычная для толстого), переключение страниц из встроенного языка, вложенные закладки и ситуации, где вкладки лучше заменить другим приёмом.

Группа-страница: что это и какими бывают закладки

Вкладка в 1С — это группа с видом Страница, а контейнер для всех вкладок — группа с видом Страницы. Снаружи они выглядят как закладки, но в метаданных это элементы формы, а не отдельная сущность.

За внешний вид отвечает свойство контейнера ОтображениеСтраниц:

  • 🔖 Закладки сверху — классический ряд закладок над содержимым. Значение по умолчанию.
  • 🔖 Закладки снизу — тот же ряд, но под областью страницы.
  • 🚫 Нет — закладки не рисуются совсем. Переключать страницы можно только из кода. Это основа для мастеров (шаг 1 → шаг 2 → шаг 3) и для «карусели» экранов.

Вид Нет — недооценённый приём. Прячете штатные закладки, рисуете свои кнопки Далее/Назад и получаете полноценный пошаговый визард без единого стороннего элемента.

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

Создаём вкладки в управляемой форме: пошагово

Управляемая форма работает в тонком и веб-клиенте — это основной вид форм в современных конфигурациях. Порядок действий в конфигураторе:

  1. Откройте форму и перейдите на закладку Форма редактора (дерево элементов слева).
  2. Встаньте на корень или на нужный контейнер и выполните Добавить → Группа (кнопка на командной панели дерева или контекстное меню).
  3. В палитре свойств новой группы задайте Вид = Страницы. Группа превратится в контейнер закладок.
  4. Выделите этот контейнер и снова Добавить → Группа. У вложенной группы поставьте Вид = Страница. Это первая вкладка.
  5. В свойстве Заголовок страницы напишите текст закладки — например, Основное.
  6. Повторите шаги 4–5 для остальных вкладок: Дополнительно, Комментарий и так далее.
  7. Перетащите реквизиты и поля на нужные страницы. Элемент попадает ровно на ту вкладку, в чью группу вы его кладёте.

Проверьте в режиме 1С:Предприятие: закладки появятся в том порядке, в каком идут группы-страницы в дереве. Если нужно переставить — двигайте группы вверх-вниз, не трогая их содержимое.

Отдельно обратите внимание на свойство Имя у каждой страницы. Заголовок виден пользователю, а Имя — то, по чему к странице обращаются из кода. Задайте осмысленные имена сразу (СтраницаОсновное, СтраницаРасчёты), иначе в коде будут безликие Группа1 и Группа2, в которых легко запутаться.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты;
КонецПроцедуры

Если вы добавили группы-страницы, а закладок не видно — почти всегда причина в том, что у контейнера Вид остался Обычная группа, а не Страницы. Проверьте свойство именно у родителя, а не у дочерних страниц.

Вкладки в обычной форме: панель и её страницы

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

Порядок в конфигураторе для обычной формы:

  1. На палитре элементов управления выберите Панель и разместите её на форме.
  2. В контекстном меню панели выберите команду добавления страницы (Добавить страницу). Каждая команда создаёт новую закладку.
  3. Открывайте нужную страницу панели и кладите на неё поля ввода и надписи.
  4. Видимость ряда закладок регулирует свойство панели ОтображатьЗакладки.

Ограничение простое: обычные формы открываются только в толстом клиенте и не работают в веб-клиенте. Если база планируется для браузера или тонкого клиента — переносить логику надо на управляемые формы, прямого «конвертера» панели в группу-страницы нет, форму собирают заново.

Новые разработки на обычных формах не начинают: это тупиковая ветка. Панель с закладками остаётся только в старых базах, которые ещё не перевели на управляемый интерфейс.

Переключение и видимость вкладок из кода

Активную вкладку задаёт свойство контейнера ТекущаяСтраница. Ему присваивают ссылку на нужную страницу из коллекции Элементы:

&НаКлиенте
Процедура ПоказатьРасчёты()
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты;
КонецПроцедуры

Прочитать, какая вкладка открыта сейчас, можно тем же свойством:

Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаРасчёты Тогда
    ЗаполнитьРасчёты();
КонецЕсли;

Отдельную вкладку скрывают и показывают через свойство Видимость у группы-страницы:

Элементы.СтраницаСлужебная.Видимость = ПравоДоступа("Администрирование", Метаданные);

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

Если вкладка нужна не всем, а по настройке базы, видимость удобнее завязать не на код, а на функциональную опцию. Опцию привязывают к группе-странице в конфигураторе, и при выключенной опции закладка пропадает сама, без строчки встроенного языка. Для разграничения по правам доступа подойдёт и прямое присваивание Видимость, как в примере выше, — что ближе к задаче, то и используйте.

Добавить вкладку на лету в управляемой форме тоже можно — через программное создание элементов на сервере:

&НаСервере
Процедура ДобавитьСтраницу(Имя, Заголовок)
    НоваяСтраница = Элементы.Добавить(Имя, Тип("ГруппаФормы"), Элементы.ГруппаСтраницы);
    НоваяСтраница.Вид = ВидГруппыФормы.Страница;
    НоваяСтраница.Заголовок = Заголовок;
КонецПроцедуры

Так собирают, например, по вкладке на каждую строку табличной части. Приём мощный, но тяжёлый: динамические элементы усложняют поддержку, поэтому им пользуются, когда число вкладок заранее неизвестно.

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

Производительность формы с вкладками

Вкладки сами по себе форму не замедляют — тормозит то, что на них лежит. Типичная ошибка: на каждой из пяти закладок висит динамический список или тяжёлый запрос, и всё это выполняется при открытии формы, хотя пользователь смотрит только первую вкладку.

Что помогает:

  • 📉 Не грузите данные всех вкладок в ПриОткрытии. Заполняйте только видимую страницу, остальные — при первом переходе на них.
  • 📉 Тяжёлые динамические списки разносите по разным вкладкам и, если список нужен редко, подключайте его данные по факту открытия страницы, а не сразу.
  • 📉 Реквизиты, которые не показаны ни на одной активной вкладке, всё равно читаются при открытии объекта — выносите редко нужные данные в отдельную форму, а не в скрытую вкладку.

Приём с ленивой загрузкой строится на том же код-переключении: прячете штатные закладки, по нажатию кнопки переходите на страницу и там же, один раз, заполняете её данными с флагом «уже загружено». Повторный заход на вкладку запрос не гоняет.

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

Флаги-признаки «страница загружена» держите в реквизитах формы, а не в глобальных переменных: при повторном открытии формы реквизиты сбрасываются, и данные подтянутся заново, как и должно быть.

Частые ошибки при работе с вкладками

Ошибки с закладками почти всегда — не про код, а про свойства элементов и невнимательность в дереве формы.

Диагностика: выберите симптом

Вложенные вкладки и оформление закладок

Вкладки вкладываются друг в друга: внутрь страницы кладут ещё одну группу с видом Страницы, а в неё — свои страницы. Получается двухуровневая навигация: верхний ряд закладок и под ним — второй.

Злоупотреблять этим не стоит: два уровня закладок пользователь ещё считывает, три превращаются в лабиринт. Если тянет на третий уровень — скорее всего, данные пора разносить по отдельным формам.

Оформление настраивают свойствами группы-страниц:

  • Заголовок страницы — текст на закладке.
  • ОтображатьТитул — показывать ли заголовок самой области внутри страницы (не путать с текстом закладки).
  • ОтображениеСтраниц у контейнера — сверху, снизу или без закладок.
  • ГруппировкаКолонок и ОтображениеСостоянияПросмотра у группы помогают выстроить поля внутри страницы в несколько колонок.

Заголовок закладки меняют и из кода — например, чтобы показать на вкладке счётчик строк: Элементы.СтраницаТовары.Заголовок = СтрШаблон("Товары (%1)", Товары.Количество()). Число в строку складывайте через СтрШаблон или Формат, а не плюсом: прямая конкатенация строки с числом в 1С даёт ошибку преобразования типов.

Если закладок много и они не влезают в ширину формы, 1С сворачивает лишние в выпадающее меню автоматически — вручную это настраивать не нужно. Но это сигнал, что вкладок слишком много.

Когда вкладки не нужны: альтернативы

Вкладки оправданы, когда полей действительно много и они делятся на смысловые блоки. В остальных случаях есть решения проще и понятнее:

  • 🧩 Мало полей (одна-две группы). Вкладки только мешают — оставьте поля на одной форме, разделив свёртываемыми группами (Вид = Обычная группа, Поведение = Свёртываемая).
  • 🧩 Пошаговый ввод (мастер). Вместо закладок — контейнер с ОтображениеСтраниц = Нет и кнопки Далее/Назад. Пользователь идёт по шагам, не перескакивая.
  • 🧩 Полностью независимые разделы. Если данные вкладок друг с другом не связаны, это часто не одна форма с вкладками, а несколько отдельных форм или команд, открываемых по кнопке.
  • 🧩 Редко нужные данные. Служебную информацию лучше прятать в отдельную форму по команде, чем держать постоянно открытой вкладкой — форма откроется быстрее.

Простая проверка: если на вкладку заходят раз в месяц, ей не место в основной форме. Вкладки — для того, что смотрят регулярно, но не одновременно.

Ещё один признак, что вкладок слишком много: пользователь каждый раз ищет нужную закладку глазами. Семь-восемь равнозначных вкладок читаются хуже, чем две-три с внятными заголовками, под которыми поля сгруппированы свёртываемыми группами. Группировка вглубь часто понятнее, чем вширь по закладкам.

Частые вопросы

Чем группа «Страницы» отличается от группы «Страница»?
Страницы — это контейнер, рамка со всеми закладками. Страница — одна вкладка внутри него. Контейнер один, страниц в нём сколько угодно.
Можно ли сделать вкладки без видимых закладок?
Да. У контейнера поставьте ОтображениеСтраниц = Нет. Тогда страницы переключаются только из кода через ТекущаяСтраница — так делают мастера и пошаговые формы.
Как программно узнать, какая вкладка сейчас открыта?
Прочитайте Элементы.ИмяКонтейнера.ТекущаяСтраница и сравните со ссылкой на нужную страницу: Если … = Элементы.ИмяСтраницы Тогда.
Почему закладки есть в толстом клиенте, но пропадают в браузере?
Браузер открывает только управляемые формы. Элемент Панель с закладками существует лишь в обычных формах толстого клиента — для веба форму нужно пересобрать как управляемую.
Сколько уровней вложенности вкладок допустимо?
Технически — сколько угодно, на практике удобны один-два уровня. Третий уровень закладок пользователь уже теряет; это знак, что данные пора разносить по отдельным формам.