Как реализовать возможность свернуть шапку документа в обычных формах 1С?

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

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

Вариант 1. Программное управление свойством «Свертка» и привязками

Разберем классический способ, при котором реквизиты шапки выносятся на отдельную панель, а ниже располагается табличная часть или многостраничная панель. Для управления геометрией используются свойства Свертка и метод УстановитьПривязку().

Посмотрим на пример процедуры переключения состояния шапки с помощью кнопки на командной панели или отдельного элемента:


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

Разбор частых проблем и их устранение

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

  1. Табличная часть перестает реагировать на мышь (не работает колесико, нельзя выделить строку).

    Выясним причину: в обычном приложении свойство Свертка меняет визуальный размер, но физическая область свернутого элемента или порядок слоев (Z-order) могут продолжать перехватывать системные клики. Чтобы этого избежать, необходимо обязательно устанавливать Видимость = Ложь для свернутой панели, а также в конфигураторе через меню Форма → Порядок обхода переместить основную панель с табличными частями ниже панели шапки.

  2. Элементы на неактивных вкладках панели не растягиваются.

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

  3. Сбой положения элементов при повторном открытии формы.

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

    
    Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
        
        // Восстанавливаем исходный вид формы перед сохранением настроек платформой
        Если ЭлементыФормы.ПанельШапки.Свертка <> РежимСверткиЭлементаУправления.Нет Тогда
            ЭлементыФормы.ПанельШапки.Свертка = РежимСверткиЭлементаУправления.Нет;
            ЭлементыФормы.ПанельШапки.Видимость = Истина;
        КонецЕсли;
        
    КонецПроцедуры
    

Вариант 2. Использование элемента управления «Разделитель»

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

  1. Размещаем на форме ПанельШапки с реквизитами документа.
  2. Под ней добавляем стандартный элемент управления Разделитель с горизонтальной ориентацией.
  3. Ниже располагаем панель с табличной частью.
  4. В свойствах разделителя и панелей настраиваем привязки так, чтобы верхняя граница разделителя была привязана к низу верхней панели, а верх нижней панели — к разделителю.

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

Вариант 3. Разнесение реквизитов шапки и табличной части по вкладкам

Проанализируем типовой архитектурный подход, применяемый для документов с огромным количеством полей (по аналогии с типовыми конфигурациями на обычных формах):

  1. На форму добавляется одна общая Панель с закладками на весь рабочий размер окна.
  2. На первую закладку (например, «Основное» или «Шапка») переносятся все реквизиты документа.
  3. На вторую закладку (например, «Товары» или «Состав») помещается табличная часть во весь размер окна.
  4. На третью — дополнительные сведения и параметры учета.

Такой подход полностью исключает любые проблемы со сбоем привязок, конфликтами Z-порядка элементов и некорректным масштабированием на экранах с низким разрешением.

← На главную