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