Migration von QuickReport zu sgcReports

sgcReports ist die Bänder-Berichts-Engine von sgcUI: TsgcReport hält das Layout, TsgcReportEngine bindet die Daten, TsgcReportPreviewVCL zeigt die Seiten, und der PDF-Export schreibt getaggtes PDF/UA. Dieses Kit ordnet die QuickReport-Bänder und -Steuerelemente, die Sie verwenden, ihren sgcReports-Gegenstücken zu, zeigt den Code einer kompilierten Demo und nennt ehrlich, was sich nicht zuordnen lässt.

Delphi-VCL-Berichte, gebaut mit QuickReport

Ein TQuickRep im Formular, Bänder, QR-Steuerelemente auf den Bändern und eine Schaltfläche für Vorschau, Druck oder PDF in der Anwendung.

QuickReport wird wieder gepflegt. In "QuickReport is back" (Embarcadero-Blog, Ian Barker, 14. November 2024) erklärt Embarcadero, dass das Produkt in eine Krise geriet, als sein Hauptentwickler verstarb, dass es mit dem Embarcadero-Partner Barnsten wiederbelebt wurde und dass es nun jede Version von RAD Studio mit Delphi und C++Builder ab Delphi 7 unterstützt. Die Barnsten-QuickReport-Seite (gelesen am 20.10.2026) nennt einen PDF-Filter mit eingebetteten TrueType-Schriften, PDF/A-Unterstützung sowie Exportfilter für HTML, XML/XSLT, XLS und XLSX und führt QuickReport Pro 5-Developer mit EUR 2.155,00 ohne MwSt. Diese Seite handelt also nicht von einem toten Produkt oder einer fehlenden PDF-Schaltfläche. Sie richtet sich an Teams, die das wollen, was diese Funktionsliste nicht nennt.

Was sgcReports hinzufügt

Jede sgcReports-Aussage unten steht im ausgelieferten Quellcode. Auf der QuickReport-Seite steht "nicht aufgeführt", wo die Anbieterseite schweigt, nicht "nicht unterstützt".

Barrierefreies PDF/UA

TsgcReportPDFExport schreibt standardmäßig getaggtes PDF/UA (PDFUA ist True, PDFUAPart wählt Teil 1 oder 2), mit Lesereihenfolge, Überschriftenrollen aus dem TagRole des Elements, Alternativtexten aus AltText sowie Language und Title des Dokuments. PDFA ergänzt PDF/A-3b, PDF/A-3a oder PDF/A-4 für Archive. Es ist in jeder Edition enthalten, auch in der Community. PDF/UA und getaggtes PDF sind auf der Barnsten-Funktionsseite nicht aufgeführt. Barrierefreie Dokumente gewinnen seit dem European Accessibility Act, Richtlinie (EU) 2019/882, an Bedeutung, der Produkte und Dienstleistungen wie E-Books, E-Commerce und Bankdienstleistungen erfasst.

Ein Designer für Endbenutzer, VCL und FireMonkey

Ihre Benutzer können einen Bericht ohne neuen Build ändern: sgcShowReportDesigner(Engine) öffnet den VCL-Designer, oder Sie binden das Panel TsgcVCLReportDesigner ein; sgcShowReportDesignerFMX(Engine) leistet dasselbe in FireMonkey (Delphi XE6 und neuer, Desktop). Der VCL-Designer folgt DPI-Änderungen des Formulars (Inspektor, Symbole und Entwurfsfläche skalieren in ChangeScale). Nur Registered Editionen. Die Barnsten-Funktionsseite nennt keinen Designer für Endbenutzer; historisch war das ein separates Produkt eines Drittanbieters, QRDesign. Zu High DPI: Eine Antwort in Delphi-PRAXiS vom 4. April 2022 sagte, QuickReport 6 lasse sich mit Delphi 11.1 bauen, unterstütze aber kein High-DPI; prüfen Sie die aktuelle Version beim Anbieter.

