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