Разработка и Конфигурация · 11 мин
Как закрепить шапку в табличном документе 1С
Как закрепить шапку в табличном документе 1С: свойства ФиксацияСверху и ФиксацияСлева, программное закрепление строк и колонок, типовые ошибки и проверка результата.
Большие табличные документы в 1С — отчёты, печатные формы, реестры — часто не помещаются на экране по высоте. При прокрутке вниз заголовки колонок исчезают, и пользователю приходится возвращаться наверх, чтобы понять, какие данные в какой колонке находятся. Решение — закрепить шапку: зафиксировать верхние строки (а при необходимости и левые колонки), чтобы они оставались видимыми при прокрутке.
В 1С:Предприятии для этого существуют два подхода. Первый — программный: свойства табличного документа ФиксацияСверху и ФиксацияСлева, которые разработчик задаёт в коде при формировании документа. Второй — интерактивный: пользователь может закрепить область прямо в режиме просмотра через меню табличного документа. Оба способа дают одинаковый визуальный результат, но различаются областью применения.
Ниже разобраны оба варианта, ограничения механизма фиксации, типичные ошибки и способы проверить, что закрепление действительно сработало.
Что такое фиксация в табличном документе и когда она нужна
Фиксация (закрепление) — это свойство табличного документа, при котором указанное количество верхних строк и/или левых колонок остаётся на экране независимо от прокрутки. Механизм аналогичен закреплению областей в Excel, но управляется через объектную модель 1С.
Фиксация особенно полезна в следующих случаях:
- отчёты с большим количеством строк, где важно видеть заголовки колонок;
- печатные формы-реестры, которые пользователь просматривает на экране перед печатью;
- широкие таблицы, где при горизонтальной прокрутке теряется первая колонка с наименованием (например, номенклатура или контрагент);
- табличные документы, выводимые на форму в элемент «Поле табличного документа».
Если документ небольшой и целиком помещается на экране, фиксация не нужна — лишнее закрепление только сократит видимую область. Закрепляйте шапку там, где прокрутка реально происходит.
Программное закрепление шапки через ФиксацияСверху
Основной способ — задать свойство ФиксацияСверху у объекта ТабличныйДокумент после того, как шапка выведена. Значение свойства — номер последней закрепляемой строки. Например, если шапка занимает первые 5 строк, нужно присвоить значение 5.
Типовой фрагмент кода формирования отчёта:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
// Выводим шапку
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
// Запоминаем, сколько строк заняла шапка, и фиксируем
ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;
// Дальше выводим строки данных
Пока Выборка.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Ключевой приём — использовать ТабДок.ВысотаТаблицы сразу после вывода шапки: так не нужно вручную считать строки, и код не сломается при изменении макета. Если высота шапки известна и стабильна, можно указать число напрямую, но привязка к фактической высоте надёжнее.
- 1Выведите в табличный документ область шапки
- 2Сразу после вывода присвойте ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы
- 3Выведите остальные строки данных
- 4Откройте документ и прокрутите вниз — шапка должна остаться на месте
Закрепление колонок через ФиксацияСлева
Для широких таблиц аналогично работает свойство ФиксацияСлева — оно задаёт номер последней закрепляемой колонки. Например, ТабДок.ФиксацияСлева = 2; закрепит две первые колонки (обычно это номер строки и наименование), и при горизонтальной прокрутке они останутся видимыми.
Оба свойства можно применять одновременно: шапка сверху и ключевые колонки слева будут зафиксированы, а прокручиваться станет только область данных. Это стандартная схема для крупных аналитических отчётов.
Учтите, что номер закрепляемой колонки нужно знать заранее или вычислять. В отличие от высоты, у табличного документа нет простого свойства «ширина шапки», поэтому количество колонок обычно фиксируют константой, соответствующей структуре макета.
Сравнение вариантов
Закрепляет верхние строки (шапку). Подходит для длинных вертикальных отчётов. Значение удобно брать из ВысотаТаблицы после вывода шапки.
Закрепляет левые колонки. Подходит для широких таблиц, где важно видеть наименование строки. Номер колонки задаётся числом по структуре макета.
Полное закрепление шапки и ключевых колонок. Оптимально для больших реестров, но сокращает видимую область данных.
Интерактивное закрепление в режиме просмотра
Пользователь может закрепить область и без участия разработчика. В режиме просмотра табличного документа (или в конфигураторе при редактировании макета) доступна команда закрепления: нужно установить курсор в ячейку, находящуюся ниже и правее закрепляемой области, и выбрать пункт закрепления в меню табличного документа (в типовых интерфейсах — через меню «Таблица» или контекстное меню, в зависимости от версии платформы).
Логика такая же, как в Excel «Закрепить области»: всё, что выше и левее активной ячейки, будет зафиксировано. Снятие закрепления выполняется той же командой повторно.
Этот способ подходит для разовой работы, но у него есть ограничение: интерактивная фиксация действует в текущем сеансе просмотра и не сохраняется в самом документе, сформированном программно. Если отчёт формируется заново, закрепление нужно устанавливать снова — поэтому для постоянно используемых отчётов правильнее задавать фиксацию в коде.
Ограничения и особенности механизма
Фиксация влияет только на отображение на экране. При печати табличного документа закреплённая шапка сама по себе не повторяется на каждой странице — для печати используется отдельный механизм: метод ПовторятьПриПечатиСтроки (или настройка сквозных строк в параметрах печати). Частая ошибка — ожидать, что ФиксацияСверху автоматически даст сквозной заголовок на бумаге.
Ещё несколько ограничений, которые нужно учитывать:
- закрепить можно только непрерывную область от первой строки/колонки — нельзя зафиксировать строки «в середине» документа;
- при выводе данных методом
ВставитьОбластьвыше закреплённой зоны нумерация строк сдвигается, и значение фиксации может перестать соответствовать реальной шапке; - если значение ФиксацияСверху больше фактической высоты таблицы, весь документ окажется «закреплённым», и прокрутка перестанет работать осмысленно;
- в управляемых формах поле табличного документа корректно отображает фиксацию, но при очень узкой видимой области большая закреплённая зона может оставить слишком мало места для данных.
Типичные ошибки и как их избежать
Первая распространённая ошибка — задавать ФиксацияСверху до вывода шапки или в конце формирования с «жёстким» числом. Если макет изменится (добавят строку в шапку), фиксация съедет: либо часть шапки станет прокручиваться, либо закрепится лишняя строка данных. Привязка к ВысотаТаблицы сразу после вывода шапки решает эту проблему.
Вторая ошибка — ожидать фиксацию в отчётах на СКД, где результат выводится не в «чистый» табличный документ, а в элемент формы с собственными настройками. В СКД закрепление шапки обычно обеспечивается самим механизмом отображения отчёта, и ручная установка свойств может не потребоваться или потребует доработки через программный вывод результата.
Третья ошибка — проверять результат только в конфигураторе. Поведение поля табличного документа стоит проверить в режиме предприятия у реального пользователя: там могут отличаться масштаб, размер окна и видимая область.
Как проверить, что шапка закрепилась
Проверка простая: откройте сформированный документ и прокрутите его вниз на несколько экранов. Закреплённая шапка должна оставаться вверху, а между ней и прокручиваемой областью обычно отображается визуальная разделительная линия. При горизонтальной прокрутке аналогично проверьте закреплённые колонки.
Дополнительно убедитесь, что прокрутка данных работает корректно: последняя строка документа должна быть достижима, а первая строка данных — подниматься вплотную к шапке. Если часть строк «прячется» или прокрутка ведёт себя странно, проверьте значение ФиксацияСверху относительно реальной высоты шапки.
Как проверить результат
Шапка остаётся наверху, данные прокручиваются под ней
Шапка уходит вверх вместе с данными — фиксация не задана или равна 0
Закреплены ровно строки шапки, первая строка данных прокручивается
Закреплена лишняя строка данных или часть шапки прокручивается — неверное значение ФиксацияСверху
Если настроены сквозные строки, шапка повторяется на каждой странице
Шапка только на первой странице — печатное повторение не настроено, одной фиксации недостаточно
FAQ
Можно ли закрепить шапку в середине документа, а не сверху?
Нет. Фиксация в табличном документе 1С работает только от начала: закрепляются первые N строк и/или первые N колонок. Зафиксировать произвольную область в середине нельзя — если нужна такая логика, документ придётся перестроить, подняв нужные строки наверх.
Почему после задания ФиксацияСверху шапка всё равно прокручивается?
Чаще всего свойство присвоено до вывода шапки (тогда ВысотаТаблицы равна 0) или документ после этого был очищен и сформирован заново без повторной установки свойства. Проверьте, что присвоение выполняется после вывода шапки и не переопределяется ниже по коду.
Как снять закрепление программно?
Присвойте свойствам нулевые значения: ТабДок.ФиксацияСверху = 0 и ТабДок.ФиксацияСлева = 0. После этого документ будет прокручиваться целиком.
Работает ли фиксация в отчётах на СКД?
В типовом выводе СКД закрепление шапки обычно обеспечивается самим механизмом отображения отчёта в форме. Если вы выводите результат СКД программно в табличный документ, свойства ФиксацияСверху и ФиксацияСлева работают так же, как для обычного табличного документа.
Как сделать, чтобы шапка повторялась на каждой странице при печати?
Используйте механизм сквозных строк печати (метод ПовторятьПриПечатиСтроки у табличного документа), указав диапазон строк шапки. Экранная фиксация и печатное повторение настраиваются независимо друг от друга.
Влияет ли закрепление на производительность больших отчётов?
Заметного влияния нет: фиксация меняет только способ отображения, а не объём данных. На скорость формирования влияют количество строк, обращения к данным и сложность макета, а не наличие закреплённой области.
Что важно запомнить
Шапка табличного документа закрепляется свойствами ФиксацияСверху и ФиксацияСлева, которые задают после вывода шапки; надёжнее брать значение из ВысотаТаблицы. Фиксация работает только на экране — для повторения шапки при печати нужны сквозные строки. Проверяйте результат прокруткой в режиме предприятия.