sgcReports 2026.11: importa i tuoi report di FastReport, più parametri, tabelle e modelli per Delphi, C++ Builder e .NET

· Componenti
sgcReports 2026.11: importa FastReport, parametri, tabelle e modelli per Delphi e .NET | Blog eSeGeCe
✦  Novità in sgcUI 2026.11 · sgcReports

Mantieni i tuoi report.
Cambia il motore di report.

sgcReports ora importa i report di FastReport, QuickReport e ReportBuilder e aggiunge le funzionalità che chi acquista controlla per prime: parametri, vere tabelle, modelli di report, un'anteprima con ricerca e fatture elettroniche. Dodici nuove funzionalità in un'unica versione.

  • VCL
  • FireMonkey
  • C++ Builder
  • WinForms
  • WPF
  • Avalonia

Le dodici nuove funzionalità in meno di quattro minuti. Anche su YouTube.

12nuove funzionalità
3formati di report importati
68funzioni, più 10 aggregati
6formati di esportazione nell'anteprima

La maggior parte dei team che vorrebbero lasciare il proprio motore di report non lo fa mai, per un solo motivo: centinaia di report esistenti che nessuno vuole disegnare di nuovo. sgcReports 2026.11 elimina questo ostacolo. Legge i tuoi file di FastReport, QuickReport e ReportBuilder e li converte, e colma le lacune che un team verifica prima di cambiare: parametri di report, un vero elemento tabella, modelli di report con ereditarietà, un'anteprima con ricerca e miniature, e un output PDF per le fatture elettroniche.

Tutto ciò che segue funziona allo stesso modo in Delphi e C++ Builder, con VCL e FireMonkey, e in .NET con WinForms, WPF e Avalonia. Ogni esempio di codice di questa pagina è stato compilato ed eseguito sui sorgenti 2026.11.

Parte 1 · Elimina il costo del cambio

Importa i report di FastReport, QuickReport e ReportBuilder

Il nuovo TsgcReportImporter legge un file .fr3 di FastReport, un modulo QuickReport (un .dfm con un TQuickRep) o un modello .rtm di ReportBuilder, in formato testo o binario, e lo trasforma in una definizione di report di sgcReports. Pagine, bande, elementi, stili e origini dati vengono trasferiti, le espressioni sono tradotte nella sintassi di sgcReports e le caselle di controllo di QuickReport e ReportBuilder diventano il nuovo elemento casella di controllo.

Ciò che lo rende sicuro da usare in un progetto reale è l'altra metà del risultato. L'importatore elenca ogni oggetto, proprietà, espressione, script e origine dati che non ha potuto mappare, con il percorso all'interno del report e il motivo, così sai esattamente cosa completare a mano. Nulla viene scartato in silenzio.

Tre formati di report in ingresso, una definizione di sgcReports in uscita.
La demo ReportImport dopo l'importazione di un file FastReport, con il riepilogo, l'elenco dei problemi e l'anteprima del report convertito
Un file FastReport importato: 13 elementi, 2 espressioni tradotte e ogni oggetto non supportato elencato con il suo motivo.

I designer hanno un comando Importa, quindi un report può essere portato dentro, controllato nell'anteprima e salvato come JSON senza scrivere codice. Da codice bastano quattro righe più la pulizia:

  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;

E lo stesso in C#:

    var oImporter = new TsgcReportImporter();
    oImporter.ImportFromFile(oReport, "fr_items.fr3");
    foreach (var oIssue in oImporter.ImportResult.Issues)
      Console.WriteLine(oIssue.Reason);

Script, testo formattato, grafici e tabelle incrociate del report di origine non vengono convertiti. Compaiono nell'elenco dei problemi, così puoi ricostruirli con gli equivalenti di sgcReports. La nuova demo ReportImport, per Delphi, C++ Builder e .NET, importa file di esempio di tutti e tre i formati.

Parametri di report, richiesti dall'anteprima

Un report può ora dichiarare i propri parametri: testo, intero, numero, data, data e ora, oppure sì o no, ciascuno con un valore predefinito o un'espressione predefinita, un flag di obbligatorietà, valori multipli e un elenco di valori consentiti, fisso o letto da un'origine dati. Espressioni e script li leggono come :Name.

Non devi scrivere un modulo per gestirli. Le anteprime e i designer VCL e FireMonkey chiedono i parametri prima che il report venga preparato, e lo stesso fanno le anteprime .NET. Il visualizzatore HTML mostra un modulo di parametri tipizzato, e l'endpoint HTTP legge ?param.Name=value dalla query string e risponde 400 a un valore non valido, invece di restituire un report difettoso.

La finestra dei parametri con una data obbligatoria, un paese scelto da un elenco letto dai dati e un totale minimo
La richiesta, con l'elenco dei paesi letto dai dati
Il report degli ordini filtrato per la data, il paese e il totale minimo scelti
Il report, filtrato dai valori

In una definizione JSON i parametri si trovano accanto alle pagine:

