Как в отчете 1С закрепить шапку, чтобы она всегда была видна при прокрутке

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Метод 1. Настройка фиксации через Систему компоновки данных (СКД)

Если ваш отчет построен на базе СКД, то наиболее правильным и быстрым способом будет использование стандартных настроек компоновки. Рассмотрим, как это сделать без написания кода.

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

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

Метод 2. Программная фиксация области в табличном документе

Рассмотрим случай, когда отчет формируется программно или нам нужно динамически изменять область фиксации в зависимости от условий. В языке 1С за это отвечает свойство ФиксацияСверху объекта ТабличныйДокумент.

Разберем пример кода, который фиксирует первые три строки отчета. Этот код обычно размещается в модуле формы отчета или в процедуре формирования документа:


// Предположим, Результат — это наш ТабличныйДокумент
Результат.ФиксацияСверху = 3;
Результат.ФиксацияСлева = 1; // Если нужно закрепить первую колонку

Однако на практике высота шапки может меняться. Чтобы сделать код универсальным, выясним причину изменения высоты и используем именованные области макета. Мы можем найти индекс последней строки шапки и передать его в свойство фиксации:


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

Использование свойства ВысотаТаблицы позволяет нам точно закрепить именно ту часть документа, которая была выведена последней, обеспечивая гибкость решения.

Метод 3. Интерактивная фиксация пользователем

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

Для этого в сформированном отчете необходимо выполнить следующие действия:

  1. Выделите ячейку, которая находится сразу под строкой, которую нужно закрепить, и справа от колонки, которую нужно закрепить.
  2. Перейдите в главное меню программы (обычно это кнопка с «тремя полосками» или меню «Таблица» в старых интерфейсах).
  3. Выберите пункт «Таблица» — «Вид» — «Зафиксировать».

После этого на экране появятся тонкие линии разделения, и при прокрутке выделенные области останутся неподвижными. Это работает точно так же, как «Закрепить области» в Microsoft Excel.

Сложный случай: Как закрепить две шапки одновременно?

Иногда структура отчета подразумевает наличие двух независимых таблиц, и автор вопроса на форуме интересовался, можно ли закрепить обе шапки. Проанализируем возможности платформы: стандартный ТабличныйДокумент поддерживает только одну сплошную область фиксации сверху. Это означает, что нельзя зафиксировать строки 1-3 и одновременно строки 50-52, если между ними есть прокручиваемые данные. Для решения подобных задач с выводом сложных структур можно использовать инструмент для одновременного формирования нескольких отчетов на отдельных вкладках.

Однако мы можем рассмотреть обходные пути:

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

Отличие фиксации на экране от повтора на печати

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

Для этого используется свойство ПовторятьНаКаждойСтранице. В СКД это настраивается в тех же «Других настройках» (параметр «Выводить заголовок на каждой странице»). Программно это реализуется через указание области строк:


// Указываем, что строки с 1 по 3 должны дублироваться на каждом листе при печати
ТабДок.ПовторятьНаКаждойСтранице = ТабДок.Область(1, , 3, );

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

Рекомендации по выбору метода

Подведем итог нашему анализу. Выбор метода зависит от типа вашего отчета:

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

← На главную