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