"parameters": [
  { "name": "FromDate", "dataType": "rpdtDate", "required": true,
    "defaultExpression": "EncodeDate(2026, 1, 1)" },
  { "name": "MinTotal", "dataType": "rpdtFloat", "defaultValue": "0" }
]

Un servizio che prepara il report senza un utente imposta i valori nel codice, e non viene mostrata alcuna richiesta:

  oEngine.Report := oReport;
  oEngine.SetParameterValue('FromDate', VarFromDateTime(EncodeDate(2026, 3, 1)));
  oEngine.SetParameterValue('MinTotal', 100.0);

Un vero elemento tabella

Allineare a mano elementi di testo per simulare una tabella è finito. Il nuovo elemento tabella ha larghezze di colonna fisse, in percentuale e automatiche, celle che si estendono su più righe e colonne, righe di intestazione che si ripetono in ogni pagina, righe di dati che provengono da una propria origine dati, righe a piè di tabella con i totali e righe che crescono con il contenuto. Le celle supportano stili, Highlights e collegamenti ipertestuali.

Celle unite e una riga di intestazione che segue la tabella in ogni pagina.
Una tabella di confronto dei piani con celle unite e una tabella di prodotti con i valori di scorta bassi in rosso
Celle unite e una colonna di scorta evidenziata
L'editor di tabelle del designer di report con le righe, le colonne e i comandi di unione e divisione
L'editor di tabelle nel designer

Le esportazioni mantengono la struttura. Una tabella diventa una tabella con tag in un PDF accessibile, con celle di intestazione, il loro ambito e le estensioni, così uno screen reader la legge come una tabella. Diventa una tabella HTML, una tabella Word con le righe di intestazione ripetute e celle unite in XLSX. Nel codice, il builder fluente la scrive in poche righe:

  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;

Caselle di controllo, SVG, sparkline e gauge

Quattro novità da disegnare su una pagina:

Segni di spunta, sparkline e gauge, dentro le righe del report.
Un report sullo stato dei progetti con un logo SVG, una casella di controllo, una sparkline e un gauge di avanzamento in ogni riga e un gauge dell'avanzamento medio
Un report sullo stato dei progetti: un logo SVG, una casella di controllo, una sparkline di 12 mesi e un gauge di avanzamento per progetto, e un gauge radiale con la media.

Le impostazioni degli elementi personalizzati ora accettano espressioni, valutate per ogni banda stampata, ed è così che ogni riga disegna la propria sparkline e il proprio 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');

Modelli di report ed ereditarietà

Ogni azienda ha una carta intestata, e ogni fattura, estratto conto e documento di trasporto la ripete. Con la nuova proprietà InheritsFrom, "inheritsFrom" nel JSON, una definizione di report parte da una definizione di base e memorizza solo le proprie differenze. Pagine, bande, elementi e stili vengono uniti per nome. Un report figlio può sovrascrivere una proprietà, aggiungere un elemento, collocare una banda per prima con "$first" o eliminare un elemento ereditato con "$remove". Cambia il logo nel report di base e tutti i report che lo ereditano lo seguono.

Una sola carta intestata, due report che la ereditano.
Il report di base con la carta intestata
La base: letterhead.json
Una fattura che eredita la carta intestata
Una fattura la eredita
Un documento di trasporto che eredita la carta intestata e rimuove il blocco dei contatti
Anche un documento di trasporto

L'intero documento di trasporto qui sopra è fatto di poche righe di differenze. Qui rimuove il blocco dei contatti della carta intestata:

"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 viene cercata in BaseFolder, oppure il tuo gestore OnResolveBase la carica da un database o da una risorsa. Le catene arrivano fino a otto livelli, e Flat scrive la definizione unita quando serve un unico file. I designer VCL, FireMonkey e HTML contrassegnano gli oggetti ereditati, li modificano come sovrascritture e creano un nuovo report a partire da un report di base. Nel designer VCL, una proprietà sovrascritta appare in grassetto.

Il designer di report VCL con il documento di trasporto aperto, le bande ereditate contrassegnate e il titolo sovrascritto in grassetto
Le bande ereditate sono contrassegnate, e il titolo sovrascritto appare in grassetto.

Un'anteprima con ricerca, miniature e menu di esportazione

Le anteprime hanno una barra di ricerca (Ctrl+F, F3, maiuscole/minuscole e parola intera) che evidenzia ogni corrispondenza nella pagina, un pannello di miniature delle pagine e un menu Esporta per PDF, XLSX, CSV, PNG, HTML e Word, con un evento OnExport per gestire in proprio il salvataggio. È disponibile nelle anteprime VCL e FireMonkey e nelle anteprime WinForms, WPF e Avalonia, e anche il visualizzatore PDF FireMonkey ottiene la ricerca del testo.

Cerca, salta ed esporta, dall'anteprima che i tuoi utenti hanno già.
La barra di ricerca dell'anteprima con la corrispondenza corrente in arancione e le altre in giallo
Ricerca, con ogni corrispondenza evidenziata
L'anteprima con il pannello delle miniature delle pagine aperto
Miniature delle pagine
  oPreview.ShowThumbnails := True;
  oPreview.ExportFormats := [rpxPDF, rpxXLSX];
  if oPreview.SearchText('Total', False, True) then
    Writeln(oPreview.SearchResults, ' match(es)');

