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