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