Как управлять разделителем в управляемой форме 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В управляемом интерфейсе системы «1С:Предприятие 8.3» разработчики часто сталкиваются с ситуацией, когда платформа автоматически вставляет разделитель (сплиттер) между элементами формы. Проблема заключается в том, что этот разделитель не является самостоятельным объектом метаданных, который можно просто перетащить мышкой в редакторе формы. Его появление подчиняется строгим алгоритмам компоновки интерфейса. Разберем подробно, как именно можно управлять этим механизмом, чтобы добиться нужного визуального расположения элементов.

Механизм автоматического появления разделителя

Прежде всего, проанализируем природу этого элемента. Разделитель в управляемой форме — это результат работы механизма автоматического распределения свободного пространства. Он возникает тогда, когда платформа обнаруживает два или более элемента (или группы), претендующих на расширение в одном направлении.

Рассмотрим условия, при которых платформа отрисовывает разделитель:

  1. Элементы находятся в одном контейнере (в корне формы или в одной группе).
  2. У нескольких элементов установлено свойство РастягиватьПоВертикали (или по горизонтали) в значение Да или Авто.
  3. Содержимое элементов позволяет им реально изменять размер (например, многострочное поле ввода, таблица или динамический список).

Платформа видит «конфликт» за свободное место и вставляет интерактивную черту, чтобы пользователь мог самостоятельно отрегулировать пропорции этих элементов.

Способ 1. Управление через свойства растягивания

Это самый прямой способ переместить разделитель. Выясним, как настройки РастягиватьПоВертикали влияют на положение черты. Допустим, у нас есть три реквизита: Р1, Р2 и Р3. Если мы хотим, чтобы разделитель стоял строго после Р2, нам нужно настроить их следующим образом:

  1. Реквизит 1: Установим свойство РастягиватьПоВертикали в значение Ложь. В этом случае элемент займет ровно столько места, сколько ему нужно, и не будет участвовать в дележе пространства.
  2. Реквизит 2: Установим свойство РастягиватьПоВертикали в значение Истина. Теперь этот элемент становится активным участником растягивания.
  3. Реквизит 3: Также установим РастягиватьПоВертикали в значение Истина.

В этой конфигурации платформа вставит разделитель между Р2 и Р3. Если же мы хотим, чтобы разделитель был после Р1, нам нужно включить растягивание для Р1 и Р2. Таким образом, управляя флагом «растяжимости», мы указываем платформе точки, в которых допустимо изменение пропорций.

Способ 2. Использование группировок и свойства «Объединенная»

Рассмотрим более изящный метод управления интерфейсом через группировку элементов. Часто бывает нужно, чтобы группа элементов визуально воспринималась как единое целое, без лишних разделителей внутри. Для этого проанализируем свойство группы Объединенная.

Выполним следующие шаги:

  1. Создадим Обычную группу на форме.
  2. Поместим внутрь неё элементы, которые должны растягиваться синхронно.
  3. Посмотрим на свойство группы Группировка. Если установлено Вертикальная, элементы будут располагаться друг под другом.
  4. Обратим внимание на флаг Объединенная. Если этот флаг установлен, платформа старается не вставлять разделители между элементами внутри этой группы, даже если они имеют свойство растягивания. Если флаг снять, разделители появятся внутри группы между подходящими элементами.

Этот метод удобен тем, что позволяет локализовать поведение разделителей в определенных частях формы, не затрагивая общую структуру документа.

Способ 3. Отключение разделителя через фиксированные размеры

Иногда возникает задача полностью убрать разделитель, сохранив при этом соседство элементов. В этом случае нам поможет жесткое ограничение размеров. Если один из элементов перестает претендовать на «пожирание» всего свободного места, платформа убирает разделитель за ненадобностью.

Для реализации этого подхода выполним следующее:

В такой ситуации второй элемент заберет всё оставшееся место, и разделитель исчезнет, так как пользователю больше нечего «регулировать» вручную.

Программное управление разделителями

Хотя во встроенном языке 1С нет объекта РазделительФормы, мы можем управлять им опосредованно через код. Проанализируем ситуацию, когда разделитель должен появляться только при определенных условиях.

Мы можем программно изменять свойства растягивания у элементов. Рассмотрим пример кода:


&НаСервере
Процедура УправлениеРазделителемНаСервере(ПоказыватьРазделитель)
    
    // Если нам нужно скрыть разделитель между Элемент1 и Элемент2,
    // достаточно отключить растягивание у одного из них.
    
    Элементы.ГруппаРеквизитов1.РастягиватьПоВертикали = ПоказыватьРазделитель;
    Элементы.ГруппаРеквизитов2.РастягиватьПоВертикали = Истина;
    
КонецПроцедуры

При изменении свойства РастягиватьПоВертикали (или Видимость) в реальном времени, платформа мгновенно пересчитывает композицию формы и добавляет или удаляет разделительную полосу. Для упрощения программного управления составом и параметрами элементов можно использовать готовый модуль программного изменения форм.

Особенности горизонтальных разделителей

Все вышеописанные правила актуальны и для горизонтального разделения. Если мы создадим группу с типом Группировка - Горизонтальная всегда и поместим в неё два растягиваемых по горизонтали элемента (например, два дерева значений или две таблицы), между ними появится вертикальный разделитель.

Важно помнить: чтобы горизонтальный разделитель корректно работал, свойство РастягиватьПоГоризонтали должно быть «проброшено» через все родительские группы до самого верха. Если хотя бы у одной промежуточной группы это свойство будет жестко выключено, элементы внутри не смогут претендовать на расширение, и разделитель не отобразится.

Нюансы современных версий платформы (8.3.15+)

Разберем важную особенность отрисовки в новых версиях платформы. Начиная с версии 8.3.15, алгоритм отрисовки стал более компактным. В некоторых случаях разделитель может выглядеть как очень тонкая, едва заметная линия или быть вовсе невидимым. Однако он продолжает функционировать: при наведении курсора мыши на область между элементами иконка курсора изменится на двустороннюю стрелку, позволяя изменить размер.

Если вам кажется, что разделителя нет, хотя свойства настроены верно, попробуйте следующее:

  1. Убедитесь, что для элементов установлено свойство МногострочныйРежим (для полей ввода).
  2. Проверьте, не вложены ли элементы в группу со свойством Отображение - Нет, что иногда визуально скрывает границы, в которых работает сплиттер.
  3. Убедитесь, что высота формы достаточна для того, чтобы платформе было что разделять.

Таким образом, мы выяснили, что управление разделителем в 1С — это всегда работа с контекстом окружения элементов. Комбинируя настройки растяжения, фиксированные размеры и свойства группировки Объединенная, можно добиться идеального поведения интерфейса без необходимости прямого позиционирования объектов. Для интерактивного подбора параметров отображения и свойств элементов прямо в пользовательском режиме можно воспользоваться редактором форм в режиме предприятия.

← На главную