Как зафиксировать шапку документа на управляемой форме при переключении закладок?

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

При проектировании документов в среде 1С:Предприятие 8 часто возникает ситуация: на форме присутствуют общие реквизиты («шапка») и панель страниц с несколькими табличными частями. Нередко при переходе на одну из вкладок таблица резко поднимается вверх, вытесняя реквизиты шапки за пределы видимости экрана. При переключении на соседнюю вкладку шапка может оставаться неподвижной. Выясним причину такого поведения и разберем по шагам, как зафиксировать шапку и обеспечить стабильную компоновку элементов.

Почему табличная часть вытесняет шапку документа

В управляемых формах 1С отсутствует прямое свойство абсолютной фиксации элементов (аналог position: fixed). Положение элементов определяется правилами автоматической компоновки и механизмом прокрутки окна. Проанализируем ключевые факторы возникновения проблемы:

  1. Автоматический скролл к активному элементу. Когда пользователь переключает страницу, платформа автоматически активизирует первый доступный элемент внутри нее. Фокус переходит на строку таблицы. Если таблица не умещается на экране целиком, окно формы принудительно прокручивается вниз, из-за чего шапка скрывается.
  2. Несогласованные свойства растяжения. Если у одной таблицы свойство РастягиватьПоВертикали установлено в значение Авто или Да, а у другой задана фиксированная высота либо автовысота строк по содержимому, их геометрические требования различаются. Платформа пересчитывает доступное пространство по-разному для каждой страницы.
  3. Пользовательские настройки формы. 1С сохраняет индивидуальные размеры элементов, измененные пользователем вручную. Если на одной из вкладок граница таблицы ранее смещалась, сохраненные параметры восстанавливаются только для нее, провоцируя появление полосы прокрутки у всей формы.

Способ 1. Изоляция областей формы через структуру групп

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

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

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

Способ 2. Синхронизация свойств высоты и командных панелей

Рассмотрим параметры элементов управления, которые необходимо привести к единому виду у обеих таблиц в конфигураторе:

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

Способ 3. Программное управление положением фокуса

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


&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент)
    // Предотвращаем автоматический скролл формы вниз к таблице
    ТекущийЭлемент = Элементы.Номер;
КонецПроцедуры

В данном примере свойству формы ТекущийЭлемент принудительно присваивается поле шапки (например, Номер или Дата), что не позволяет платформе уводить видимую область экрана вниз к строкам таблицы.

Способ 4. Сброс сохраненных настроек формы

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

← На главную