sgcReports 2026.11 : importez vos états FastReport, et profitez des paramètres, des tableaux et des modèles pour Delphi, C++ Builder et .NET

· Composants
sgcReports 2026.11 : import FastReport, paramètres, tableaux et modèles pour Delphi et .NET | Blog eSeGeCe
✦  Nouveau dans sgcUI 2026.11 · sgcReports

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.

12nouvelles fonctions
3formats d'états importés
68fonctions, plus 10 agrégats
6formats d'export dans l'aperçu

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.

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.

Trois formats d'états en entrée, une définition sgcReports en sortie.
La démo ReportImport après l'import d'un fichier FastReport, avec le résumé, la liste des problèmes et l'aperçu de l'état converti
Un fichier FastReport importé : 13 éléments, 2 expressions traduites, et chaque objet non pris en charge listé avec sa raison.

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é.

La boîte de dialogue des paramètres avec une date obligatoire, un pays choisi dans une liste lue depuis les données et un total minimum
La demande, avec la liste des pays lue depuis les données
L'état des commandes filtré par la date, le pays et le total minimum choisis
L'état, filtré par les valeurs saisies

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.

Des cellules fusionnées, et une ligne d'en-tête qui suit le tableau sur chaque page.
Un tableau comparatif de formules avec des cellules fusionnées et un tableau de produits avec les stocks faibles en rouge
Cellules fusionnées et colonne de stock mise en évidence
L'éditeur de tableaux du concepteur d'états avec les lignes, les colonnes et les commandes de fusion et de scission
L'éditeur de tableaux dans le concepteur

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 :

Des coches, des sparklines et des jauges, à l'intérieur des lignes de l'état.
Un état de suivi de projets avec un logo SVG, une case à cocher, une sparkline et une jauge de progression sur chaque ligne, et une jauge de progression moyenne
Un état de suivi de projets : un logo SVG, une case à cocher, une sparkline sur 12 mois et une jauge de progression par projet, et une jauge radiale avec la moyenne.

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.

Un seul papier à en-tête, deux états qui en héritent.
L'état de base du papier à en-tête
La base : letterhead.json
Une facture qui hérite du papier à en-tête
Une facture en hérite
Un bon de livraison qui hérite du papier à en-tête et supprime le bloc de contact
Un bon de livraison aussi

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.

Le concepteur d'états VCL avec le bon de livraison ouvert, les bandes héritées signalées et le titre surchargé en gras
Les bandes héritées sont signalées, et le titre surchargé 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.

Rechercher, aller à une page et exporter, depuis l'aperçu que vos utilisateurs ont déjà.
La barre de recherche de l'aperçu avec l'occurrence courante en orange et les autres en jaune
Recherche, avec chaque occurrence en évidence
L'aperçu avec le volet des miniatures de pages ouvert
Miniatures de pages
  oPreview.ShowThumbnails := True;
  oPreview.ExportFormats := [rpxPDF, rpxXLSX];
  if oPreview.SearchText('Total', False, True) then
    Writeln(oPreview.SearchResults, ' match(es)');

Partie 2 · Combler les manques

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.

Le volet de plan de l'aperçu avec les régions et les clients issus des signets de groupe
Un plan construit à partir de deux niveaux de groupe
Une page d'état avec des liens qui sautent vers chaque région et un lien vers une page web
Liens vers une page web et vers des ancres

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.

Le XML est placé à l'intérieur de la facture PDF/A-3.
La démo ReportEInvoice avec des boutons pour Factur-X et ZUGFeRD, Verifactu (Espagne) et KSeF (Pologne)
La démo ReportEInvoice : une facture Factur-X enregistrée en PDF/A-3, et des modèles de code QR pour Verifactu (Espagne) et KSeF (Pologne).

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.

Une page d'état utilisant PadLeft, Upper, Proper, ToWords, RunningSum et IIF
PadLeft, Upper, Proper, ToWords et une colonne RunningSum sur une page du rapport.

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.

Des résultats par agence avec les valeurs négatives en rouge et les résultats supérieurs à 5000 en vert
Négatifs en rouge, bons mois en vert
L'éditeur de Highlights du concepteur d'états avec deux conditions et leurs styles
L'éditeur de Highlights

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.

L'aperçu préparant un état de 40 000 enregistrements avec les compteurs de pages et d'enregistrements et un bouton Annuler
Préparation de 40 000 enregistrements : les compteurs de pages et d'enregistrements, et un bouton Annuler.

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.

La démo ReportTables exécutée en .NET WinForms
La démo ReportTables en .NET WinForms.

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

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.