К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как зафиксировать шапку в макете 1С

Как зафиксировать шапку таблицы в макете 1С: свойство ФиксацияСверху, программная настройка, типичные ошибки и проверка результата при прокрутке.

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

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

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

Что такое фиксация шапки и когда она нужна

Фиксация — это режим отображения табличного документа, при котором указанное количество верхних строк и левых колонок остаётся на месте, пока пользователь прокручивает остальное содержимое. Механизм аналогичен закреплению областей в Excel, но настраивается разработчиком, а не конечным пользователем.

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

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

Как зафиксировать шапку в конфигураторе через свойства макета

Самый простой способ — задать фиксацию непосредственно в макете, чтобы она применялась всегда при выводе этого макета. Откройте нужный макет (общий макет или макет объекта) типа «Табличный документ» в конфигураторе.

Далее откройте палитру свойств табличного документа: правый клик по области макета → «Свойства», либо меню «Таблица» → «Свойства». В списке найдите свойства «Фиксация сверху» и «Фиксация слева». В поле «Фиксация сверху» укажите номер последней строки шапки — например, если шапка занимает три строки, введите 3. Сохраните конфигурацию.

Порядок действий в конфигураторе
  1. 1
    Откройте макет типа «Табличный документ»
  2. 2
    Откройте палитру свойств табличного документа
  3. 3
    Найдите свойство «Фиксация сверху»
  4. 4
    Укажите номер последней строки шапки
  5. 5
    При необходимости задайте «Фиксация слева» для колонок
  6. 6
    Сохраните конфигурацию и проверьте в режиме предприятия

После этого любой табличный документ, сформированный по этому макету с сохранением свойств, будет открываться с закреплённой шапкой. Учтите нюанс: если документ выводится программно через новый объект «ТабличныйДокумент», а макет используется только как источник областей, свойства фиксации из макета в результирующий документ не переносятся автоматически — их нужно задать в коде.

Программная установка фиксации из кода

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

bsl
ТабДок = Новый ТабличныйДокумент;
// ... вывод областей макета ...
ТабДок.ФиксацияСверху = 4; // закрепить первые 4 строки
ТабДок.ФиксацияСлева = 2;  // закрепить первые 2 колонки

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

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

Фиксация шапки при печати: сквозные строки

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

Задать его можно в конфигураторе через свойства табличного документа или программно. Например, если шапка занимает строки с 5 по 7, указывается диапазон «5:7». Аналогично работают сквозные колонки для широких документов, разбиваемых по горизонтали.

Сравнение вариантов

ФиксацияСверху / ФиксацияСлева

Закрепляет шапку на экране при прокрутке. Не влияет на печать и экспорт в файл.

Сквозные строки / колонки

Повторяют шапку на каждой странице при печати. Не влияют на прокрутку на экране.

Группировка строк (итоги)

Решает другую задачу — сворачивание областей, шапку не закрепляет.

Практический подход: если документ и просматривают на экране, и печатают, настраивайте оба механизма одновременно. Это не конфликтует — свойства независимы друг от друга.

Как проверить результат и типичные ошибки

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

Контрольные точки

Как проверить результат

Прокрутка документа вниз
Норма

Шапка остаётся на месте, данные прокручиваются под ней

Тревожный признак

Шапка уходит вверх вместе с данными — фиксация не применилась

Предварительный просмотр печати
Норма

Заголовки повторяются на каждой странице (если заданы сквозные строки)

Тревожный признак

Заголовки только на первой странице — сквозные строки не настроены

Открытие сохранённого файла
Норма

Документ открывается и читается

Тревожный признак

Ожидалась закреплённая шапка в Excel-файле — фиксация 1С в файл не экспортируется

Типичные ошибки
01
Указан не номер последней строки шапки, а количество строк с неверным отсчётом — закрепляется лишняя строка данных или часть шапки остаётся прокручиваемой.
02
Ожидание, что фиксация повторит шапку при печати — для печати нужны сквозные строки, это отдельное свойство.
03
Фиксация задана в макете, но документ формируется программно в новый ТабличныйДокумент — свойство не переносится, нужно задать его в коде.
04
Фиксация задана до вывода областей и затем сброшена повторной инициализацией документа — задавайте её после формирования.

Ещё одна тонкость: если шапка содержит объединённые ячейки, выходящие за границу фиксируемой области (объединение пересекает границу между закреплённой и прокручиваемой частью), отображение может работать некорректно. Проектируйте макет так, чтобы объединения не пересекали линию фиксации.

Ограничения и альтернативные подходы

Фиксация табличного документа не экспортируется в файлы. Если документ сохраняется в Excel и пользователь ждёт закреплённую шапку там, потребуется либо закрепить области вручную в Excel, либо формировать файл программно с установкой соответствующих настроек через COM-объект или формат OpenXML — это уже за пределами штатного табличного документа.

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

Маршрут решения

Как выбрать действие

Документ просматривают на экране и прокручиваютЗадайте ФиксацияСверху в макете или в коде после формирования
Документ печатают на нескольких страницахНастройте сквозные строки (ПовторятьПриПечатиСтроки)
Данные показываются таблицей на управляемой формеИспользуйте свойство ФиксацияСлева элемента формы, шапка закреплена автоматически
Документ выгружается в ExcelФиксацию придётся настраивать отдельно на стороне Excel, свойство 1С не переносится
Итог

Что важно запомнить

Шапка на экране закрепляется свойством ФиксацияСверху (номер последней строки шапки), на печати — сквозными строками. Свойство задаётся в макете или программно, но не переносится в новый программно созданный документ и не экспортируется в файлы. Проверяйте результат прокруткой в режиме предприятия.

Частые вопросы

Можно ли зафиксировать не с первой строки, а произвольную область?

Нет. Фиксация всегда начинается от первой строки документа до указанного номера. Если над шапкой есть «шапка документа» (название, период), она тоже попадёт в закреплённую область. Выход — пересмотреть структуру макета или смириться с закреплением всего верхнего блока.

Почему фиксация, заданная в макете, не сработала в отчёте?

Наиболее вероятная причина — результат формируется в новый объект ТабличныйДокумент, куда области макета выводятся методом Вывести. Свойства фиксации при этом не копируются. Добавьте в код после формирования строку вида ТабДок.ФиксацияСверху = N.

Как зафиксировать и шапку, и первые колонки одновременно?

Задайте оба свойства: ФиксацияСверху для строк и ФиксацияСлева для колонок. Они работают независимо и комбинируются — закреплённая область в левом верхнем углу останется неподвижной при прокрутке в любом направлении.

Работает ли фиксация в веб-клиенте и тонком клиенте?

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

Как убрать фиксацию, если она мешает?

Присвойте свойству значение 0: ТабДок.ФиксацияСверху = 0. Если фиксация задана в макете, очистите соответствующее поле в палитре свойств табличного документа и сохраните конфигурацию.

Влияет ли фиксация на производительность больших документов?

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