Eine Engine für die Suite

Kreuztabellen, Barcodes, Unterberichte und Rich Text sind Elementarten derselben Bänder-Engine. Mit den Bridge-Units druckt ein Bericht auch ein sgcCharts-Diagramm und eine sgcPivotGrid-Pivottabelle als Elemente, als Vektorinhalt im PDF gezeichnet (Registered Editionen). Exporte: PDF, XLSX, CSV, HTML und PNG in jeder Edition, DOCX in den Registered Editionen.

JSON-Definitionen und ein .NET-Gegenstück

Ein Bericht wird als JSON gespeichert und geladen (TsgcReport.SaveToFile, LoadFromFile), sodass Layouts in einer Datenbank oder unter Versionskontrolle liegen können. Dieselbe Definition lässt sich in sgcReports für .NET laden (NuGet esegece.sgcReports, .NET Standard 2.0, .NET Framework 4.7.2 und .NET 6 und neuer), sodass ein Delphi-Bericht von einem .NET-Dienst wiederverwendet werden kann.

Berichte werden neu aufgebaut, nicht importiert. sgcReports kann kein QuickReport-.dfm öffnen: Es gibt keinen QuickReport-Importer. Jeder Bericht wird neu angelegt, im Code wie in der Demo unten oder im sgcReports-Designer (Registered Editionen). Die Zuordnung und die Schritte auf dieser Seite machen daraus eine mechanische Arbeit, Band für Band. sgcReports wird pro Entwickler ab €199 lizenziert, mit vollständigem Quellcode und einem Jahr Updates, und ist außerdem Teil von sgcUI.

QuickReport-Klassen, sgcReports-Entsprechungen

Jeder sgcReports-Name unten steht im ausgelieferten Quellcode, und die von der Demo verwendeten lassen sich darin kompilieren. Die QuickReport-Namen dienen der Orientierung; QuickReport war bei der Prüfung dieser Seite nicht installiert.

