При разработке интерфейсов документов с большими табличными частями в обычном приложении 1С часто возникает задача освободить экранное пространство. Если шапка документа содержит много реквизитов, пользователю неудобно просматривать длинный список строк. Рассмотрим, как реализовать механизм сворачивания шапки документа, какие технические нюансы при этом возникают и как избежать типичных ошибок при работе с привязками и порядком элементов.
Разберем классический способ, при котором реквизиты шапки выносятся на отдельную панель, а ниже располагается табличная часть или многостраничная панель. Для управления геометрией используются свойства Свертка и метод УстановитьПривязку().
Посмотрим на пример процедуры переключения состояния шапки с помощью кнопки на командной панели или отдельного элемента:
Процедура ПереключитьСверткуШапки(Свернуть)
Если Свернуть Тогда
// Сворачиваем панель вверх
ЭлементыФормы.ПанельШапки.УстановитьПривязку(ГраницаЭлементаУправления.Низ);
ЭлементыФормы.ОсновнаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ЭлементыФормы.ПанельШапки, ГраницаЭлементаУправления.Низ);
ЭлементыФормы.ПанельШапки.Свертка = РежимСверткиЭлементаУправления.Верх;
// Обязательно скрываем панель, чтобы исключить перекрытие событий мыши
ЭлементыФормы.ПанельШапки.Видимость = Ложь;
Иначе
// Разворачиваем панель обратно
ЭлементыФормы.ПанельШапки.Видимость = Истина;
ЭлементыФормы.ПанельШапки.Свертка = РежимСверткиЭлементаУправления.Нет;
ЭлементыФормы.ПанельШапки.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ЭлементыФормы.ПанельШапки, ГраницаЭлементаУправления.Верх);
ЭлементыФормы.ОсновнаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Верх);
КонецЕсли;
КонецПроцедуры
При использовании программной свертки разработчики часто сталкиваются с несколькими неприятными эффектами. Проанализируем их причины и способы решения:
Выясним причину: в обычном приложении свойство Свертка меняет визуальный размер, но физическая область свернутого элемента или порядок слоев (Z-order) могут продолжать перехватывать системные клики. Чтобы этого избежать, необходимо обязательно устанавливать Видимость = Ложь для свернутой панели, а также в конфигураторе через меню Форма → Порядок обхода переместить основную панель с табличными частями ниже панели шапки.
Рассмотрим особенность отрисовки многостраничных панелей: расчет привязок для фоновых страниц выполняется только в момент перехода на них. Важно убедиться, что границы всех табличных полей привязаны строго к границам своей Панели, а не к внешней форме. При необходимости в событии ПриСменеСтраницы панели можно инициировать обновление активного элемента.
Платформа 1С автоматически сохраняет геометрию формы при закрытии. Если пользователь закрыл документ со свернутой шапкой, в кэш настроек сохраняются промежуточные координаты. Чтобы решить проблему, в процедуре ПередЗакрытием или ПриЗакрытии формы возвращаем панель в развернутое состояние:
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
// Восстанавливаем исходный вид формы перед сохранением настроек платформой
Если ЭлементыФормы.ПанельШапки.Свертка <> РежимСверткиЭлементаУправления.Нет Тогда
ЭлементыФормы.ПанельШапки.Свертка = РежимСверткиЭлементаУправления.Нет;
ЭлементыФормы.ПанельШапки.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Если нет жесткой необходимости сворачивать шапку строго по кнопке в коде, разберем более простой и надежный визуальный механизм платформы:
В таком варианте пользователь может как плавно перетаскивать границу мышью, так и использовать встроенные стрелки разделителя для мгновенного сворачивания шапки без написания сложного программного кода.
Проанализируем типовой архитектурный подход, применяемый для документов с огромным количеством полей (по аналогии с типовыми конфигурациями на обычных формах):
Панель с закладками на весь рабочий размер окна.Такой подход полностью исключает любые проблемы со сбоем привязок, конфликтами Z-порядка элементов и некорректным масштабированием на экранах с низким разрешением.