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