QuickReport sgcReports Edition
TQuickRepTsgcReport (Pages, Styles, Units, Title) und TsgcReportEngine (Report, AddDataSource, Prepare, Variables, OnGetVariable)Alle
TQuickRep.DataSetTsgcReportDataSetSource (SourceName, DataSet), mit AddDataSource registriert; der DataSourceName des Bands nennt sieAlle
TQuickRep.Page (Papier, Ränder)TsgcReportPage.PaperSize (rpsA3, rpsA4, rpsA5, rpsLetter, rpsLegal, rpsCustom), Margins.Left, Top, Right, BottomAlle
TQuickRep.ReportTitleTsgcReport.Title und TsgcReportPDFExport.Title für die PDF-MetadatenAlle
TQRBand mit BandType rbTitle, rbPageHeader, rbColumnHeaderTsgcReportBand mit BandType rbtReportTitle, rbtPageHeader, rbtColumnHeaderAlle
rbDetailrbtMasterData, mit DataSourceName auf die Master-Quelle gesetztAlle
rbGroupHeader, rbGroupFooterrbtGroupHeader, rbtGroupFooterAlle
rbSummary, rbPageFooterrbtReportSummary, rbtPageFooterAlle
TQRChildBandrbtChild mit TsgcReportBand.ChildBandNameAlle
TQRSubDetailEin Band rbtDetailData (DataSourceName = Detail-Quelle) und MasterSource, MasterFields, DetailFields an der Detail-TsgcReportDataSetSourceAlle
TQRGroup.ExpressionrbtGroupHeader mit GroupExpressionAlle
TQRGroup.ReprintOnNewPageTsgcReportBand.RepeatOnEveryPageAlle
TQRGroup.FooterBandDas nächste Band rbtGroupFooter; die erste Fußzeile schließt die innerste GruppeAlle
TQRBand.ForceNewPageTsgcReportBand.StartNewPageAlle
TQRLabel (Caption)Ein Element mit Kind = rikText und literalem Text.TextAlle
TQRDBText (DataField, Mask)rikText mit Text.Text = '[Source.Field]'; Mask wird zu Text.DisplayFormatAlle
TQRExpr (Expression)rikText mit '[expression]', zum Beispiel '[Lines.Qty * Lines.Price]'; Funktionen wie IIF, FormatFloat, FormatDateTime, Round, UpperAlle
TQRExpr mit SUM, COUNT, AVERAGE, MIN, MAX[Sum(x)], [Count()], [Avg(x)], [Min(x)], [Max(x)]; Zurücksetzen pro Gruppe in Gruppenfußzeilen, Seitenbereich in SeitenfußzeilenAlle
TQRSysData qrsPageNumber[Page] und [TotalPages] für Seite X von YAlle
TQRSysData qrsDate, qrsTime, qrsDetailNo[Date], [Time] mit Text.DisplayFormat; [Line] oder [RecNo]Alle
TQRShape (qrsRectangle, qrsCircle, qrsRoundRect)rikShape mit Shape.ShapeKind rskRectangle, rskEllipse, rskRoundRect; Shape.PenColor, FillColor, PenWidthAlle
TQRShape qrsHorLinerikLine mit Height = 0Alle
TQRImage, TQRDBImagerikImage mit Image.FileName oder Image.Picture, oder Image.DataField; Stretch, KeepAspectRatioAlle
TQRRichText, TQRDBRichTextrikRichText mit RichText.Markup: HTML-ähnliches Markup, nicht RTF, und es darf [expressions] enthaltenAlle
Zur Laufzeit gesetztes Enabled, BeforePrint-EreignisseVisibleExpression an Bändern und Elementen; TsgcReportEngine.OnBeforePrintBandAlle
Prepare, PreviewTsgcReportEngine.Prepare liefert TsgcReportPreparedPages; TsgcReportPreviewVCL.Prepare zeigt sie in einem Steuerelement im FormularAlle
Print, PrinterSetupTsgcReportPreviewVCL.Print(aTitle), nach einem Standard-TPrintDialogAlle
ExportToFilter mit einem PDF-FilterTsgcReportPDFExport.SaveToFile(aPages, aFileName) oder SaveToStreamAlle
PDF/ATsgcReportPDFExport.PDFA = rpaA3b, rpaA3a oder rpaA4Alle
Nicht aufgeführtPDF/UA: TsgcReportPDFExport.PDFUA (Standard True), PDFUAPart, Language, Title; TagRole und AltText des ElementsAlle
Nicht aufgeführt (QRDesign war eine Erweiterung eines Drittanbieters)Designer für Endbenutzer: sgcShowReportDesigner, TsgcVCLReportDesigner; sgcShowReportDesignerFMX in FireMonkeyRegistered

Der Code aus der kompilierten Demo

Jeder Auszug stammt aus der Demo MigrateFromQuickReport, die sich mit Delphi 7 und Delphi 13 (Win32 und Win64) sowie in der Community Edition kompilieren lässt. Die Kommentare nennen den QuickReport-Code, den sie ersetzen.

TQuickRep wird zu einem Bericht und einer Engine

Vorher: ein TQuickRep im Formular, mit dem Bericht und seinen Daten in einer Komponente. Nachher: Layout, Engine und Vorschau sind getrennte Komponenten.

frmMain.dfm
object sgcPreview: TsgcReportPreviewVCL
  Left = 0
  Top = 44
  Width = 900
  Height = 676
  Align = alClient
  TabOrder = 1
  Engine = sgcEngine
end
object sgcReport: TsgcReport
  Left = 40
  Top = 80
end
object sgcEngine: TsgcReportEngine
  Report = sgcReport
  Left = 120
  Top = 80
end

TQuickRep.DataSet und TQRSubDetail werden zu Datenquellen

