Делаем одинаковые страницы отчета с разными заголовками

08.01.2020

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

For example, the user select copies for the customer and for administration department.

The application creates the same report but each one has a label in the header that shows something like "Copy for the customer", "Copy for the administration department".

After, the application has to show the two pages in a form viewer.

Давайте реализуем такой отчет в FastReport.Net. Можно формировать один и тот же отчет и передавать в него разные параметры для заголовка. Но если вы хотите получить одинаковые отчеты с разными заголовками в одном отчете, можно поступить иначе. Мы можем дублировать страницы исходного отчета, а затем изменить заголовки в этих страницах. Проще всего будет показать на отчете с одной страницей.

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

Таким образом мы можем формировать страницы с разными заголовками в зависимости от переданных номеров. Однако есть одна сложность. Придется вручную вычислять номер текстового объекта, в котором нужно заменить текст. К примеру, в моем отчете 9 текстовых объектов. Первый из них – заголовок. Значит десятый тоже будет заголовком, но на новой странице. Если к 10 прибавить еще 9, то получаем номер заголовка на третьей странице и так далее.

Вам станет понятнее, когда вы увидите скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private void _StartReport(object sender, EventArgs e)
 {
 //Parse parameter
 string parameter = (string)Report.GetParameterValue("Parameter");
 string[] arr = parameter.Split(',');
 
 //Number of text obj that is header
 int step = 10;
 
 foreach (string item in arr)
 {
 ReportPage newPage = new ReportPage();
 newPage.AssignAll(Page1);
 Report.Pages.Add(newPage);
 newPage.CreateUniqueName();
 foreach (object obj in newPage.AllObjects)
 {
 if (obj is Base)
 { 
 (obj as Base).CreateUniqueName();
 }
 }
 TextObject txt = Report.FindObject("Text"+ step.ToString()) as TextObject;
 switch (item)
 {
 case "1":
 txt.Text = "Header 1"; 
 break;
 case "2":
 txt.Text = "Header 2"; 
 break;
 case "3":
 txt.Text = "Header 3"; 
 break;
 }
 step = step + 9;
 }
 Report.Pages.Remove(Page1);
 }

Разберем этот скрипт подробнее. Мы использовали событие StartReport у объекта Report. В обработчике события мы и будем осуществлять манипуляции со страницами отчета. Отчет уже имеет одну разработанную страницу – по сути это готовый «боевой» отчет, на базе которого мы хотим сделать несколько, но с разными заголовками.

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

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

.NET .NET FastReport FastReport Отчет Отчет
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

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

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»