SCHNELLSTART
A Grouped Sales Report in a Few Lines
The same API in Delphi, C++ Builder and C#: a header per region, a line per sale and a subtotal per region, saved as PDF, XLSX and CSV.
A fluent report over a JSON source: one group per region with a subtotal, saved as PDF, XLSX and CSV.
uses
Classes, SysUtils,
sgcReports_Types, sgcReports_Model, sgcReports_Data, sgcReports_Fluent;
const
CS_SALES = '[' +
'{"Region":"East","Customer":"Acme Corp","Amount":1450.00},' +
'{"Region":"East","Customer":"Blue Harbor","Amount":600.00},' +
'{"Region":"North","Customer":"Nordic Labs","Amount":2100.75},' +
'{"Region":"North","Customer":"Fjord Ltd","Amount":880.20}]';
CS_TOTAL = '[FormatFloat(''#,0.00'', Sum(Sales.Amount))]';
procedure ExportSalesReport(const aFolder: string);
var
oSales: TsgcReportJSONSource;
oBuilder: TsgcReportBuilder;
begin
oSales := TsgcReportJSONSource.Create(nil);
oBuilder := TsgcReportBuilder.Create;
try
oSales.SourceName := 'Sales';
oSales.JSON := CS_SALES;
oBuilder.Title('Sales by region').Author('eSeGeCe').Units(ruMillimeters)
.Style('Base').Font('Arial', 10).EndStyle
.Style('Group').Font('Arial', 11).Bold.BackColor($EEEEEE).EndStyle
.Page.Paper(rpsA4).Margins(15)
// one header per region, one line per sale, a subtotal per region
.GroupHeader('Sales.Region', 9).Style('Group')
.Text('Region: [Sales.Region]', 0, 1, 180, 7).TagRole(rtrHeading2).EndBand
.MasterData('Sales', 6).Style('Base')
.Text('[Sales.Customer]', 2, 0, 120, 6)
.Text('[Sales.Amount]', 130, 0, 50, 6).AlignRight.Format('#,0.00').EndBand
.GroupFooter(9).Style('Base')
.Text('Region total ' + CS_TOTAL, 80, 1, 100, 6).AlignRight.Bold.EndBand
.PageFooter(8).Style('Base')
.Text('Page [Page] of [TotalPages]', 0, 1, 180, 6).AlignCenter.EndBand
.EndPage.Data(oSales);
// accessible PDF (PDF/UA is on by default), plus the same data as Excel
oBuilder.SaveToPDF(IncludeTrailingPathDelimiter(aFolder) + 'sales.pdf');
oBuilder.SaveToXLSX(IncludeTrailingPathDelimiter(aFolder) + 'sales.xlsx');
oBuilder.SaveToCSV(IncludeTrailingPathDelimiter(aFolder) + 'sales.csv');
finally
oBuilder.Free;
oSales.Free;
end;
end;
Hilfethema lesen →
The same report in C++ Builder with the generated sgcReports headers.
#include <vcl.h>
#include "sgcReports_Types.hpp"
#include "sgcReports_Model.hpp"
#include "sgcReports_Data.hpp"
#include "sgcReports_Fluent.hpp"
void ExportSalesReport(const String Folder)
{
const String Total = "[FormatFloat('#,0.00', Sum(Sales.Amount))]";
TsgcReportJSONSource *Sales = new TsgcReportJSONSource(NULL);
TsgcReportBuilder *Builder = new TsgcReportBuilder();
try
{
Sales->SourceName = "Sales";
Sales->JSON = "[{\"Region\":\"East\",\"Customer\":\"Acme Corp\",\"Amount\":1450.00},"
"{\"Region\":\"East\",\"Customer\":\"Blue Harbor\",\"Amount\":600.00},"
"{\"Region\":\"North\",\"Customer\":\"Nordic Labs\",\"Amount\":2100.75}]";
Builder->Title("Sales by region")->Author("eSeGeCe")->Units(ruMillimeters)
->Style("Base")->Font("Arial", 10)->EndStyle()
->Style("Group")->Font("Arial", 11)->Bold()->BackColor(0xEEEEEE)->EndStyle()
->Page("")->Paper(rpsA4, roPortrait)->Margins(15)
// one header per region, one line per sale, a subtotal per region
->GroupHeader("Sales.Region", 9)->Style("Group")
->Text("Region: [Sales.Region]", 0, 1, 180, 7)->TagRole(rtrHeading2)->EndBand()
->MasterData("Sales", 6)->Style("Base")
->Text("[Sales.Customer]", 2, 0, 120, 6)
->Text("[Sales.Amount]", 130, 0, 50, 6)->AlignRight()->Format("#,0.00")->EndBand()
->GroupFooter(9)->Style("Base")
->Text("Region total " + Total, 80, 1, 100, 6)->AlignRight()->Bold()->EndBand()
->EndPage()->Data(Sales);
// accessible PDF (PDF/UA is on by default), plus the same data as Excel
Builder->SaveToPDF(IncludeTrailingPathDelimiter(Folder) + "sales.pdf");
Builder->SaveToXLSX(IncludeTrailingPathDelimiter(Folder) + "sales.xlsx");
Builder->SaveToCSV(IncludeTrailingPathDelimiter(Folder) + "sales.csv");
}
__finally
{
delete Builder;
delete Sales;
}
}
Hilfethema lesen →
The same builder chain in C#, with the same class names as Delphi.
using System.IO;
using esegece.sgcReports;
public static class SalesReport
{
const string Sales = "[" +
"{\"Region\":\"East\",\"Customer\":\"Acme Corp\",\"Amount\":1450.00}," +
"{\"Region\":\"East\",\"Customer\":\"Blue Harbor\",\"Amount\":600.00}," +
"{\"Region\":\"North\",\"Customer\":\"Nordic Labs\",\"Amount\":2100.75}," +
"{\"Region\":\"North\",\"Customer\":\"Fjord Ltd\",\"Amount\":880.20}]";
const string Total = "[FormatFloat('#,0.00', Sum(Sales.Amount))]";
public static void Export(string aFolder)
{
using (TsgcReportJSONSource oSales = new TsgcReportJSONSource())
using (TsgcReportBuilder oBuilder = new TsgcReportBuilder())
{
oSales.SourceName = "Sales";
oSales.JSON = Sales;
oBuilder.Title("Sales by region").Author("eSeGeCe").Units(TsgcReportUnits.ruMillimeters)
.Style("Base").Font("Arial", 10).EndStyle()
.Style("Group").Font("Arial", 11).Bold().BackColor(0xEEEEEE).EndStyle()
.Page().Paper(TsgcReportPaperSize.rpsA4).Margins(15)
// one header per region, one line per sale, a subtotal per region
.GroupHeader("Sales.Region", 9).Style("Group")
.Text("Region: [Sales.Region]", 0, 1, 180, 7)
.TagRole(TsgcReportTagRole.rtrHeading2).EndBand()
.MasterData("Sales", 6).Style("Base")
.Text("[Sales.Customer]", 2, 0, 120, 6)
.Text("[Sales.Amount]", 130, 0, 50, 6).AlignRight().Format("#,0.00").EndBand()
.GroupFooter(9).Style("Base")
.Text("Region total " + Total, 80, 1, 100, 6).AlignRight().Bold().EndBand()
.EndPage().Data(oSales);
// accessible PDF (PDF/UA is on by default), plus the same data as Excel
oBuilder.SaveToPDF(Path.Combine(aFolder, "sales.pdf"));
oBuilder.SaveToXLSX(Path.Combine(aFolder, "sales.xlsx"));
oBuilder.SaveToCSV(Path.Combine(aFolder, "sales.csv"));
}
}
}
dotnet add package esegece.sgcReports
Hilfethema lesen →