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

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. В обработчике события мы и будем осуществлять манипуляции со страницами отчета. Отчет уже имеет одну разработанную страницу – по сути это готовый «боевой» отчет, на базе которого мы хотим сделать несколько, но с разными заголовками.

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

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

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.