В практике разработки на платформе 1С:Предприятие 8.3 часто возникает ситуация, когда в интерфейсе документа или справочника остается лишь одна видимая страница из множества. В этом случае наличие «ярлычка» (закладки) сверху становится избыточным и загромождает экран. Однако попытка просто снять флаг ОтображатьЗаголовок у элемента формы часто не приносит результата. В этой статье мы подробно разберем, почему это происходит и как победить платформу, заставив интерфейс выглядеть лаконично.
Проанализируем поведение управляемой формы. Основная проблема заключается в том, что свойство ОтображатьЗаголовок имеет более низкий приоритет по сравнению со свойством ПутьКДаннымЗаголовка. Рассмотрим ситуацию: разработчик привязал заголовок страницы к количеству строк в табличной части (например, Объект.Товары.КоличествоСтрок). Платформа считает, что если для заголовка указан динамический источник данных, то эта информация критически важна для пользователя, и принудительно включает отображение ярлычка, игнорируя установку ОтображатьЗаголовок = Ложь.
Более того, при попытке изменить ПутьКДаннымЗаголовка программно в процедуре ПриСозданииНаСервере, система часто выдает ошибку «Недопустимое значение». Это происходит потому, что связь с метаданными и путями данных для заголовков жестко фиксируется в момент компиляции формы и не подлежит динамическому изменению «на лету» через стандартное присвоение строки.
Разберем самый эффективный и «чистый» способ решения задачи. Вместо того чтобы пытаться воздействовать на конкретную страницу, мы обратимся к родительскому элементу — группе типа Страницы. У этой группы есть системное свойство, которое управляет видимостью всей панели закладок.
Для реализации этого метода в коде формы (обычно в модуле формы в процедуре ПриСозданииНаСервере) необходимо прописать следующую строку:
// Отключаем отображение закладок (ярлычков) для всей группы страниц
Элементы.ГруппаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
Важный нюанс: при использовании этого метода само содержимое страницы (кнопки, таблицы, поля) останется видимым, если у самой страницы установлено Видимость = Истина. Исчезнет только верхняя навигационная панель с закладками. Это идеальное решение, если на форме в данный момент должна отображаться только одна логическая область.
Если по каким-то причинам первый способ вам не подходит (например, структура формы слишком сложная или вы работаете с динамически создаваемыми элементами), рассмотрим альтернативный вариант. Мы можем «обмануть» платформу, создав обычную группу и перенеся в нее все элементы из существующей страницы, а саму группу страниц полностью скрыв.
Проанализируем пример кода, который позволяет это сделать:
// Создаем новую обычную группу на месте старой страницы
ГруппаТовары2 = Элементы.Вставить("ГруппаТовары2", Тип("ГруппаФормы"), ЭтаФорма, Элементы.Товары);
ГруппаТовары2.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаТовары2.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаТовары2.ОтображатьЗаголовок = Ложь;
// Переносим все подчиненные элементы из страницы "ГруппаТовары" в новую группу
Для Каждого Элемент Из Элементы.ГруппаТовары.ПодчиненныеЭлементы Цикл
Элементы.Переместить(Элемент, ГруппаТовары2);
КонецЦикла;
// Полностью скрываем исходную группу страниц, которая нам больше не нужна
Элементы.ГруппаСтраницы.Видимость = Ложь;
Этот метод считается более трудоемким («костыльным»), но он дает стопроцентную гарантию того, что никакие системные механизмы отрисовки закладок не вмешаются в ваш интерфейс, так как мы фактически отказываемся от использования объекта типа Страница.
Рассмотрим ситуацию, когда вы работаете в расширении. Иногда свойство ПутьКДаннымЗаголовка заимствуется из основной конфигурации и блокируется для редактирования. В этом случае даже интерактивное удаление текста в поле «Путь к данным заголовка» может не сработать — платформа восстановит его после сохранения.
Выясним, как это победить в расширении:
Строка (длиной 0).ПутьКДаннымЗаголовка, указывающий на этот новый пустой реквизит.Подводя итог, напомним, что визуальный мусор в виде одиноких закладок снижает юзабилити системы. Мы рекомендуем всегда проверять количество видимых страниц при открытии формы. Если страница одна — используйте ОтображениеСтраницФормы.Нет. Если страниц становится больше (например, пользователь заполнил определенные данные и появилась вкладка с доп. информацией), программно возвращайте значение в ОтображениеСтраницФормы.ЗакладкиСверху.
Помните, что управление интерфейсом в 1С 8.3 — это баланс между декларативным описанием формы и программным управлением её состоянием. Использование Элементы.ГруппаСтраницы.ОтображениеСтраниц является штатным механизмом, предусмотренным вендором, и именно его следует предпочитать при решении подобных задач.