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

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

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

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

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

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

Ниже разобраны оба подхода, особенности работы с областями макета, ограничения фиксации и типичные ошибки, из-за которых шапка «не прилипает» или фиксируется неправильно.

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

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

Фиксация особенно полезна в длинных отчётах, реестрах документов, прайс-листах и печатных формах с десятками и сотнями строк. Без неё работа с таким документом превращается в постоянную прокрутку туда-обратно, что замедляет работу и провоцирует ошибки при сверке данных.

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

Способ 1. Фиксация шапки через конфигуратор

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

Откройте форму, содержащую табличный документ, выделите поле табличного документа и найдите в палитре свойств пункт «Фиксация сверху» (FixationTop). Укажите число строк, которые должны оставаться на экране. Если шапка занимает три строки (например, заголовок отчёта, период и строку с именами колонок), укажите 3.

Дополнительно доступно свойство «Фиксация слева» — оно закрепляет колонки при горизонтальной прокрутке. Это удобно для широких таблиц, где первые колонки содержат наименования строк, а остальные — данные по периодам или складам.

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

Способ 2. Программная фиксация через встроенный язык

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

Используется то же свойство ФиксацияСверху, но присваивается оно объекту табличного документа в коде. Типичный фрагмент выглядит так: после формирования документа выполняется присваивание ТабДок.ФиксацияСверху = 2;, где 2 — число закрепляемых строк.

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

bsl
Процедура СформироватьОтчет()
	ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("МакетОтчета");
	
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ТабДок.Вывести(ОбластьШапка);
	
	// ... вывод строк данных ...
	
	// Фиксируем шапку: 3 строки
	ТабДок.ФиксацияСверху = 3;
КонецПроцедуры

Фиксация при работе с областями макета

Макеты в 1С строятся из именованных областей: «Шапка», «Строка», «Подвал» и т.д. Чтобы правильно рассчитать значение фиксации, нужно знать высоту области шапки в строках. Её можно посмотреть в макете: выделите область и проверьте, какие строки она охватывает.

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

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

Фиксация в отчётах на СКД и в управляемых формах

Отчёты, построенные на системе компоновки данных (СКД), выводят результат в табличный документ результата, и фиксация для них настраивается иначе. В схеме компоновки, на вкладке настроек или в макете СКД, прямого свойства «фиксация сверху» нет — закрепление строк обычно выполняется программно после формирования результата в модуле отчёта или формы.

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

В обычных формах (толстый клиент) и управляемых формах механизм одинаков по сути, но отличается способ доступа к полю табличного документа. В управляемой форме обращение идёт через реквизит формы типа «ТабличныйДокумент», и фиксация применяется к этому реквизиту.

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

Свойство в конфигураторе

Подходит для статичных форм с постоянной шапкой; не требует кода, но не работает при динамической высоте шапки

Программная фиксация

Универсальный вариант для отчётов и динамических макетов; требует точного расчёта числа строк шапки

Фиксация через ВысотаТаблицы

Самый надёжный при переменном составе шапки; требует вычислять значение сразу после вывода шапки, до вывода данных

Типичные ошибки и как их избежать

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

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

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

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

Проверка результата и ограничения

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

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

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

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

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

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

Шапка остаётся видимой целиком

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

Часть строк шапки уходит за пределы экрана

Повторное формирование отчёта
Норма

Фиксация сохраняется после каждого формирования

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

После пересчёта шапка снова прокручивается

Вывод на печать/предпросмотр
Норма

Документ печатается штатно, шапка один раз в начале

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

Ожидалось повторение шапки на каждой странице — нужны сквозные строки

Часто задаваемые вопросы

Можно ли зафиксировать шапку без программирования?

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

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

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

Почему фиксация не срабатывает в отчёте на СКД?

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

Как сделать, чтобы шапка печаталась на каждой странице?

Фиксация сверху на печать не влияет. Для повторения строк на каждой странице используйте настройку сквозных строк в параметрах страницы табличного документа (свойство, задающее строки, повторяемые при печати). Это отдельный механизм, настраиваемый независимо.

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

Не задавайте фиксацию константой. Сразу после вывода всех областей шапки считайте значение свойства ВысотаТаблицы табличного документа и используйте его как значение ФиксацияСверху. Тогда при любом составе шапки закрепится ровно нужное число строк.

Сбрасывается ли фиксация при очистке табличного документа?

Да, метод Очистить() сбрасывает настройки фиксации вместе с содержимым. Если документ формируется повторно в том же объекте, присваивайте ФиксацияСверху заново после каждого формирования.

Итог

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

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