Vorher: TQuickRep.DataSet für die Rechnungen und ein TQRSubDetail mit eigenem DataSet für die Positionen. Nachher: eine Quelle pro Dataset, das Detail über Felder mit dem Master verknüpft. FormCreate registriert beide mit sgcEngine.AddDataSource.

frmMain.dfm
object srcInvoices: TsgcReportDataSetSource
  SourceName = 'Invoices'
  DataSet = cdsInvoices
  Left = 40
  Top = 208
end
object srcLines: TsgcReportDataSetSource
  SourceName = 'Lines'
  MasterSource = srcInvoices
  MasterFields = 'Number'
  DetailFields = 'Invoice'
  DataSet = cdsLines
  Left = 120
  Top = 208
end

Eine Hilfsmethode, die TQRLabel, TQRDBText und TQRExpr ersetzt

Die Demo fügt jeden Text mit dieser kleinen Methode ihres Formulars hinzu, damit die Auszüge unten kurz bleiben.

frmMain.pas
function TformMain.AddText(aBand: TsgcReportBand; const aText: string;
  aLeft, aTop, aWidth: Double; const aStyle: string): TsgcReportItem;
var
  oStyle: TsgcReportStyle;
begin
  // one item replaces TQRLabel (literal text), TQRDBText ([Source.Field])
  // and TQRExpr ([expression]); literal text and [expressions] can be mixed
  Result := aBand.Items.Add;
  Result.Kind := rikText;
  Result.Name := aBand.Name + IntToStr(aBand.Items.Count);
  Result.Text.Text := aText;
  Result.Left := aLeft;
  Result.Top := aTop;
  Result.Width := aWidth;
  Result.Height := 14;
  Result.StyleName := aStyle;
  oStyle := sgcReport.Styles.FindStyle(aStyle);
  if Assigned(oStyle) and (oStyle.Font.Size * 1.25 > Result.Height) then
    Result.Height := oStyle.Font.Size * 1.25;
end;

Seiteneinrichtung, das Titelband und TQRSysData

Vorher: TQuickRep.Page, ein Titelband und ein TQRSysData mit dem Datum. Nachher: TagRole markiert den Titel im Tag-Baum von PDF/UA als Überschrift.

frmMain.pas
// QuickReport: TQuickRep.Page (PaperSize, LeftMargin, TopMargin, ...)
oPage := sgcReport.Pages.Add;
oPage.Name := 'Invoices';
oPage.PaperSize := rpsA4;
oPage.Margins.Left := 40;
oPage.Margins.Top := 40;
oPage.Margins.Right := 40;
oPage.Margins.Bottom := 40;

// TQRBand BandType = rbTitle: printed once, on the first page
oBand := AddBand(oPage, rbtReportTitle, 'Title', 40);
AddText(oBand, 'Invoices by customer', 0, 0, 350, 'Title').TagRole :=
  rtrHeading1;
AddText(oBand, 'Printed on', 315, 6, 120, 'Right');
// TQRSysData Data = qrsDate
oItem := AddText(oBand, '[Date]', 440, 6, 75, 'Right');
oItem.Text.DisplayFormat := 'yyyy-mm-dd';

TQRGroup, das Detailband und TQRSubDetail

Vorher: eine TQRGroup auf dem Kunden, ein Detailband aus TQRDBText-Steuerelementen und ein TQRSubDetail mit einem TQRExpr für den Positionsbetrag. Nachher:

frmMain.pas
// TQRGroup Expression = 'Invoices.Customer', ReprintOnNewPage = True.
// The column titles are TQRLabel components in QuickReport
oBand := AddBand(oPage, rbtGroupHeader, 'CustomerHeader', 42);
oBand.GroupExpression := 'Invoices.Customer';
oBand.RepeatOnEveryPage := True;
AddText(oBand, '[Invoices.Customer]', 0, 4, 515, 'Group').TagRole :=
  rtrHeading2;
