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