К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как программно свернуть группу формы в 1С

Как программно свернуть и развернуть группу формы в 1С: свойство Свертка, отображение свертки, примеры кода, типичные ошибки и проверка результата.

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

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

Материал ниже разбирает механизм свертки на практике: от настройки группы в конфигураторе до готовых процедур в модуле формы, проверки результата и разбора ошибок. Примеры применимы к управляемым формам типовых и самописных конфигураций на платформе 8.3.

Как устроена свертка группы в управляемой форме

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

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

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

Настройка группы в конфигураторе перед программным управлением

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

Проверьте свойство Заголовок: в свернутом состоянии пользователь видит только его, поэтому заголовок должен понятно описывать содержимое блока, например «Дополнительные параметры» или «Служебная информация».

Если требуется, чтобы группа при открытии формы была уже свернута, можно сразу установить свойство Свертка в значение «Истина» прямо в конфигураторе. Тогда программный код для начального состояния не понадобится, а код будет нужен только для динамического переключения.

Порядок настройки группы
  1. 1
    Откройте форму в конфигураторе и выделите группу
  2. 2
    Установите ОтображениеСвертки = Кнопка
  3. 3
    Задайте понятный заголовок группы
  4. 4
    При необходимости установите Свертка = Истина для начального состояния
  5. 5
    Сохраните форму и проверьте поведение в режиме предприятия

Программное сворачивание и разворачивание группы

Обращение к элементу формы выполняется через коллекцию Элементы модуля формы. Базовый код сворачивания выглядит так:

&НаКлиенте

Процедура СвернутьДополнительно(Команда)

Элементы.ГруппаДополнительно.Свертка = Истина;

КонецПроцедуры

&НаКлиенте

Процедура РазвернутьДополнительно(Команда)

Элементы.ГруппаДополнительно.Свертка = Ложь;

КонецПроцедуры

Имя элемента («ГруппаДополнительно» в примере) должно точно совпадать с именем группы в дереве элементов формы, с учетом регистра. Ошибка в имени — самая частая причина «неработающего» кода: платформа выдаст ошибку «Поле объекта не обнаружено».

Часто требуется переключение состояния одной командой. Для этого удобно инвертировать текущее значение:

&НаКлиенте

Процедура ПереключитьСвертку(Команда)

Элементы.ГруппаДополнительно.Свертка = НЕ Элементы.ГруппаДополнительно.Свертка;

КонецПроцедуры

bsl
&НаКлиенте
Процедура ПриИзмененииРежима(Элемент)
	Если Объект.РасширенныйРежим Тогда
		Элементы.ГруппаДополнительно.Свертка = Ложь;
	Иначе
		Элементы.ГруппаДополнительно.Свертка = Истина;
	КонецЕсли;
КонецПроцедуры

Установка состояния при открытии формы

Если начальное состояние зависит от данных объекта или настроек пользователя, свойство Свертка устанавливают в обработчике ПриСозданииНаСервере или ПриОткрытии. Вариант на сервере предпочтительнее, когда условие зависит от реквизитов объекта:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если НЕ Объект.ИспользоватьДополнительныеПараметры Тогда

Элементы.ГруппаДополнительно.Свертка = Истина;

КонецЕсли;

КонецПроцедуры

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

Если состояние нужно запоминать между сеансами, сохраняйте его, например, через ХранилищеОбщихНастроек при закрытии формы и восстанавливайте при создании. Само по себе свойство свертки между сеансами не сохраняется.

Динамическое управление сверткой по условиям

Типовой сценарий — раскрывать дополнительный блок, когда пользователь выбирает определенное значение. Например, в документе при установке флажка «Требуется монтаж» разворачивается группа с параметрами монтажа. Такой код размещается в обработчике ПриИзменении соответствующего поля:

&НаКлиенте

Процедура ТребуетсяМонтажПриИзменении(Элемент)

Элементы.ГруппаПараметрыМонтажа.Свертка = НЕ Объект.ТребуетсяМонтаж;

КонецПроцедуры

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

Для нескольких условий логику удобно вынести в отдельную процедуру УстановитьВидимостьИСвертку() и вызывать ее из всех обработчиков, влияющих на состояние. Это исключает рассинхронизацию, когда разные обработчики по-разному управляют одной группой.

Маршрут решения

Как выбрать действие

Группа должна быть свернута всегда при открытииУстановите Свертка = Истина в конфигураторе, код не нужен
Состояние зависит от данных объектаУстановите Свертка в ПриСозданииНаСервере по условию
Состояние меняется при действиях пользователяМеняйте Свертка в обработчике ПриИзменении или команде формы
Нужно помнить состояние между сеансамиСохраняйте значение в ХранилищеОбщихНастроек

Проверка результата и типичные ошибки

После внедрения кода проверьте поведение в режиме предприятия: группа должна сворачиваться и разворачиваться по заданному условию, а в свернутом состоянии показывать заголовок и кнопку разворачивания. Если группа не реагирует — первым делом проверьте свойство ОтображениеСвертки.

Вторая по частоте проблема — обращение к элементу до его создания или из контекста, где элементы формы недоступны. Например, в модуле объекта обратиться к Элементы нельзя в принципе: там нет формы. Управление сверткой возможно только из модуля формы.

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

Типичные ошибки
01
Не включено ОтображениеСвертки — присвоение Свертка не дает видимого эффекта
02
Опечатка в имени элемента — ошибка «Поле объекта не обнаружено» при обращении
03
Использование Видимости вместо Свертки — пользователь теряет возможность развернуть блок самостоятельно
04
Попытка управлять сверткой из модуля объекта — там нет доступа к элементам формы
05
Управление состоянием из нескольких обработчиков без общей процедуры — рассинхронизация логики
Контрольные точки

Как проверить результат

Поведение при открытии формы
Норма

Группа в ожидаемом состоянии без мигания

Тревожный признак

Группа сначала развернута, затем сворачивается

Реакция на изменение данных
Норма

Блок сворачивается и разворачивается по условию

Тревожный признак

Состояние не меняется или меняется наоборот

Ручное управление пользователем
Норма

Стрелка свертки доступна и работает

Тревожный признак

Кнопки нет — не настроено ОтображениеСвертки

Частые вопросы

Можно ли свернуть группу страниц (вкладок) формы?

Нет, свойство Свертка относится к обычным группам. Для страниц применяют другие механизмы: переключение текущей страницы через свойство ТекущаяСтраница у родительского элемента или управление видимостью отдельных страниц.

Почему код Элементы.Группа.Свертка = Истина выдает ошибку?

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

Как свернуть группу только для определенных пользователей?

Установите свойство Свертка в обработчике ПриСозданииНаСервере по условию, проверяющему роль или имя текущего пользователя, например через РольДоступна() или ПользователиИнформационнойБазы. Сама свертка не является механизмом разграничения прав — для скрытия чувствительных данных используйте Видимость или права доступа.

Сохраняется ли состояние свертки после закрытия формы?

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

Чем свертка отличается от свойства Видимость?

Свертка оставляет заголовок группы и кнопку разворачивания — пользователь может открыть блок сам. Видимость = Ложь полностью убирает группу с формы, и вернуть ее может только код. Для необязательных, но иногда нужных блоков правильнее использовать свертку.

Работает ли свертка в тонком и веб-клиенте?

Да, механизм свертки групп поддерживается в управляемых формах во всех клиентах платформы 8.3. Внешний вид кнопки свертки может немного отличаться в зависимости от клиента и версии платформы, но программный интерфейс одинаков.

Итог

Что важно запомнить

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