AddText(oBand, 'Invoice / product', 0, 24, 200, 'Bold');
AddText(oBand, 'Date / qty', 210, 24, 120, 'Bold');
AddText(oBand, 'Price', 345, 24, 70, 'BoldRight');
AddText(oBand, 'Amount', 425, 24, 90, 'BoldRight');
AddLine(oBand, 40);

// TQRBand BandType = rbDetail: one band per record of TQuickRep.DataSet.
// Each [Source.Field] text item replaces a TQRDBText with DataField set
oBand := AddBand(oPage, rbtMasterData, 'Invoice', 18);
oBand.DataSourceName := 'Invoices';
AddText(oBand, '[Invoices.Number]', 0, 3, 200, 'Bold');
oItem := AddText(oBand, '[Invoices.InvoiceDate]', 210, 3, 120, 'Bold');
oItem.Text.DisplayFormat := 'yyyy-mm-dd';
oItem := AddText(oBand, '[Invoices.Amount]', 425, 3, 90, 'BoldRight');
// TQRDBText.Mask
oItem.Text.DisplayFormat := '#,##0.00';

// TQRSubDetail DataSet = Lines, linked to the invoice: the link is
// MasterSource / MasterFields / DetailFields of srcLines (see the form)
oBand := AddBand(oPage, rbtDetailData, 'Line', 14);
oBand.DataSourceName := 'Lines';
AddText(oBand, '[Lines.Product]', 15, 1, 195);
AddText(oBand, '[Lines.Qty]', 210, 1, 40, 'Right');
oItem := AddText(oBand, '[Lines.Price]', 345, 1, 70, 'Right');
oItem.Text.DisplayFormat := '#,##0.00';
// TQRExpr Expression = 'Lines.Qty * Lines.Price'
oItem := AddText(oBand, '[Lines.Qty * Lines.Price]', 425, 1, 90, 'Right');
oItem.Text.DisplayFormat := '#,##0.00';

Aggregate in der Gruppenfußzeile

Vorher: TQRExpr-Komponenten mit COUNT und SUM im Band der Gruppenfußzeile. Nachher:

frmMain.pas
// TQRBand BandType = rbGroupFooter (TQRGroup.FooterBand). Aggregates are
// reset for every group, like TQRExpr with ResetAfterPrint = True
oBand := AddBand(oPage, rbtGroupFooter, 'CustomerFooter', 30);
AddLine(oBand, 2);
// TQRExpr Expression = 'COUNT' and 'SUM(Lines.Qty)'
AddText(oBand, '[Count()] invoices, [Sum(Lines.Qty)] items', 0, 8,
  250, 'Bold');
AddText(oBand, 'Customer total', 260, 8, 155, 'BoldRight');
// TQRExpr Expression = 'SUM(Invoices.Amount)'
oItem := AddText(oBand, '[Sum(Invoices.Amount)]', 425, 8, 90, 'BoldRight');
oItem.Text.DisplayFormat := '#,##0.00';

Das Summenband, TQRShape und TQRRichText

Vorher: ein Summenband mit einem TQRShape, Gesamtsummen und einem TQRRichText. Nachher: Der Rich Text ist HTML-ähnliches Markup.

frmMain.pas
// TQRBand BandType = rbSummary: printed once, after the last record
oBand := AddBand(oPage, rbtReportSummary, 'Summary', 90);
oBand.KeepTogether := True;
// TQRShape Shape = qrsRectangle, Brush.Color and Pen.Color
oItem := oBand.Items.Add;
oItem.Kind := rikShape;
oItem.Name := 'SummaryBox';
oItem.Top := 10;
oItem.Width := 515;
oItem.Height := 30;
oItem.Shape.ShapeKind := rskRectangle;
oItem.Shape.PenColor := $00A0A0A0;
oItem.Shape.FillColor := $00EEF3FA;
// TQRExpr Expression = 'COUNT' and 'SUM(Invoices.Amount)' in the summary
AddText(oBand, 'Grand total, [Count()] invoices', 10, 17, 300, 'Group');
oItem := AddText(oBand, '[Sum(Invoices.Amount)]', 315, 17, 190,
  'GroupRight');
