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

22.06.2026

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

FastReport .NET предоставляет множество вариантов доступа к данным и работы с ними: из базы данных, DataSet, JSON или с помощью бизнес-объектов (обычных классов C# в вашем приложении).

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам (Категория -> Продукты).

Преимущества при использовании Business Objects (бизнес-объектов) в качестве источника данных:

  • Поддержка сложных объектов — великолепно работает с вложенными коллекциями (Master-Detail, данный пример будет рассмотрен ниже).
  • Независимость от базы данных — можно формировать отчеты даже без подключения к БД.
  • Легкость поддержки — при изменении модели данных отчеты почти не требуют правки.
  • Высокая скорость — данные сериализуются прямо из объектов.
  • Гибкость — прекрасно подходит как для WinForms, так и для WPF, ASP.NET Core и микросервисов.

 


 

Подготовка бизнес-объектов

1. Создайте классы моделей предварительно установив nuget пакет FastReport.Net.Demo (или же лицензионную версию FastReport.Net с нашего приватного nuget сервера). Пример:

public class Category
 {
 public string Name { get; set; } = string.Empty;
 public string Description { get; set; } = string.Empty;
 public List<Product> Products { get; set; } = new List<Product>();
 
 public Category() { }
 
 public Category(string name, string description)
 {
 Name = name;
 Description = description;
 }
 }
 
 public class Product
 {
 public string Name { get; set; } = string.Empty;
 public decimal UnitPrice { get; set; }
 
 public Product() { }
 
 public Product(string name, decimal unitPrice)
 {
 Name = name;
 UnitPrice = unitPrice;
 }
 }

2. После чего приступим к реализации компактного метода для заполнения данных:

static private void CreateBusinessObject()
{
 FBusinessObject.Clear();
 
 Category category = new Category("Напитки", "Безалкогольные напитки, кофе, чай, пиво");
 category.Products.Add(new Product("Чай пуэр", 18m));
 category.Products.Add(new Product("Пиво", 19m));
 category.Products.Add(new Product("Кофе крепкий", 46m));
 FBusinessObject.Add(category);
 
 category = new Category("Кондитерские изделия", "Десерты, конфеты и сладкая выпечка");
 category.Products.Add(new Product("Шоколад", 12.75m));
 category.Products.Add(new Product("Шотландское печенье", 12.5m));
 category.Products.Add(new Product("Сахарный пирог", 49.3m));
 FBusinessObject.Add(category);
 
 category = new Category("Морепродукты", "Морские водоросли и рыба");
 category.Products.Add(new Product("Мясо краба Бостон", 18.4m));
 category.Products.Add(new Product("Красная икра", 15m));

3. Реализация отчета в дизайнере отчетов на основе источника данных Categories BusinessObject происходит следующим образом:

 [STAThread]
 static void Main(string[] args)
 {
 Report report = new Report();
 CreateBusinessObject();
 report.RegisterData(FBusinessObject, "Categories BusinessObject");
 report.Design();
 }

Важно помнить, что вызов RegisterData должен происходить после загрузки отчета (report.Load) и до report.Prepare().

После запуска дизайнера отчетов Вам необходимо выбрать источник данных в меню «Data -> Choose Report Data (Данные -> Выбрать данные для отчета)».

Выбор данных для отчета из дизайнера FastReport .NET

 

Создадим простой отчет типа «Главный-подчиненный (Master-detail)», либо можно взять готовый пример из шаблонов демоотчетов.

Master-detail отчет

И запускаем отчет в режиме предпросмотра как показано ниже:

Предпросмотр готового Master-detail отчета

4. Отображение готового отчёта при помощи консольного приложения (ConsoleApp) можно сделать с помощью этого кода:

[STAThread]
 static void Main(string[] args)
 {
 Report report = new Report();
 report.Load(@"Business Objects.frx");
 CreateBusinessObject();
 report.RegisterData(FBusinessObject, "Categories BusinessObject");
 report.Prepare();
 report.Show();
 report.Dispose();
 }

 


 

Полный пример класса формы (WinForms)

 static private List<Category> FBusinessObject = new List<Category>();
 
 public Form1()
 {
 InitializeComponent();
 CreateBusinessObject();
 }
 
 static private void CreateBusinessObject()
 {
 FBusinessObject.Clear();
 
 Category category = new Category("Напитки", "Безалкогольные напитки, кофе, чай, пиво");
 category.Products.Add(new Product("Чай пуэр", 18m));
 category.Products.Add(new Product("Пиво", 19m));
 category.Products.Add(new Product("Кофе крепкий", 46m));
 FBusinessObject.Add(category);
 
 category = new Category("Кондитерские изделия", "Десерты, конфеты и сладкая выпечка");
 category.Products.Add(new Product("Шоколад", 12.75m));
 category.Products.Add(new Product("Шотландское печенье", 12.5m));
 category.Products.Add(new Product("Сахарный пирог", 49.3m));
 FBusinessObject.Add(category);
 
 category = new Category("Морепродукты", "Морские водоросли и рыба");
 category.Products.Add(new Product("Мясо краба Бостон", 18.4m));
 category.Products.Add(new Product("Красная икра", 15m));
 FBusinessObject.Add(category);
 }
 
 private void btnCreateNew_Click(object sender, EventArgs e)
 {
 // создать экземпляр отчёта
 Report report = new Report();
 
 // зарегистрировать бизнес-объект
 report.RegisterData(FBusinessObject, "Categories BusinessObject");
 
 // открыть дизайнер отчёта
 report.Design();
 
 // освободить ресурсы, используемые отчётом
 report.Dispose();
 }
 
 private void btnRunExisting_Click(object sender, EventArgs e)
 {
 // создать экземпляр отчёта
 Report report = new Report();
 
 // загрузить существующий отчёт
 report.Load(@"..\..\Business Objects.frx");
 
 // зарегистрировать бизнес-объект
 report.RegisterData(FBusinessObject, "Categories BusinessObject");
 
 // запустить отчёт
 report.Show();
 
 // освободить ресурсы, используемые отчётом
 report.Dispose();
 }
}
 
public class Category
{
 public string Name { get; set; } = string.Empty;
 public string Description { get; set; } = string.Empty;
 public List<Product> Products { get; set; } = new List<Product>();
 
 public Category() { }
 
 public Category(string name, string description)
 {
 Name = name;
 Description = description;
 }
}
 
public class Product
{
 public string Name { get; set; } = string.Empty;
 public decimal UnitPrice { get; set; }
 
 public Product() { }
 
 public Product(string name, decimal unitPrice)
 {
 Name = name;
 UnitPrice = unitPrice;
 }
} public Product(string name, decimal unitPrice)
 {
 Name = name;
 UnitPrice = unitPrice;
 }
}

 


 

Заключение

Business Objects (бизнес-объекты) — это один из самых современных и удобных способов работы с данными в FastReport .NET. Он позволяет встраивать генерацию отчётов в существующую архитектуру приложения так, чтобы она не портила код и прибавляла удобства разработки.

Подход, подразумевающий использование Business Objects (бизнес-объектов), особенно настоятельно рекомендуется для средних и крупных проектов, где важно разделение ответственности, легкая поддержка, и скорость разработки новых отчётов.
Используя Business Objects (бизнес-объекты), вы получаете максимальную гибкость и контроль над тем, как данные попадают в отчёты.

C# FastReport .NET Preview База данных Дизайнер
21 апреля 2026

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

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

Новая система валидации отчетов в FastReport VCL

В этой статье мы расскажем, как работает проверка отчетов в FastReport VCL, как её настроить, как писать собственные правила на примерах и поделимся интересными нововведениями.
8 апреля 2026

Новые возможности работы с бэндами в дизайнере FastReport .NET

В версии 2026.2 FastReport .NET появилась возможность изменять порядок бэндов прямо в дизайнере — простым перетаскиванием мышью.

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