Gardez vos états.
Changez de moteur d'états.
sgcReports importe désormais les états FastReport, QuickReport et ReportBuilder, et ajoute les fonctions que les acheteurs vérifient en premier : paramètres, vrais tableaux, modèles d'états, aperçu avec recherche et factures électroniques. Douze nouvelles fonctions dans une seule version.
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia
Les douze nouvelles fonctions en moins de quatre minutes. Aussi sur YouTube.
La plupart des équipes qui aimeraient quitter leur moteur d'états ne le font jamais, pour une seule raison : des centaines d'états existants que personne ne veut redessiner. sgcReports 2026.11 supprime cet obstacle. Il lit vos fichiers FastReport, QuickReport et ReportBuilder et les convertit, et il comble les manques qu'une équipe vérifie avant de changer : paramètres d'état, vrai élément tableau, modèles d'états avec héritage, aperçu avec recherche et miniatures, et sortie PDF pour les factures électroniques.
Tout ce qui suit fonctionne de la même manière en Delphi et en C++ Builder, avec VCL et FireMonkey, et en .NET avec WinForms, WPF et Avalonia. Chaque exemple de code de cette page a été compilé et exécuté avec les sources 2026.11.
- 01Importateur d'étatsFichiers FastReport, QuickReport et ReportBuilder, convertis.
- 02Paramètres d'étatDes valeurs typées demandées par l'aperçu, aussi via HTTP.
- 03Élément tableauCellules fusionnées, en-têtes répétés, totaux.
- 04Nouveaux types d'élémentsCases à cocher, SVG, sparklines et jauges.
- 05Modèles et héritageUn seul papier à en-tête pour tous les états.
- 06Un meilleur aperçuRecherche, miniatures et menu d'export.
- 07Signets et liensUn plan PDF, des hyperliens et des ancres.
- 08PDF de facture électroniqueFactur-X, ZUGFeRD et XRechnung en PDF/A-3.
- 09Bibliothèque d'expressions68 fonctions et 10 agrégats.
- 10HighlightsDes styles conditionnels sans script.
- 11Progression et annulationPour les gros états, à l'écran et sur le serveur.
- 12Toutes les plateformesLa même API en Delphi et en .NET.
Partie 1 · Supprimer le coût du changement
Importer des états FastReport, QuickReport et ReportBuilder
Le nouveau TsgcReportImporter lit un fichier FastReport .fr3, un formulaire QuickReport (un .dfm contenant un TQuickRep) ou un modèle ReportBuilder .rtm, en texte ou en binaire, et le transforme en définition d'état sgcReports. Les pages, bandes, éléments, styles et sources de données sont repris, les expressions sont traduites vers la syntaxe sgcReports, et les cases à cocher de QuickReport et ReportBuilder deviennent le nouvel élément case à cocher.
Ce qui le rend sûr sur un vrai projet, c'est l'autre moitié du résultat. L'importateur liste chaque objet, propriété, expression, script et source de données qu'il n'a pas pu convertir, avec le chemin dans l'état et la raison, pour que vous sachiez exactement ce qu'il reste à terminer à la main. Rien n'est perdu en silence.
Les concepteurs disposent d'une commande Importer, ce qui permet d'importer un état, de le vérifier dans l'aperçu et de l'enregistrer en JSON sans écrire de code. Depuis le code, ce sont quatre lignes plus le nettoyage :
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;
Et la même chose en C# :
var oImporter = new TsgcReportImporter();
oImporter.ImportFromFile(oReport, "fr_items.fr3");
foreach (var oIssue in oImporter.ImportResult.Issues)
Console.WriteLine(oIssue.Reason);
Les scripts, le texte enrichi, les graphiques et les tableaux croisés de l'état source ne sont pas convertis. Ils apparaissent dans la liste des problèmes, afin que vous puissiez les reconstruire avec les équivalents sgcReports. La nouvelle démo ReportImport, pour Delphi, C++ Builder et .NET, importe des fichiers d'exemple des trois formats.
Paramètres d'état, demandés par l'aperçu
Un état peut désormais déclarer ses paramètres : texte, entier, nombre, date, date et heure, ou oui ou non, chacun avec une valeur par défaut ou une expression par défaut, un indicateur obligatoire, des valeurs multiples, et une liste de valeurs autorisées fixe ou lue depuis une source de données. Les expressions et les scripts les lisent sous la forme :Name.
Vous n'avez pas à écrire de formulaire. Les aperçus et concepteurs VCL et FireMonkey demandent les paramètres avant de préparer l'état, tout comme les aperçus .NET. Le visualiseur HTML affiche un formulaire de paramètres typés, et le point d'accès HTTP lit ?param.Name=value dans la chaîne de requête et répond 400 pour une valeur inadaptée, au lieu de renvoyer un état cassé.
Dans une définition JSON, les paramètres se placent à côté des pages :
"parameters": [
{ "name": "FromDate", "dataType": "rpdtDate", "required": true,
"defaultExpression": "EncodeDate(2026, 1, 1)" },
{ "name": "MinTotal", "dataType": "rpdtFloat", "defaultValue": "0" }
]
Un service qui prépare l'état sans utilisateur définit les valeurs dans le code, et aucune demande n'est affichée :
oEngine.Report := oReport;
oEngine.SetParameterValue('FromDate', VarFromDateTime(EncodeDate(2026, 3, 1)));
oEngine.SetParameterValue('MinTotal', 100.0);
Un vrai élément tableau
Fini l'alignement manuel d'éléments texte pour imiter un tableau. Le nouvel élément tableau offre des largeurs de colonne fixes, en pourcentage ou automatiques, des cellules qui s'étendent sur plusieurs lignes et colonnes, des lignes d'en-tête répétées sur chaque page, des lignes de données issues de leur propre source de données, des lignes de pied avec des totaux, et des lignes qui grandissent avec leur contenu. Les cellules ont des styles, des Highlights et des hyperliens.
Les exports conservent la structure. Un tableau devient un tableau balisé dans un PDF accessible, avec ses cellules d'en-tête, leur portée et les fusions, si bien qu'un lecteur d'écran le lit comme un tableau. Il devient un tableau HTML, un tableau Word dont les lignes d'en-tête sont répétées, et des cellules fusionnées en XLSX. Dans le code, le générateur fluent l'écrit en quelques lignes :
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;
Cases à cocher, SVG, sparklines et jauges
Quatre nouveautés à dessiner sur une page :
- Élément case à cocher, cochée par une expression booléenne, avec une marque en coche, en croix ou en carré. Elle reste vectorielle dans le PDF et devient une valeur TRUE ou FALSE en XLSX et CSV.
- Images SVG dans les éléments image, imprimées en graphiques vectoriels dans le PDF, en SVG dans le HTML et en images nettes dans Word, de sorte qu'un logo reste net à tous les niveaux de zoom.
- Élément sparkline, dessiné par sgcCharts : courbe, aire, colonnes ou gains et pertes, un par ligne.
- Élément jauge, dessiné par sgcGauges, radial ou linéaire avec des plages colorées, grâce au nouveau pont sgcReportsGauges.
Les paramètres des éléments personnalisés acceptent désormais des expressions, évaluées pour chaque bande imprimée, ce qui permet à chaque ligne de dessiner sa propre sparkline et sa propre jauge :
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');
Modèles d'états et héritage
Chaque entreprise a un papier à en-tête, et chaque facture, relevé et bon de livraison le reprend. Avec la nouvelle propriété InheritsFrom, "inheritsFrom" dans le JSON, une définition d'état part d'une définition de base et ne stocke que ses différences. Les pages, bandes, éléments et styles sont fusionnés par nom. Un état enfant peut remplacer une propriété, ajouter un élément, placer une bande en premier avec "$first" ou supprimer un élément hérité avec "$remove". Changez le logo dans l'état de base, et tous les états qui en héritent suivent.
Le bon de livraison ci-dessus tient en quelques lignes de différences. Ici, il supprime le bloc de contact du papier à en-tête :
"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');
La base est recherchée sous BaseFolder, ou bien votre gestionnaire OnResolveBase la charge depuis une base de données ou une ressource. Les chaînes d'héritage vont jusqu'à huit niveaux, et Flat écrit la définition fusionnée lorsque vous avez besoin d'un seul fichier. Les concepteurs VCL, FireMonkey et HTML signalent les objets hérités, les modifient comme des surcharges et créent un nouvel état à partir d'un état de base. Dans le concepteur VCL, une propriété surchargée s'affiche en gras.
Un aperçu avec recherche, miniatures et menu d'export
Les aperçus disposent d'une barre de recherche (Ctrl+F, F3, respect de la casse et mot entier) qui met en évidence chaque occurrence sur la page, d'un volet de miniatures de pages, et d'un menu Exporter pour PDF, XLSX, CSV, PNG, HTML et Word, avec un événement OnExport pour reprendre la main sur l'enregistrement. Cela existe dans les aperçus VCL et FireMonkey ainsi que dans les aperçus WinForms, WPF et Avalonia, et le visualiseur PDF FireMonkey gagne lui aussi la recherche de texte.
oPreview.ShowThumbnails := True;
oPreview.ExportFormats := [rpxPDF, rpxXLSX];
if oPreview.SearchText('Total', False, True) then
Writeln(oPreview.SearchResults, ' match(es)');
Partie 2 · Combler les manques
Signets PDF, hyperliens et ancres
Définissez la nouvelle expression Bookmark sur une bande ou un élément, et l'export PDF écrit les signets sous forme de plan du document, imbriqués par groupe, tandis que les aperçus VCL et FireMonkey les affichent dans un volet de plan (ShowOutline). La nouvelle propriété Hyperlink ouvre une adresse web ou mailto, ou saute vers une Anchor du même état avec #name, et les liens sont conservés dans les exports PDF, HTML, Word et XLSX.
PDF de facture électronique : Factur-X, ZUGFeRD et XRechnung
L'export PDF intègre le XML de facture électronique de votre application comme fichier associé PDF/A-3 grâce à la nouvelle propriété EInvoice, pour Factur-X, ZUGFeRD et XRechnung, aussi en PDF/A-3a avec PDF/UA. La facture que lisent les personnes et les données que lisent les machines voyagent dans un seul fichier. sgcReports n'écrit pas le XML lui-même : votre application le fournit.
Une bibliothèque d'expressions de 68 fonctions et 10 agrégats
La bibliothèque d'expressions passe à 68 fonctions et 10 agrégats. Les nouveautés sont l'arithmétique de dates, le remplissage et la mise en forme, Choose, ToWords pour écrire un montant en toutes lettres dans les 12 langues de sgcUI, et les agrégats SumIf, CountIf, Previous, RunningSum et RunningCount. Un agrégat suit la bande dans laquelle il est imprimé : un pied de groupe donne le total du groupe, un pied de page le total de la page.
Highlights : des styles conditionnels sans script
Les Highlights placent sur un élément une liste de conditions et de styles. La première condition vraie remplace le style de l'élément, de sorte que les totaux négatifs s'impriment en rouge et les bons résultats en vert sans une ligne de script. Ils existent dans le JSON, dans le générateur fluent et dans les concepteurs VCL, FireMonkey et HTML.
Progression et annulation pour les gros états
Le moteur dispose d'un nouvel événement OnProgress avec les compteurs de pages et d'enregistrements, et d'une méthode Cancel. Les aperçus affichent la progression pendant la préparation d'un état, avec un bouton Annuler que la touche Esc actionne aussi, et le point d'accès HTTP a de nouvelles limites MaxPages et Timeout, afin qu'un seul état incontrôlé ne puisse pas bloquer un serveur.
Toutes les plateformes, la même API
Chaque fonction de cette page est livrée pour Delphi et C++ Builder, avec les aperçus et concepteurs VCL et FireMonkey, et pour .NET avec WinForms, WPF et Avalonia, avec les mêmes noms de classes et de propriétés. Les états définis en JSON passent d'un monde à l'autre sans changement, et le moteur fonctionne toujours sans interface dans les services et les démons Linux64.
Cinq nouvelles démos sont livrées avec cette version, pour Delphi, C++ Builder et .NET : ReportImport, ReportParameters, ReportTables, ReportVisualItems et ReportInheritance, à côté de la démo ReportEInvoice.
Autres nouveautés de sgcReports 2026.11
- Un concepteur d'états natif pour VCL et FireMonkey avec boîte à outils, plan, inspecteur, règles, guides, magnétisme, annuler et rétablir, édition au clavier et prise en charge des lecteurs d'écran.
- Des scripts avec un sous-ensemble de Pascal, édités et vérifiés dans les concepteurs VCL et FireMonkey.
- Export DOCX (modes fixe et flux) et export HTML (paginé et continu), aussi via les routes HTTP.
- Des éléments personnalisés, un tableau croisé natif, et des éléments graphique et tableau croisé dynamique grâce aux ponts sgcReportsCharts et sgcReportsPivotGrid.
- Des filigranes, et un aperçu FireMonkey qui fonctionne sur macOS, iOS et Android.
L'importateur d'états et les éléments sparkline et jauge nécessitent une édition enregistrée. sgcReports est inclus dans sgcUI Enterprise et dans All-Access, et il est aussi vendu séparément.
Essayez sgcReports 2026.11
Importez l'un de vos propres fichiers FastReport, QuickReport ou ReportBuilder et voyez ce qui passe.
Des questions ou des remarques ? Contactez-nous, vous recevrez une réponse de la part des personnes qui ont écrit le code.
