Как свернуть группу элементов на управляемой форме в 1С 8.2?

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

При проектировании интерфейсов на платформе 1С:Предприятие 8.3 (начиная с версии 8.3.12) разработчики могут использовать стандартное свойство группы «Поведение» со значением «Свертываемая». Это позволяет пользователю одним кликом скрывать и раскрывать целые блоки реквизитов. Однако в версии платформы 1С 8.2 такого встроенного свойства еще не существовало. Тем не менее, задача экономии рабочего пространства формы и скрытия редко используемых полей всегда оставалась актуальной.

Разберем подробнее, как решить эту задачу в рамках управляемых форм на платформе 8.2. Выясним основные отличия от обычных форм, рассмотрим стандартные подходы, предложенные участниками сообщества, а также проанализируем более изящные методы имитации штатного поведения платформы 8.3.

Главное отличие управляемых форм 8.2 от обычных форм

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

В управляемых формах (УФ), даже на версии 8.2, этот механизм работает принципиально иначе. Когда мы устанавливаем свойство Видимость в значение Ложь для некоторой группы, платформа автоматически скрывает ее и «подтягивает» все нижележащие элементы вверх. Форма красиво и бесшовно сжимается, возвращая свободное место пользователю. Для корректной работы этого механизма достаточно, чтобы свойства формы Высота и РастягиватьПоВертикали в конфигураторе оставались в значении Авто.

Способ 1. Простое управление видимостью группы по кнопке

Рассмотрим самый очевидный и быстрый в реализации способ, которым воспользовался автор темы на форуме. Суть метода заключается в создании управляемой группы, содержащей скрываемые реквизиты, и кнопки, которая управляет ее свойством Видимость.

Разберем процесс настройки по шагам:

  1. Откроем форму в конфигураторе и добавим элемент типа Обычная группа (назовем ее, например, ГруппаСворачиваемая).
  2. Перенесем внутрь этой группы все реквизиты или табличные части, которые необходимо временно скрывать.
  3. Добавим на форму команду и связанную с ней кнопку (например, с именем Свернуть). Чтобы визуально подсказывать пользователю состояние группы, мы можем управлять свойством кнопки Пометка.

Теперь напишем программный код обработчика нажатия этой кнопки. Посмотрим на пример реализации:


&НаКлиенте
Процедура КнопкаСвернутьПриИзменении(Элемент)
    
    // Переключаем пометку на кнопке
    Элементы.Свернуть.Пометка = НЕ Элементы.Свернуть.Пометка;
    
    // Вызываем процедуру управления видимостью
    УправлениеВидимостью();
    
КонецПроцедуры

&НаКлиенте
Процедура УправлениеВидимостью()
    
    // Если пометка установлена, скрываем группу, иначе показываем
    Если Элементы.Свернуть.Пометка Тогда
        Элементы.ГруппаСворачиваемая.Видимость = Ложь;
    Иначе
        Элементы.ГруппаСворачиваемая.Видимость = Истина;
    КонецЕсли;
    
КонецПроцедуры

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

Способ 2. Имитация стандартного сворачивания с помощью декораций и Unicode-символов

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

Для реализации этого метода выполним следующие шаги:

  1. Создадим на форме элемент Декорация с видом Надпись (назовем ее ДекорацияШапка).
  2. В свойствах декорации установим флаг Гиперссылка в значение Истина. Это сделает текст кликабельным и изменит курсор мыши при наведении на него.
  3. Добавим обычную группу ГруппаПодробно, в которой разместим скрываемые элементы.
  4. Для декорации настроим событие Нажатие.

В модуле формы реализуем логику, которая при клике на гиперссылку не только меняет видимость группы, но и динамически обновляет заголовок надписи, подставляя символы стрелочек (▼ — развернуто, ▶ — свернуто). Посмотрим на пример кода:


&НаКлиенте
Процедура ДекорацияШапкаНажатие(Элемент)
    
    // Переключаем текущую видимость группы
    НоваяВидимость = НЕ Элементы.ГруппаПодробно.Видимость;
    Элементы.ГруппаПодробно.Видимость = НоваяВидимость;
    
    // Обновляем текст ссылки и спецсимвол стрелки
    Если НоваяВидимость Тогда
        Элементы.ДекорацияШапка.Заголовок = "▼ Дополнительные реквизиты";
    Иначе
        Элементы.ДекорацияШапка.Заголовок = "▶ Дополнительные реквизиты";
    КонецЕсли;
    
КонецПроцедуры

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

Способ 3. Использование скрытой группы страниц без закладок

Бывают ситуации, когда простое скрытие полей приводит к нежелательным смещениям других элементов на форме, либо когда в свернутом состоянии требуется показывать краткую сводную информацию (например, общую сумму документов или количество строк), а в развернутом — полноценную таблицу. В таких случаях идеальным решением будет использование скрытой группы страниц.

Разберем этот алгоритм по шагам:

  1. Добавим на форму элемент Группа страниц (назовем ее ГруппаПанелей).
  2. В свойствах этой группы обязательно установим параметр ОтображениеСтраниц в значение Нет. Это скроет стандартные ярлыки вкладок, сделав переход между страницами чисто программным.
  3. Внутри группы создадим две страницы: СтраницаСвернуто и СтраницаРазвернуто.
  4. На первой странице разместим только краткие данные или одну кнопку/ссылку «Развернуть подробности».
  5. На второй странице разместим всю тяжелую таблицу или форму целиком и кнопку «Свернуть обратно».

Пропишем код для программного переключения страниц:


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

Данный подход гарантирует мгновенную перестройку интерфейса без визуального "моргания" и исключает любые проблемы с версткой сложных форм.

Оптимизация производительности и важные нюансы

При проектировании динамического интерфейса на управляемых формах 1С 8.2 важно придерживаться нескольких правил оптимизации:

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

← На главную