Как настроить изменение размеров групп и работу разделителей в управляемых формах 1С?

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

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

Основные условия появления разделителя

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

  1. Растяжимость элементов: Оба элемента (или группы), между которыми должен появиться разделитель, должны иметь возможность растягиваться в соответствующем направлении. Если мы хотим вертикальный разделитель для изменения ширины, у групп должно быть установлено свойство РастягиватьПоГоризонтали в значение Да.
  2. Соседство: Между разделяемыми элементами не должно быть других «прослоек». Они должны располагаться непосредственно друг за другом в дереве элементов формы.
  3. Минимальная высота: Для появления разделителя высота каждого из разделяемых элементов должна составлять не менее 2 строк.
  4. Диапазон размеров: Значение свойств Ширина (или Высота) должно быть строго больше минимального значения и строго меньше максимального, заданного в свойствах. Если у элемента жестко задана МаксимальнаяШирина, и он уже ее достиг, разделитель может заблокироваться.
  5. Тип контента: Ни один из разделяемых элементов не должен быть надписью с включенным автоматическим переносом текста. Такие элементы ведут себя специфически при расчете геометрии формы.
  6. Наличие места: Интервал между элементами в родительской группе должен быть достаточным для отрисовки самого графического элемента разделителя.

Важные свойства родительской группы

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

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

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

Содержимое групп и его влияние на сплиттер

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

Чтобы активировать разделитель, внутри каждой из групп должен находиться хотя бы один элемент управления, который реально может растягиваться. Это может быть:

Почему не сохраняются настройки пользователя?

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

Имена элементов: Платформа привязывает пользовательские настройки (в том числе положение сплиттеров) к именам элементов. Если вы создаете группы программно и при каждом запуске генерируете им новые уникальные имена, 1С не сможет сопоставить сохраненную настройку с новым элементом.

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

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

Программное управление и ограничения

Важно понимать, что в объектной модели 1С разделитель не является отдельным элементом формы. Вы не найдете его в коллекции ЭтаФорма.Элементы. Поэтому напрямую управлять им через код (например, программно передвинуть его на 50 пикселей) невозможно.

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


// Установим ограничения для группы, чтобы разделитель не уходил за пределы разумного
Элементы.ГруппаЛеваяПанель.МинимальнаяШирина = 20;
Элементы.ГруппаЛеваяПанель.МаксимальнаяШирина = 80;

Если после программного изменения свойств растягивания разделитель не появился мгновенно, попробуйте принудительно обновить интерфейс:

ЭтаФорма.ОбновитьОтображениеДанных();

Подведем итог

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

← На главную