oItem.Text.DisplayFormat := '#,##0.00';
// TQRRichText: the text is HTML-like markup instead of RTF
oItem := oBand.Items.Add;
oItem.Kind := rikRichText;
oItem.Name := 'SummaryNote';
oItem.Top := 50;
oItem.Width := 515;
oItem.Height := 36;
oItem.StyleName := 'Base';
oItem.RichText.Markup := '<b>Migrated from QuickReport.</b> Each band of ' +
  'this report replaces a <i>TQRBand</i>, each text item a <i>TQRLabel</i>, '
  + '<i>TQRDBText</i> or <i>TQRExpr</i>.';

Seitenfußzeile mit Seite X von Y

frmMain.pas
// TQRBand BandType = rbPageFooter
oBand := AddBand(oPage, rbtPageFooter, 'PageFooter', 20);
AddLine(oBand, 2);
// TQRLabel with a literal caption
AddText(oBand, 'Invoices by customer', 0, 6, 300);
// TQRSysData Data = qrsPageNumber; [TotalPages] is resolved after the
// last page is laid out
AddText(oBand, 'Page [Page] of [TotalPages]', 315, 6, 200, 'Right');

Vorschau und Druck

Vorher: QuickRep1.Preview, PrinterSetup und Print. Nachher:

frmMain.pas
procedure TformMain.btnPreviewClick(Sender: TObject);
begin
  // QuickReport: QuickRep1.Preview (or Prepare + a TQRPreview). sgcReports:
  // the preview control on the form runs the engine and shows the pages
  sgcPreview.Prepare;
  lblStatus.Caption := Format('%d pages prepared', [sgcPreview.PageCount]);
end;

procedure TformMain.btnPrintClick(Sender: TObject);
begin
  // QuickReport: QuickRep1.PrinterSetup + QuickRep1.Print. The print dialog
  // selects the printer, Print sends the prepared pages to it
  if dlgPrint.Execute then
    sgcPreview.Print(sgcReport.Title);
end;

ExportToFilter wird zu TsgcReportPDFExport

Vorher: ExportToFilter mit einem PDF-Filter. Nachher: Ein Schalter schreibt ein einfaches PDF oder eine getaggte PDF/UA-Datei.

frmMain.pas
procedure TformMain.SavePDF(aPDFUA: Boolean; const aFileName: string);
var
  oPages: TsgcReportPreparedPages;
  vFileName: string;
begin
  // QuickReport: QuickRep1.ExportToFilter(TQRPDFDocumentFilter.Create(...))
  vFileName := ExtractFilePath(ParamStr(0)) + aFileName;
  // PDF/UA: a tagged PDF (headings, reading order, alternate texts); Title
  // and Language are set on pdfExport in the form
  pdfExport.PDFUA := aPDFUA;
  oPages := sgcEngine.Prepare;
  try
    pdfExport.SaveToFile(oPages, vFileName);
  finally
    oPages.Free;
  end;
  lblStatus.Caption := Format('Saved %s (%d warnings)',
    [vFileName, pdfExport.Warnings.Count]);
end;

Acht Schritte pro Bericht

Die Datasets bleiben, wie sie sind. Der Bericht wird Band für Band neu aufgebaut.

1

Das TQuickRep ersetzen

Legen Sie ein TsgcReport, eine TsgcReportEngine (Report = der Bericht) und eine TsgcReportPreviewVCL (Engine = die Engine) auf ein normales Formular.

2

Die Daten registrieren

Fügen Sie pro Dataset eine TsgcReportDataSetSource hinzu (SourceName, DataSet) und rufen Sie AddDataSource auf. Setzen Sie für jedes TQRSubDetail MasterSource, MasterFields und DetailFields.

