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

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

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

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

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

Рассмотрим по шагам 7 «золотых правил» платформы, без соблюдения которых сплиттер не появится:

  1. Обоюдное растягивание. Оба разделяемых элемента (будь то группы или таблицы) должны иметь установленное свойство РастягиватьПоГоризонтали (для вертикального разделителя) или РастягиватьПоВертикали (для горизонтального) в значение Да. Если у одного элемента стоит Авто, а у другого Да, платформа может не создать разделитель. Рекомендуем явно проставлять Да для обеих сторон.
  2. Отсутствие «прослоек». Между разделяемыми элементами в дереве элементов формы не должно быть ничего лишнего. Даже если вы добавили декорацию-надпись или невидимый вспомогательный элемент, это «разорвет» соседство, и разделитель не будет отрисован. Проверьте, чтобы в структуре формы ГруппаЛево и ГруппаПраво шли строго друг за другом.
  3. Минимальный размер. Платформа не будет разделять элементы, которые слишком малы. Высота каждого из разделяемых элементов должна быть не менее 2 строк (для горизонтального разделения).
  4. Отсутствие жестких границ. Если вы установили свойство Ширина или Высота в конкретных единицах (например, 40 символов), вы тем самым ограничили гибкость элемента. Для появления разделителя параметры ширины и высоты должны быть равны 0 (что означает Авто). Также проверьте свойства МаксимальнаяШирина и МаксимальнаяВысота — они не должны ограничивать рост элемента.
  5. Тип контента. Разделитель не появится, если один из элементов — это обычная надпись (Декорация типа Надпись) с включенным автоматическим переносом текста. Платформа считает такой контент нестабильным для динамического изменения размеров.
  6. Достаточное пространство. В родительской группе должно быть достаточно места для отрисовки самого интерфейсного элемента разделителя. Если форма перегружена или элементы втиснуты в фиксированные рамки, сплиттер будет отброшен.
  7. Свойство Объединенная (United). Это один из самых коварных пунктов. У родительской группы (которая содержит обе ваши части) свойство Вид должно быть Обычная группа, а свойство Объединенная должно быть установлено в значение Да. Если у родителя стоит Нет, то его дочерние элементы рассматриваются как независимые блоки, между которыми не предполагается интерактивное взаимодействие.

Практические советы по настройке свойств

Выясним причину, почему даже при соблюдении правил ИТС разделитель может не появляться. Часто проблема кроется во вложенности групп. Рассмотрим пример структуры:


- ГруппаОбщая (Горизонтальная, Объединенная = Да)
    - ГруппаЛеваяЧасть (РастягиватьПоГоризонтали = Да)
        - Таблица1
    - ГруппаПраваяЧасть (РастягиватьПоГоризонтали = Да)
        - Таблица2

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

Посмотрим на ситуацию с параметром Авто. Как показывает практика, стоит только программисту вручную изменить ширину группы (например, поставить 10 символов вместо 0), как автоматический механизм расчета разделителей ломается. Верните все значения в 0 (Авто) и используйте только признак растягивания.

Влияние невидимых элементов и «мусора» в структуре

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

Проблема со скроллингом

Разделитель никогда не появится внутри группы, у которой включена автоматическая прокрутка. Если у вашей ГруппаОбщая (родительской) стоит ВариантУправленияВысотой = Авто или явно заданы полосы прокрутки, дочерние элементы будут размещены в «бесконечном» контейнере. В таком случае смысл разделителя теряется, так как размеры элементов определяются их контентом, а не размером окна формы.

Алгоритм «оживления» разделителя

Если разделитель упорно не появляется, выполните следующие действия по шагам:

  1. Убедитесь, что родительская группа имеет тип Обычная группа и группировку Горизонтальная (если нужен вертикальный разделитель).
  2. Проверьте, что свойство Объединенная у родительской группы стоит в значении Да.
  3. Зайдите в свойства обеих дочерних групп и установите РастягиватьПоГоризонтали в значение Да.
  4. Убедитесь, что Ширина у обеих групп равна 0.
  5. Проверьте вложенные элементы (таблицы, списки). У них также должно стоять РастягиватьПоГоризонтали = Да и Ширина = 0.
  6. Если разделитель все равно не виден, попробуйте временно отключить заголовки у групп (ОтображатьЗаголовок = Нет). Иногда платформа резервирует место под заголовок так, что на разделитель не остается пикселей.
  7. В крайнем случае, создайте новую горизонтальную группу и перенесите в нее элементы заново — иногда в кэше метаданных формы сохраняются старые настройки привязок, которые мешают отрисовке.

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

← На главную