При проектировании интерфейсов на платформе 1С:Предприятие 8.3 (начиная с версии 8.3.12) разработчики могут использовать стандартное свойство группы «Поведение» со значением «Свертываемая». Это позволяет пользователю одним кликом скрывать и раскрывать целые блоки реквизитов. Однако в версии платформы 1С 8.2 такого встроенного свойства еще не существовало. Тем не менее, задача экономии рабочего пространства формы и скрытия редко используемых полей всегда оставалась актуальной.
Разберем подробнее, как решить эту задачу в рамках управляемых форм на платформе 8.2. Выясним основные отличия от обычных форм, рассмотрим стандартные подходы, предложенные участниками сообщества, а также проанализируем более изящные методы имитации штатного поведения платформы 8.3.
Прежде чем перейти к программному коду, проанализируем важную особенность поведения управляемого интерфейса. В старых обычных формах простое отключение видимости элемента приводило к тому, что на его месте оставалась пустая область. Форма не умела автоматически перестраиваться и сжиматься по вертикали, из-за чего разработчикам приходилось программно двигать границы соседних элементов и изменять высоту самой формы.
В управляемых формах (УФ), даже на версии 8.2, этот механизм работает принципиально иначе. Когда мы устанавливаем свойство Видимость в значение Ложь для некоторой группы, платформа автоматически скрывает ее и «подтягивает» все нижележащие элементы вверх. Форма красиво и бесшовно сжимается, возвращая свободное место пользователю. Для корректной работы этого механизма достаточно, чтобы свойства формы Высота и РастягиватьПоВертикали в конфигураторе оставались в значении Авто.
Рассмотрим самый очевидный и быстрый в реализации способ, которым воспользовался автор темы на форуме. Суть метода заключается в создании управляемой группы, содержащей скрываемые реквизиты, и кнопки, которая управляет ее свойством Видимость.
Разберем процесс настройки по шагам:
ГруппаСворачиваемая).Свернуть). Чтобы визуально подсказывать пользователю состояние группы, мы можем управлять свойством кнопки Пометка.Теперь напишем программный код обработчика нажатия этой кнопки. Посмотрим на пример реализации:
&НаКлиенте
Процедура КнопкаСвернутьПриИзменении(Элемент)
// Переключаем пометку на кнопке
Элементы.Свернуть.Пометка = НЕ Элементы.Свернуть.Пометка;
// Вызываем процедуру управления видимостью
УправлениеВидимостью();
КонецПроцедуры
&НаКлиенте
Процедура УправлениеВидимостью()
// Если пометка установлена, скрываем группу, иначе показываем
Если Элементы.Свернуть.Пометка Тогда
Элементы.ГруппаСворачиваемая.Видимость = Ложь;
Иначе
Элементы.ГруппаСворачиваемая.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Этот код отлично решает задачу: при нажатии на кнопку группа будет скрываться, а сама форма — аккуратно уменьшаться в размерах.
Хотя первый способ полностью работоспособен, обычная кнопка на форме часто выглядит громоздко. Проанализируем более элегантный вариант решения — использование текстовой гиперссылки с символами-треугольниками, имитирующими поведение стандартного механизма свертки 1С 8.3.
Для реализации этого метода выполним следующие шаги:
ДекорацияШапка).Гиперссылка в значение Истина. Это сделает текст кликабельным и изменит курсор мыши при наведении на него.ГруппаПодробно, в которой разместим скрываемые элементы.Нажатие.В модуле формы реализуем логику, которая при клике на гиперссылку не только меняет видимость группы, но и динамически обновляет заголовок надписи, подставляя символы стрелочек (▼ — развернуто, ▶ — свернуто). Посмотрим на пример кода:
&НаКлиенте
Процедура ДекорацияШапкаНажатие(Элемент)
// Переключаем текущую видимость группы
НоваяВидимость = НЕ Элементы.ГруппаПодробно.Видимость;
Элементы.ГруппаПодробно.Видимость = НоваяВидимость;
// Обновляем текст ссылки и спецсимвол стрелки
Если НоваяВидимость Тогда
Элементы.ДекорацияШапка.Заголовок = "▼ Дополнительные реквизиты";
Иначе
Элементы.ДекорацияШапка.Заголовок = "▶ Дополнительные реквизиты";
КонецЕсли;
КонецПроцедуры
Этот метод визуально практически неотличим от штатного механизма платформы 8.3 и воспринимается пользователями как естественное поведение программы.
Бывают ситуации, когда простое скрытие полей приводит к нежелательным смещениям других элементов на форме, либо когда в свернутом состоянии требуется показывать краткую сводную информацию (например, общую сумму документов или количество строк), а в развернутом — полноценную таблицу. В таких случаях идеальным решением будет использование скрытой группы страниц.
Разберем этот алгоритм по шагам:
ГруппаПанелей).ОтображениеСтраниц в значение Нет. Это скроет стандартные ярлыки вкладок, сделав переход между страницами чисто программным.СтраницаСвернуто и СтраницаРазвернуто.Пропишем код для программного переключения страниц:
&НаКлиенте
Процедура ПереключитьРежимОтображения(Команда)
// Проверяем текущую активную страницу и меняем ее
Если Элементы.ГруппаПанелей.ТекущаяСтраница = Элементы.СтраницаСвернуто Тогда
Элементы.ГруппаПанелей.ТекущаяСтраница = Элементы.СтраницаРазвернуто;
Иначе
Элементы.ГруппаПанелей.ТекущаяСтраница = Элементы.СтраницаСвернуто;
КонецЕсли;
КонецПроцедуры
Данный подход гарантирует мгновенную перестройку интерфейса без визуального "моргания" и исключает любые проблемы с версткой сложных форм.
При проектировании динамического интерфейса на управляемых формах 1С 8.2 важно придерживаться нескольких правил оптимизации:
Видимость) и переключение страниц — это чисто клиентские операции. Они выполняются на стороне клиента мгновенно. Не следует в момент сворачивания обращаться к серверу без крайней необходимости, чтобы избежать задержек в работе интерфейса.Таким образом, даже при отсутствии штатного свойства свертывания в платформе 1С 8.2, разработчик обладает полным спектром инструментов для создания удобного, отзывчивого и эргономичного интерфейса.