3

Die Seite einrichten

Fügen Sie eine TsgcReportPage mit Papierformat und Rändern von TQuickRep.Page hinzu und setzen Sie TsgcReport.Units (in der Demo ruPoints), damit die Koordinaten vorhersehbar sind.

4

Die Bänder neu anlegen

Ein TsgcReportBand pro TQRBand, in Berichtsreihenfolge, mit dem passenden rbt-Bandtyp; DataSourceName an Master- und Detailbändern, GroupExpression an Gruppenköpfen.

5

Die Steuerelemente neu anlegen

TQRLabel, TQRDBText und TQRExpr werden zu rikText-Elementen, die literalen Text und [expressions] mischen. Mask wird zu Text.DisplayFormat, Schriften werden zu benannten Stilen.

6

Die Ausdrücke übersetzen

Aggregate werden zu [Sum(x)], [Count()], [Avg(x)], [Min(x)] und [Max(x)]; TQRSysData wird zu [Page], [TotalPages], [Date] und [Time].

7

Vorschau, Druck, Export

Preview wird zu TsgcReportPreviewVCL.Prepare, Print wird zu Print, und der PDF-Filter wird zu TsgcReportPDFExport.SaveToFile. Setzen Sie PDFUA, Title und Language für ein barrierefreies PDF.

8

An Ihre Benutzer übergeben

Optional, Registered Editionen: Speichern Sie den neu aufgebauten Bericht mit TsgcReport.SaveToFile als JSON und lassen Sie Benutzer ihn mit sgcShowReportDesigner bearbeiten.

Was sich nicht eins zu eins zuordnen lässt

Lesen Sie dies, bevor Sie den Umstieg planen.

MigrateFromQuickReport

Eine typische QuickReport-Rechnungsliste als Master-Detail, nach Kunden gruppiert: 18 Rechnungen von 4 Kunden und ihre Positionen, aus zwei im Code gefüllten TClientDataSet.

Wo sie liegt

Der sgcUI-Installer legt sie in Demos\Reports\Delphi\MigrateFromQuickReport ab: sgcReports_Demo_MigrateFromQuickReport.dpr, frmMain.pas, frmMain.dfm und eine readme.html. Sie ist auch in der Community Edition enthalten.

So starten Sie sie

Öffnen Sie die .dpr in einem beliebigen Delphi von 7 bis 13 mit installiertem sgcReports und sgcPDF, bauen Sie für Win32 oder Win64 und starten Sie. Der Bericht wird beim Start vorbereitet, drei Seiten mit Seite X von Y.

Was Sie ausprobieren können

Print... zeigt einen Druckdialog und druckt. Save PDF schreibt invoices.pdf, und Save PDF/UA schreibt das getaggte invoices_pdfua.pdf neben die Exe, bereit für eine Prüfung mit einem PDF/UA-Validator.

Fairerweise gegenüber beiden Engines: QuickReport wird wieder gepflegt, unterstützt Delphi ab Version 7, und seine Berichte werden im Delphi-Formulardesigner entworfen. Seine Funktionsseite nennt Exportfilter, etwa XML/XSLT, die sgcReports nicht hat, und wer es behält, muss keinen Bericht neu aufbauen. sgcReports ist der Weg, wenn Sie barrierefreie PDF/UA-Ausgabe, einen Designer für Ihre Benutzer und Berichte benötigen, die mit sgcCharts, sgcPivotGrid oder einem .NET-Dienst geteilt werden, und wenn Sie akzeptieren, jeden Bericht einmal neu aufzubauen. Die vollständige Funktionsliste finden Sie auf der sgcReports-Produktseite.

Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bauen Sie noch heute Ihren ersten Bericht neu auf

Laden Sie die sgcUI-Testversion mit sgcReports und der Demo MigrateFromQuickReport herunter und portieren Sie Ihren ersten Bericht.