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