При разработке интерфейсов в обычном приложении 1С:Предприятия 8 разработчики часто сталкиваются с необходимостью реализовать динамическое поведение элементов, привычное по управляемым формам. Типичная задача — скрыть одно из табличных полей и растянуть оставшееся на всю доступную область формы либо предоставить пользователю возможность удобно переключаться между ними.
В отличие от управляемого интерфейса, где группировка и распределение пространства происходят автоматически в рамках потоковой компоновки, в обычных формах позиционирование строго фиксировано. Рассмотрим подробнее основные архитектурные подходы и программные механизмы, которые позволяют управлять геометрией и отображением табличных полей.
Простейшим действием является программное скрытие или отображение элемента управления. Для этого обратимся к коллекции ЭлементыФормы и изменим свойство Видимость:
// Скрытие табличного поля
ЭлементыФормы.ТабличнаяЧастьТовары.Видимость = Ложь;
// Отображение табличного поля
ЭлементыФормы.ТабличнаяЧастьТовары.Видимость = Истина;
Однако простое отключение видимости оставляет пустое место на форме. Чтобы второе табличное поле заняло освободившееся пространство, пересчитаем его геометрические свойства. Каждый элемент управления обычной формы предоставляет числовые координаты:
Верх — отступ сверху относительно родительского контейнера.Лево — отступ слева.Высота — вертикальный размер элемента.Ширина — горизонтальный размер элемента.Посмотрим на пример процедуры, которая скрывает одно поле и растягивает второе:
Процедура ПереключитьОтображениеТаблиц(ПоказыватьТолькоВторую)
Если ПоказыватьТолькоВторую Тогда
ЭлементыФормы.ТабличноеПоле1.Видимость = Ложь;
// Смещаем второе поле на место первого и увеличиваем высоту
ЭлементыФормы.ТабличноеПоле2.Верх = ЭлементыФормы.ТабличноеПоле1.Верх;
ЭлементыФормы.ТабличноеПоле2.Высота = ЭлементыФормы.ТабличноеПоле2.Высота + ЭлементыФормы.ТабличноеПоле1.Высота;
Иначе
// Возвращаем исходные координаты и видимость
ЭлементыФормы.ТабличноеПоле1.Видимость = Истина;
ЭлементыФормы.ТабличноеПоле2.Верх = ЭлементыФормы.ТабличноеПоле1.Верх + ЭлементыФормы.ТабличноеПоле1.Высота + 5;
ЭлементыФормы.ТабличноеПоле2.Высота = ЭлементыФормы.ТабличноеПоле2.Высота - ЭлементыФормы.ТабличноеПоле1.Высота;
КонецЕсли;
КонецПроцедуры
При ручном изменении координат важно учитывать поведение формы при изменении ее размера пользователем. Если на форме включена автоматическая расстановка привязок, система может сбросить программно заданные размеры. Чтобы этого избежать, разберем работу с привязками.
В интерактивном режиме наиболее удобным решением для двух соседних табличных полей является элемент управления Разделитель (Splitter):
Если требуется динамически перенастроить привязку границ из встроенного языка, применим метод УстановитьПривязку:
// Устанавливаем нижнюю границу первого поля к форме
ЭлементыФормы.ТабличноеПоле1.УстановитьПривязку(
ГраницаЭлементаУправления.Низ,
ЭтаФорма,
ГраницаЭлементаУправления.Низ
);
Здесь используются значения системного перечисления ГраницаЭлементаУправления: Верх, Низ, Лево, Право.
Когда табличных полей много или логика документа предусматривает работу с разными наборами данных, постоянный пересчет координат усложняет поддержку кода. Проанализируем более надежные интерфейсные альтернативы:
Таким образом, для простых случаев достаточно управлять свойствами Видимость и Высота, для гибкого разделения пространства окна оптимально подходит Разделитель, а при сложной структуре документа надежнее всего группировать данные по страницам панели.