Когда лучше использовать отчет из кода, а когда в формате frx

29.02.2020

Как вы, наверное, знаете отчеты в FastReport .NET можно создавать не только в специальном дизайнере, но и программно, из кода пользовательского приложения. При этом, вместо привычного файла с расширением frx вы получите класс отчета. Его можно преобразовать в библиотеку и использовать в разных проектах. Что из себя представляет такой способ создания отчета?

Взгляните на этот код:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 //Create instance of class Report
 Report report = new Report();
 
 //load data
 DataSet ds = new DataSet();
 ds.ReadXml(AppFolder + "\\nwind.xml");
 
 //Register data source
 report.RegisterData(ds);
 
 //Enable data table
 report.GetDataSource("Products").Enabled = true;
 
 //Add report page
 ReportPage page = new ReportPage();
 report.Pages.Add(page);
 page.CreateUniqueName();
 
 //Create GroupHeader band
 GroupHeaderBand group = new GroupHeaderBand();
 page.Bands.Add(group);
 group.CreateUniqueName();
 group.Height = Units.Centimeters * 1;
 group.Condition = "[Products.ProductName].Substring(0,1)";
 group.SortOrder = FastReport.SortOrder.Ascending;
 
 // create group text
 TextObject groupTxt = new TextObject();
 groupTxt.Parent = group;
 groupTxt.CreateUniqueName();
 groupTxt.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1);
 groupTxt.Text = "[[Products.ProductName].Substring(0,1)]";
 groupTxt.Font = new Font("Arial", 14, FontStyle.Bold); 
 groupTxt.VertAlign = VertAlign.Center;
 groupTxt.Fill = new LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5f, 1);
 
 // create data band
 DataBand data = new DataBand();
 group.Data = data;
 data.CreateUniqueName();
 data.DataSource = report.GetDataSource("Products");
 data.Height = Units.Centimeters * 0.5f;
 
 // create product name text
 TextObject productText = new TextObject();
 productText.Parent = data;
 productText.CreateUniqueName();
 productText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f);
 productText.Text = "[Products.ProductName]";
 
 // create group footer
 group.GroupFooter = new GroupFooterBand();
 group.GroupFooter.CreateUniqueName();
 group.GroupFooter.Height = Units.Centimeters * 1;
 
 if (PDFCheckBox.Checked)
 {
 report.Prepare();
 FastReport.Export.Pdf.PDFExport export = new FastReport.Export.Pdf.PDFExport();
 export.Export(report);
 }
 else
 report.Show();

Это пример создания шаблона отчета с группами. Как видите, мы последовательно создаем объекты отчета, начиная с самого отчета и страницы и заканчивая текстовыми объектами. Мы помещаем созданные объекты внутрь других и настраиваем свойства их отображения. Это требует хорошего представления структуры шаблона отчета FastReport.Net. Кроме того, чтобы добиться нужного расположения элементов, вам придется много раз запускать отчет для визуальной оценки и исправлять свойства объектов, выставляя нужную ширину или координаты. Поэтому использовать этот подход следует для отчетов со списками, матрицами, таблицами – там, где не требуется выверять расположение элементов относительно друг друга.

Главное преимущество отчета, создаваемого в коде -  возможность редактировать отчеты во время выполнения, добавляя код в зависимости от условий или событий. Это позволяет создавать отчеты со сложной логикой, напрямую зависящей от самого клиентского приложения.

Не секрет, что шаблоны отчетов FastReport .NET имеют xml-подобный формат, несмотря на расширение frx. Такие шаблоны легко передавать и просматривать на других компьютерах с помощью программы-просмотрщика. Мобильность и независимость от клиентских приложений - это неоспоримые преимущества традиционного шаблона отчета в формате frx, или его версии с заполненными данными в формате fpx. Поэтому, имея в своем приложении отчеты, созданные из кода, многие хотели бы иметь возможность преобразовать их в обычный xml-подобный формат frx. Сделать это невероятно просто:

1
2
Report report = new Report();
report.Save("C:\\report.frx");

То есть нужно просто использовать функцию Save у объекта report. В качестве параметра передаем путь с именем файла, в который будет сохранен отчет. Таким образом мы можем использовать один отчет, создаваемый из кода, а, при необходимости, преобразовывать его в традиционный формат frx. Полученный файл можно передавать другим разработчикам, или пользователям.

Как на отчеты основе кода, так и на отчеты в формате frx имеют свои преимущества. Первый – выигрывает, когда отчет нужно изменять прямо «на ходу», второй – когда требуется мобильный отчет, или шаблон имеет много элементов с четко определённым их расположением друг относительно друга.  Нужно выбирать способ создания отчета на основе этих преимуществ.

20 ноября 2024

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

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

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

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

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

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