Behalten Sie Ihre Berichte.
Wechseln Sie die Berichts-Engine.
sgcReports importiert jetzt Berichte aus FastReport, QuickReport und ReportBuilder und bringt die Funktionen, die Käufer als Erstes prüfen: Parameter, echte Tabellen, Berichtsvorlagen, eine durchsuchbare Vorschau und elektronische Rechnungen. Zwölf neue Funktionen in einem Release.
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia
Die zwölf neuen Funktionen in unter vier Minuten. Auch auf YouTube.
Die meisten Teams, die ihre Berichts-Engine gern wechseln würden, tun es nie, und das aus einem einzigen Grund: Hunderte bestehende Berichte, die niemand neu zeichnen möchte. sgcReports 2026.11 beseitigt diesen Grund. Es liest Ihre Dateien aus FastReport, QuickReport und ReportBuilder und konvertiert sie. Außerdem schließt es die Lücken, die ein Team vor dem Wechsel prüft: Berichtsparameter, ein echtes Tabellenelement, Berichtsvorlagen mit Vererbung, eine Vorschau mit Suche und Miniaturansichten sowie PDF-Ausgabe für elektronische Rechnungen.
Alles Folgende funktioniert in Delphi und C++ Builder, mit VCL und FireMonkey, und in .NET mit WinForms, WPF und Avalonia auf dieselbe Weise. Jedes Codebeispiel auf dieser Seite wurde gegen die Quellen von 2026.11 kompiliert und ausgeführt.
- 01BerichtsimporterDateien aus FastReport, QuickReport und ReportBuilder, konvertiert.
- 02BerichtsparameterTypisierte Werte, die die Vorschau abfragt, auch über HTTP.
- 03TabellenelementVerbundene Zellen, wiederholte Kopfzeilen, Summen.
- 04Neue ElementtypenKontrollkästchen, SVG, Sparklines und Gauges.
- 05Vorlagen und VererbungEin Briefkopf für jeden Bericht.
- 06Eine bessere VorschauSuche, Miniaturansichten und ein Exportmenü.
- 07Lesezeichen und LinksEine PDF-Gliederung, Hyperlinks und Anker.
- 08E-Rechnung als PDFFactur-X, ZUGFeRD und XRechnung in PDF/A-3.
- 09Ausdrucksbibliothek68 Funktionen und 10 Aggregate.
- 10HighlightsBedingte Stile ohne Skript.
- 11Fortschritt und AbbruchFür große Berichte, am Bildschirm und auf dem Server.
- 12Jede PlattformDieselbe API in Delphi und .NET.
Teil 1 · Die Wechselkosten beseitigen
FastReport-, QuickReport- und ReportBuilder-Berichte importieren
Der neue TsgcReportImporter liest eine FastReport-Datei .fr3, ein QuickReport-Formular (eine .dfm mit einem TQuickRep) oder eine ReportBuilder-Vorlage .rtm, als Text oder binär, und wandelt sie in eine sgcReports-Berichtsdefinition um. Seiten, Bänder, Elemente, Stile und Datenquellen werden übernommen, die Ausdrücke werden in die sgcReports-Syntax übersetzt, und die Kontrollkästchen aus QuickReport und ReportBuilder werden zum neuen Kontrollkästchen-Element.
Sicher im Einsatz bei einem echten Projekt wird er durch die andere Hälfte des Ergebnisses. Der Importer listet jedes Objekt, jede Eigenschaft, jeden Ausdruck, jedes Skript und jede Datenquelle auf, die er nicht abbilden konnte, mit dem Pfad im Bericht und dem Grund. So wissen Sie genau, was Sie von Hand fertigstellen müssen. Nichts geht stillschweigend verloren.
Die Designer haben einen Befehl Importieren, sodass sich ein Bericht ohne Code einlesen, in der Vorschau prüfen und als JSON speichern lässt. Im Code sind es vier Zeilen plus die Aufräumarbeit:
oImporter := TsgcReportImporter.Create;
try
oImporter.ImportFromFile(oReport, 'fr_items.fr3');
for i := 0 to oImporter.ImportResult.Issues.Count - 1 do
Writeln(oImporter.ImportResult.Issues[i].Reason);
finally
oImporter.Free;
end;
Und dasselbe in C#:
var oImporter = new TsgcReportImporter();
oImporter.ImportFromFile(oReport, "fr_items.fr3");
foreach (var oIssue in oImporter.ImportResult.Issues)
Console.WriteLine(oIssue.Reason);
Skripte, Rich Text, Diagramme und Kreuztabellen des Quellberichts werden nicht konvertiert. Sie erscheinen in der Problemliste, sodass Sie sie mit den entsprechenden sgcReports-Mitteln neu aufbauen können. Die neue ReportImport-Demo für Delphi, C++ Builder und .NET importiert Beispieldateien aller drei Formate.
Berichtsparameter, von der Vorschau abgefragt
Ein Bericht kann jetzt seine Parameter deklarieren: Text, Ganzzahl, Zahl, Datum, Datum und Uhrzeit oder Ja/Nein, jeweils mit einem Standardwert oder einem Standardausdruck, einem Pflichtfeld-Flag, mehreren Werten und einer Liste zulässiger Werte, die fest vorgegeben ist oder aus einer Datenquelle gelesen wird. Ausdrücke und Skripte lesen sie als :Name.
Ein Formular dafür müssen Sie nicht schreiben. Die VCL- und FireMonkey-Vorschauen und -Designer fragen die Parameter ab, bevor der Bericht aufbereitet wird, und die .NET-Vorschauen tun dasselbe. Der HTML-Viewer zeigt ein typisiertes Parameterformular, und der HTTP-Endpunkt liest ?param.Name=value aus der Abfragezeichenfolge und antwortet bei einem unpassenden Wert mit 400, statt einen fehlerhaften Bericht zurückzugeben.
In einer JSON-Definition stehen die Parameter neben den Seiten:
"parameters": [
{ "name": "FromDate", "dataType": "rpdtDate", "required": true,
"defaultExpression": "EncodeDate(2026, 1, 1)" },
{ "name": "MinTotal", "dataType": "rpdtFloat", "defaultValue": "0" }
]
Ein Dienst, der den Bericht ohne Benutzer aufbereitet, setzt die Werte im Code, und es erscheint keine Abfrage:
oEngine.Report := oReport;
oEngine.SetParameterValue('FromDate', VarFromDateTime(EncodeDate(2026, 3, 1)));
oEngine.SetParameterValue('MinTotal', 100.0);
Ein echtes Tabellenelement
Textelemente von Hand auszurichten, um eine Tabelle vorzutäuschen, ist vorbei. Das neue Tabellenelement kennt feste, prozentuale und automatische Spaltenbreiten, Zellen, die sich über Zeilen und Spalten erstrecken, Kopfzeilen, die auf jeder Seite wiederholt werden, Datenzeilen aus einer eigenen Datenquelle, Fußzeilen mit Summen und Zeilen, die mit ihrem Inhalt wachsen. Zellen haben Stile, Highlights und Hyperlinks.
Die Exporte behalten die Struktur bei. Eine Tabelle wird in einem barrierefreien PDF zu einer getaggten Tabelle, mit Kopfzellen samt Bereich und den Verbindungen, sodass ein Screenreader sie als Tabelle liest. Sie wird zu einer HTML-Tabelle, zu einer Word-Tabelle mit wiederholten Kopfzeilen und zu verbundenen Zellen in XLSX. Im Code schreibt der Fluent-Builder sie in wenigen Zeilen:
oTable := oBuilder.Page('Main').Paper(rpsA4).Margins(15).ReportTitle(14)
.CanGrow.Table(0, 0, 180, 'Products');
oTable.Column(25).Column(0, rtwmAuto).Column(30)
.HeaderRow(['Products', '', '']).RowStyle('Title').Cell(0, 0).Span(1, 3)
.HeaderRow(['Code', 'Name', 'Price']).RowStyle('Head')
.DataRow(['[Products.Code]', '[Products.Name]', '[Products.Price]'])
.Cell(1, 2).Format('#,##0.00');
oTable.Table.RepeatHeaderRows := True;
Kontrollkästchen, SVG, Sparklines und Gauges
Vier neue Dinge, die Sie auf eine Seite zeichnen können:
- Kontrollkästchen-Element, per Boolean-Ausdruck angehakt, mit einem Häkchen, Kreuz oder Quadrat als Markierung. Im PDF bleibt es ein Vektor, in XLSX und CSV wird es zu einem Wert TRUE oder FALSE.
- SVG-Bilder in Bildelementen, im PDF als Vektorgrafik gedruckt, in HTML als SVG und in Word als scharfe Bilder, sodass ein Logo bei jedem Zoom scharf bleibt.
- Sparkline-Element, von sgcCharts gezeichnet: Linie, Fläche, Säule oder Gewinn und Verlust, eine pro Zeile.
- Gauge-Element, von sgcGauges gezeichnet, radial oder linear mit farbigen Bereichen, über die neue Brücke sgcReportsGauges.
Die Einstellungen benutzerdefinierter Elemente akzeptieren jetzt Ausdrücke, die für jedes gedruckte Band ausgewertet werden. So zeichnet jede Zeile ihre eigene Sparkline und ihr eigenes Gauge:
oBand := oPage.MasterData('Projects', 14);
oBand.CheckBox('Projects.Done', 4, 4, 6, 6).Name('DoneBox');
oBand.Item.CheckBox.CheckStyle := rcsCheck;
oBand.Custom('Sparkline', 75, 1, 60, 12, ['values=[Projects.Trend]',
'kind=area', 'markers=last,high']).Name('Trend');
oBand.Custom('Gauge', 140, 2, 50, 10, ['value=[Projects.Progress]',
'gaugeKind=linear', 'unit=%']).Name('ProgressGauge');
Berichtsvorlagen und Vererbung
Jedes Unternehmen hat einen Briefkopf, und jede Rechnung, jeder Kontoauszug und jeder Lieferschein wiederholt ihn. Mit der neuen Eigenschaft InheritsFrom, im JSON "inheritsFrom", geht eine Berichtsdefinition von einer Basisdefinition aus und speichert nur ihre Unterschiede. Seiten, Bänder, Elemente und Stile werden nach Namen zusammengeführt. Ein Kindbericht kann eine Eigenschaft überschreiben, ein Element hinzufügen, ein Band mit "$first" an die erste Stelle setzen oder ein geerbtes Element mit "$remove" entfernen. Ändern Sie das Logo im Basisbericht, und jeder Bericht, der davon erbt, folgt.
Der gesamte Lieferschein oben besteht aus wenigen Zeilen mit Unterschieden. Hier entfernt er den Kontaktblock des Briefkopfs:
"inheritsFrom": "letterhead.json",
"pages": [ { "name": "Page1", "bands": [
{ "name": "PageHeader", "items": [
{ "name": "Contact", "$remove": true }
] }
] } ]
oDef.BaseFolder := ExtractFilePath(ExpandFileName('letterhead.json'));
oDef.LoadFromFile(oReport, 'child.json');
Die Basis wird unter BaseFolder gefunden, oder Ihr OnResolveBase-Handler lädt sie aus einer Datenbank oder einer Ressource. Ketten reichen bis zu acht Ebenen, und Flat schreibt die zusammengeführte Definition, wenn Sie eine einzelne Datei benötigen. Die VCL-, FireMonkey- und HTML-Designer kennzeichnen geerbte Objekte, bearbeiten sie als Überschreibungen und erstellen aus einem Basisbericht einen neuen Bericht. Im VCL-Designer erscheint eine überschriebene Eigenschaft fett.
Eine Vorschau mit Suche, Miniaturansichten und Exportmenü
Die Vorschauen haben eine Suchleiste (Ctrl+F, F3, Groß-/Kleinschreibung und ganzes Wort), die jeden Treffer auf der Seite hervorhebt, einen Bereich mit Seitenminiaturen und ein Exportmenü für PDF, XLSX, CSV, PNG, HTML und Word, mit einem Ereignis OnExport, um das Speichern selbst zu übernehmen. Das gibt es in den VCL- und FireMonkey-Vorschauen und in den Vorschauen für WinForms, WPF und Avalonia, und der FireMonkey-PDF-Viewer erhält ebenfalls eine Textsuche.
oPreview.ShowThumbnails := True;
oPreview.ExportFormats := [rpxPDF, rpxXLSX];
if oPreview.SearchText('Total', False, True) then
Writeln(oPreview.SearchResults, ' match(es)');
Teil 2 · Die Lücken schließen
PDF-Lesezeichen, Hyperlinks und Anker
Setzen Sie den neuen Ausdruck Bookmark auf ein Band oder ein Element, und der PDF-Export schreibt die Lesezeichen als Dokumentgliederung, nach Gruppen verschachtelt, während die VCL- und FireMonkey-Vorschauen sie in einem Gliederungsbereich anzeigen (ShowOutline). Die neue Eigenschaft Hyperlink öffnet eine Web- oder mailto-Adresse oder springt mit #name zu einem Anchor im selben Bericht, und die Links bleiben in den Exporten nach PDF, HTML, Word und XLSX erhalten.
E-Rechnung als PDF: Factur-X, ZUGFeRD und XRechnung
Der PDF-Export bettet über die neue Eigenschaft EInvoice das E-Rechnungs-XML Ihrer Anwendung als zugehörige PDF/A-3-Datei ein, für Factur-X, ZUGFeRD und XRechnung, auch als PDF/A-3a mit PDF/UA. Die Rechnung, die Menschen lesen, und die Daten, die Maschinen lesen, reisen in einer Datei. sgcReports schreibt das XML nicht selbst: Ihre Anwendung liefert es.
Eine Ausdrucksbibliothek mit 68 Funktionen und 10 Aggregaten
Die Ausdrucksbibliothek wächst auf 68 Funktionen und 10 Aggregate. Neu sind Datumsarithmetik, Auffüllen und Formatieren, Choose, ToWords, um einen Betrag in den 12 sgcUI-Sprachen in Worten zu schreiben, sowie die Aggregate SumIf, CountIf, Previous, RunningSum und RunningCount. Ein Aggregat folgt dem Band, in dem es gedruckt wird: Eine Gruppenfußzeile liefert die Summe der Gruppe, eine Seitenfußzeile die Summe der Seite.
Highlights: Bedingte Stile ohne Skript
Highlights legen eine Liste von Bedingungen und Stilen auf ein Element. Die erste zutreffende Bedingung ersetzt den Stil des Elements, sodass negative Summen rot und gute Ergebnisse grün gedruckt werden, ohne eine Zeile Skript. Sie leben im JSON, im Fluent-Builder und in den VCL-, FireMonkey- und HTML-Designern.
Fortschritt und Abbruch bei großen Berichten
Die Engine hat ein neues Ereignis OnProgress mit den Seiten- und Datensatzzahlen und eine Methode Cancel. Die Vorschauen zeigen den Fortschritt, während ein Bericht aufbereitet wird, mit einer Schaltfläche Abbrechen, die auch Esc auslöst. Der HTTP-Endpunkt hat neue Limits MaxPages und Timeout, sodass ein einziger außer Kontrolle geratener Bericht einen Server nicht blockieren kann.
Jede Plattform, dieselbe API
Jede Funktion auf dieser Seite wird für Delphi und C++ Builder ausgeliefert, mit den VCL- und FireMonkey-Vorschauen und -Designern, und für .NET mit WinForms, WPF und Avalonia, mit denselben Klassen- und Eigenschaftsnamen. In JSON definierte Berichte wechseln unverändert zwischen beiden Welten, und die Engine läuft weiterhin headless in Diensten und Linux64-Daemons.
Mit diesem Release kommen fünf neue Demos für Delphi, C++ Builder und .NET: ReportImport, ReportParameters, ReportTables, ReportVisualItems und ReportInheritance, neben der Demo ReportEInvoice.
Ebenfalls neu in sgcReports 2026.11
- Ein nativer Berichtsdesigner für VCL und FireMonkey mit Toolbox, Gliederung, Inspektor, Linealen, Hilfslinien, Einrasten, Rückgängig und Wiederholen, Tastaturbearbeitung und Screenreader-Unterstützung.
- Skripting mit einer Pascal-Teilmenge, bearbeitet und geprüft in den VCL- und FireMonkey-Designern.
- DOCX-Export (feste und fließende Modi) und HTML-Export (seitenweise und kontinuierlich), auch über die HTTP-Routen.
- Benutzerdefinierte Elemente, eine native Kreuztabelle sowie Diagramm- und Pivot-Grid-Elemente über die Brücken sgcReportsCharts und sgcReportsPivotGrid.
- Wasserzeichen und eine FireMonkey-Vorschau, die unter macOS, iOS und Android läuft.
Der Berichtsimporter sowie die Sparkline- und Gauge-Elemente erfordern eine registrierte Edition. sgcReports ist in sgcUI Enterprise und in All-Access enthalten und wird auch einzeln verkauft.
sgcReports 2026.11 ausprobieren
Importieren Sie eine eigene Datei aus FastReport, QuickReport oder ReportBuilder und sehen Sie, was übernommen wird.
Fragen oder Feedback? Nehmen Sie Kontakt auf, Sie erhalten eine Antwort von den Menschen, die den Code geschrieben haben.
