В управляемом интерфейсе 1С 8.3 программист не может просто «перетащить» элемент типа «Разделитель» на форму, как это было в обычных формах. Платформа формирует разделители (сплиттеры) автоматически, исходя из совокупности настроек элементов и их расположения. Часто возникают ситуации, когда между двумя таблицами разделитель есть, а между двумя группами, содержащими эти таблицы, он исчезает. Разберем подробно, как заставить платформу отрисовать заветную «серую линию», позволяющую пользователю менять размеры областей мышью.
Проанализируем базовый принцип: платформа 1С отрисовывает разделитель только тогда, когда она «понимает», что оба соседних элемента могут и хотят менять свой размер, и при этом их изменение не нарушит общую целостность формы. Если хотя бы один элемент жестко зафиксирован в размерах или имеет ограничения, разделитель становится бессмысленным и скрывается.
Рассмотрим по шагам 7 «золотых правил» платформы, без соблюдения которых сплиттер не появится:
РастягиватьПоГоризонтали (для вертикального разделителя) или РастягиватьПоВертикали (для горизонтального) в значение Да. Если у одного элемента стоит Авто, а у другого Да, платформа может не создать разделитель. Рекомендуем явно проставлять Да для обеих сторон.ГруппаЛево и ГруппаПраво шли строго друг за другом.Ширина или Высота в конкретных единицах (например, 40 символов), вы тем самым ограничили гибкость элемента. Для появления разделителя параметры ширины и высоты должны быть равны 0 (что означает Авто). Также проверьте свойства МаксимальнаяШирина и МаксимальнаяВысота — они не должны ограничивать рост элемента.Декорация типа Надпись) с включенным автоматическим переносом текста. Платформа считает такой контент нестабильным для динамического изменения размеров.Вид должно быть Обычная группа, а свойство Объединенная должно быть установлено в значение Да. Если у родителя стоит Нет, то его дочерние элементы рассматриваются как независимые блоки, между которыми не предполагается интерактивное взаимодействие.Выясним причину, почему даже при соблюдении правил ИТС разделитель может не появляться. Часто проблема кроется во вложенности групп. Рассмотрим пример структуры:
- ГруппаОбщая (Горизонтальная, Объединенная = Да)
- ГруппаЛеваяЧасть (РастягиватьПоГоризонтали = Да)
- Таблица1
- ГруппаПраваяЧасть (РастягиватьПоГоризонтали = Да)
- Таблица2
В этой ситуации важно, чтобы не только таблицы внутри групп имели признак растягивания, но и сами контейнеры (ГруппаЛеваяЧасть и ГруппаПраваяЧасть). Если вы установите растягивание только у таблиц, но оставите Авто у групп, платформа может рассчитать ширину групп исходя из содержимого и «заморозить» их, лишив пользователя возможности двигать границу.
Посмотрим на ситуацию с параметром Авто. Как показывает практика, стоит только программисту вручную изменить ширину группы (например, поставить 10 символов вместо 0), как автоматический механизм расчета разделителей ломается. Верните все значения в 0 (Авто) и используйте только признак растягивания.
Проанализируем ситуацию, когда разделитель был, но исчез после добавления нового функционала. Если вы добавили на форму кнопку или поле, которое программно скрывается (Видимость = Ложь), оно все равно присутствует в дереве элементов. Если этот скрытый элемент оказался между вашими группами, разделитель исчезнет. Платформа анализирует дерево элементов статически при инициализации формы. Решение: переместите все скрытые или вспомогательные элементы в начало или конец родительской группы, чтобы разделяемые объекты «соприкасались» в дереве метаданных.
Разделитель никогда не появится внутри группы, у которой включена автоматическая прокрутка. Если у вашей ГруппаОбщая (родительской) стоит ВариантУправленияВысотой = Авто или явно заданы полосы прокрутки, дочерние элементы будут размещены в «бесконечном» контейнере. В таком случае смысл разделителя теряется, так как размеры элементов определяются их контентом, а не размером окна формы.
Если разделитель упорно не появляется, выполните следующие действия по шагам:
Обычная группа и группировку Горизонтальная (если нужен вертикальный разделитель).Объединенная у родительской группы стоит в значении Да.РастягиватьПоГоризонтали в значение Да.Ширина у обеих групп равна 0.РастягиватьПоГоризонтали = Да и Ширина = 0.ОтображатьЗаголовок = Нет). Иногда платформа резервирует место под заголовок так, что на разделитель не остается пикселей.Соблюдение этих правил гарантирует появление сплиттера. Помните, что управляемая форма — это декларативный механизм. Мы не «рисуем» форму, а «описываем правила», по которым платформа строит интерфейс. Разделитель — это результат правильно описанных правил взаимодействия двух растягиваемых контейнеров.