Parte 2 · Colma le lacune

Imposta la nuova espressione Bookmark su una banda o su un elemento, e l'esportazione PDF scrive i segnalibri come indice del documento, annidati per gruppo, mentre le anteprime VCL e FireMonkey li mostrano in un pannello di struttura (ShowOutline). La nuova proprietà Hyperlink apre un indirizzo web o mailto, oppure salta a un'Anchor nello stesso report con #name, e i collegamenti vengono mantenuti nelle esportazioni PDF, HTML, Word e XLSX.

Il pannello di struttura dell'anteprima con regioni e clienti dai segnalibri dei gruppi
Una struttura costruita da due livelli di gruppo
Una pagina di report con collegamenti che saltano a ciascuna regione e un collegamento a una pagina web
Collegamenti a una pagina web e ad ancore

PDF per fatture elettroniche: Factur-X, ZUGFeRD e XRechnung

L'esportazione PDF incorpora l'XML della fattura elettronica della tua applicazione come file associato PDF/A-3 tramite la nuova proprietà EInvoice, per Factur-X, ZUGFeRD e XRechnung, anche come PDF/A-3a con PDF/UA. La fattura che leggono le persone e i dati che leggono le macchine viaggiano in un unico file. sgcReports non scrive l'XML da sé: lo fornisce la tua applicazione.

L'XML va dentro la fattura PDF/A-3.
La demo ReportEInvoice con i pulsanti per Factur-X e ZUGFeRD, Verifactu per la Spagna e KSeF per la Polonia
La demo ReportEInvoice: una fattura Factur-X salvata come PDF/A-3 e modelli con codice QR per Verifactu (Spagna) e KSeF (Polonia).

Una libreria di espressioni con 68 funzioni e 10 aggregati

La libreria di espressioni cresce fino a 68 funzioni e 10 aggregati. Sono nuovi l'aritmetica delle date, il riempimento e la formattazione, Choose, ToWords per scrivere un importo in lettere nelle 12 lingue di sgcUI, e gli aggregati SumIf, CountIf, Previous, RunningSum e RunningCount. Un aggregato segue la banda in cui viene stampato: un piè di gruppo dà il totale del gruppo, un piè di pagina il totale della pagina.

Una pagina di report che usa PadLeft, Upper, Proper, ToWords, RunningSum e IIF
PadLeft, Upper, Proper, ToWords e una colonna RunningSum in una pagina del report.

Highlights: stili condizionali senza script

Gli Highlights associano a un elemento un elenco di condizioni e stili. La prima condizione vera sostituisce lo stile dell'elemento, così i totali negativi si stampano in rosso e i buoni risultati in verde senza una riga di script. Sono presenti nel JSON, nel builder fluente e nei designer VCL, FireMonkey e HTML.

Risultati per filiale con i valori negativi in rosso e i risultati superiori a 5000 in verde
Negativi in rosso, mesi buoni in verde
L'editor degli Highlights del designer di report con due condizioni e i relativi stili
L'editor degli Highlights

Avanzamento e annullamento per i report grandi

Il motore ha un nuovo evento OnProgress con i conteggi di pagine e record e un metodo Cancel. Le anteprime mostrano l'avanzamento mentre un report viene preparato, con un pulsante Annulla che si preme anche con Esc, e l'endpoint HTTP ha i nuovi limiti MaxPages e Timeout, così un solo report fuori controllo non può bloccare un server.

L'anteprima che prepara un report di 40.000 record con i conteggi di pagine e record e un pulsante Annulla
Preparazione di 40.000 record: i conteggi di pagine e record e un pulsante Annulla.

Ogni piattaforma, la stessa API

Ogni funzionalità di questa pagina è disponibile per Delphi e C++ Builder, con le anteprime e i designer VCL e FireMonkey, e per .NET con WinForms, WPF e Avalonia, con gli stessi nomi di classi e proprietà. I report definiti in JSON passano da un mondo all'altro senza modifiche, e il motore continua a funzionare senza interfaccia nei servizi e nei daemon Linux64.

La demo ReportTables in esecuzione in .NET WinForms
La demo ReportTables in .NET WinForms.

Con questa versione arrivano cinque nuove demo, per Delphi, C++ Builder e .NET: ReportImport, ReportParameters, ReportTables, ReportVisualItems e ReportInheritance, accanto alla demo ReportEInvoice.

Altre novità di sgcReports 2026.11

L'importatore di report e gli elementi sparkline e gauge richiedono un'edizione registrata. sgcReports è incluso in sgcUI Enterprise e in All-Access, ed è venduto anche separatamente.

Prova sgcReports 2026.11

Importa uno dei tuoi file di FastReport, QuickReport o ReportBuilder e scopri cosa viene trasferito.

Domande o commenti? Contattaci, riceverai una risposta da chi ha scritto il codice.