レポートはそのまま。
レポートエンジンだけを変える。
sgcReportsは、FastReport、QuickReport、ReportBuilderのレポートをインポートできるようになりました。さらに、導入を検討する方が最初に確認する機能として、パラメータ、本格的なテーブル、レポートテンプレート、検索できるプレビュー、電子インボイスを追加しています。1回のリリースで12の新機能です。
- VCL
- FireMonkey
- C++ Builder
- WinForms
- WPF
- Avalonia
12の新機能を4分以内で紹介します。YouTubeでも公開中。
レポートエンジンを乗り換えたいと思いながら、実行に移せないチームは少なくありません。理由はひとつ、誰も描き直したくない既存レポートが何百もあるからです。sgcReports 2026.11はその理由を取り除きます。FastReport、QuickReport、ReportBuilderのファイルを読み込んで変換し、乗り換えの前にチームが確認する不足点も埋めました。レポートパラメータ、本格的なテーブルアイテム、継承できるレポートテンプレート、検索とサムネイルを備えたプレビュー、電子インボイス向けのPDF出力です。
以下の機能はすべて、DelphiとC++ Builder(VCLとFireMonkey)、そして.NET(WinForms、WPF、Avalonia)で同じように動作します。このページのコードサンプルはすべて、2026.11のソースに対してコンパイルし、実行して確認しています。
- 01レポートインポーターFastReport、QuickReport、ReportBuilderのファイルを変換します。
- 02レポートパラメータ型付きの値をプレビューが入力として求めます。HTTPにも対応。
- 03テーブルアイテムセル結合、繰り返しのヘッダー行、合計行。
- 04新しいアイテムチェックボックス、SVG、スパークライン、ゲージ。
- 05テンプレートと継承すべてのレポートで共通のレターヘッド。
- 06進化したプレビュー検索、サムネイル、エクスポートメニュー。
- 07しおりとリンクPDFのアウトライン、ハイパーリンク、アンカー。
- 08電子インボイスPDFPDF/A-3のFactur-X、ZUGFeRD、XRechnung。
- 09式ライブラリ68の関数と10の集計関数。
- 10ハイライトスクリプトなしの条件付きスタイル。
- 11進捗表示とキャンセル大きなレポートに。画面でもサーバーでも。
- 12すべてのプラットフォームDelphiでも.NETでも同じAPI。
パート1 · 乗り換えのコストをなくす
FastReport、QuickReport、ReportBuilderのレポートをインポート
新しいTsgcReportImporterは、FastReportの.fr3ファイル、QuickReportのフォーム(TQuickRepを含む.dfm)、ReportBuilderの.rtmテンプレートを、テキスト形式でもバイナリ形式でも読み込み、sgcReportsのレポート定義に変換します。ページ、バンド、アイテム、スタイル、データソースが引き継がれ、式はsgcReportsの構文に変換されます。QuickReportとReportBuilderのチェックボックスは、新しいチェックボックスアイテムになります。
実際のプロジェクトで安心して使えるのは、結果のもう半分があるからです。インポーターは、対応付けできなかったオブジェクト、プロパティ、式、スクリプト、データソースをすべて、レポート内のパスと理由つきで一覧にします。手作業で仕上げるべき箇所が正確に分かり、黙って捨てられるものはありません。
デザイナーにはインポートコマンドがあるため、コードを書かずにレポートを取り込み、プレビューで確認し、JSONとして保存できます。コードから使う場合は、4行とクリーンアップだけです。
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;
C#でも同じです。
var oImporter = new TsgcReportImporter();
oImporter.ImportFromFile(oReport, "fr_items.fr3");
foreach (var oIssue in oImporter.ImportResult.Issues)
Console.WriteLine(oIssue.Reason);
元のレポートのスクリプト、リッチテキスト、チャート、クロスタブは変換されません。これらは問題の一覧に表示されるので、sgcReportsの同等の機能で作り直せます。新しいReportImportデモ(Delphi、C++ Builder、.NET対応)では、3つの形式すべてのサンプルファイルをインポートできます。
プレビューが入力を求めるレポートパラメータ
レポートにパラメータを宣言できるようになりました。型は、テキスト、整数、数値、日付、日付と時刻、はい・いいえです。それぞれに既定値または既定の式、必須フラグ、複数の値、固定またはデータソースから読み込む選択肢のリストを設定できます。式やスクリプトからは:Nameとして参照します。
入力用のフォームを作る必要はありません。VCLとFireMonkeyのプレビューとデザイナーは、レポートを生成する前にパラメータを尋ね、.NETのプレビューも同様です。HTMLビューアは型付きのパラメータフォームを表示し、HTTPエンドポイントはクエリ文字列の?param.Name=valueを読み取ります。値が型に合わない場合は、壊れたレポートを返さずに400を返します。
JSON定義では、パラメータはページの隣に記述します。
"parameters": [
{ "name": "FromDate", "dataType": "rpdtDate", "required": true,
"defaultExpression": "EncodeDate(2026, 1, 1)" },
{ "name": "MinTotal", "dataType": "rpdtFloat", "defaultValue": "0" }
]
ユーザーなしでレポートを生成するサービスでは、値をコードで設定します。入力画面は表示されません。
oEngine.Report := oReport;
oEngine.SetParameterValue('FromDate', VarFromDateTime(EncodeDate(2026, 3, 1)));
oEngine.SetParameterValue('MinTotal', 100.0);
本格的なテーブルアイテム
テキストアイテムを手作業で並べて表に見せかける時代は終わりです。新しいテーブルアイテムは、固定、パーセント、自動の列幅、行や列をまたぐセル、ページごとに繰り返されるヘッダー行、専用のデータソースから作られるデータ行、合計を表示するフッター行、内容に合わせて伸びる行に対応します。セルにはスタイル、ハイライト、ハイパーリンクを設定できます。
エクスポートでも構造は保たれます。アクセシブルなPDFではタグ付きテーブルとなり、ヘッダーセルのスコープとスパンも含まれるため、スクリーンリーダーは表として読み上げます。HTMLではHTMLテーブル、Wordではヘッダー行が繰り返されるWordの表、XLSXでは結合セルになります。コードでは、フルーエントビルダーで数行で記述できます。
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;
チェックボックス、SVG、スパークライン、ゲージ
ページに描画できるものが4つ増えました。
- チェックボックスアイテム。ブール式でチェック状態が決まり、マークはチェック、バツ、四角から選べます。PDFではベクターのまま出力され、XLSXとCSVではTRUEまたはFALSEの値になります。
- SVG画像。画像アイテムで使え、PDFではベクターグラフィックス、HTMLではSVG、Wordでは鮮明な画像として出力されるため、ロゴは拡大しても鮮明なままです。
- スパークラインアイテム。sgcChartsで描画され、折れ線、面、縦棒、勝敗から選べます。行ごとにひとつ表示できます。
- ゲージアイテム。sgcGaugesで描画され、色付きの範囲を持つ円形またはリニア形式です。新しいsgcReportsGaugesブリッジを介して利用します。
カスタムアイテムの設定には式を使えるようになり、印刷されるバンドごとに評価されます。これにより、各行が自分専用のスパークラインとゲージを描画できます。
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');
レポートテンプレートと継承
どの会社にもレターヘッドがあり、請求書、明細書、納品書のすべてで繰り返されます。新しいInheritsFromプロパティ(JSONでは"inheritsFrom")を使うと、レポート定義はベースとなる定義から出発し、差分だけを保存します。ページ、バンド、アイテム、スタイルは名前で統合されます。子のレポートはプロパティを上書きしたり、アイテムを追加したり、"$first"でバンドを先頭に置いたり、"$remove"で継承したアイテムを取り除いたりできます。ベースレポートのロゴを変えれば、それを継承するすべてのレポートに反映されます。
上の納品書は、数行の差分だけで成り立っています。ここでは、レターヘッドの連絡先ブロックを取り除いています。
"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');
ベースはBaseFolderの下から探されます。OnResolveBaseハンドラを使えば、データベースやリソースから読み込むこともできます。継承の連鎖は8階層まで可能で、ひとつのファイルが必要なときはFlatで統合した定義を書き出せます。VCL、FireMonkey、HTMLの各デザイナーは、継承されたオブジェクトに印を付け、上書きとして編集でき、ベースレポートから新しいレポートを作成できます。VCLデザイナーでは、上書きされたプロパティが太字で表示されます。
検索、サムネイル、エクスポートメニューを備えたプレビュー
プレビューには、ページ上の一致箇所をすべて強調表示する検索バー(Ctrl+F、F3、大文字と小文字の区別、単語単位)、ページサムネイルのペイン、PDF、XLSX、CSV、PNG、HTML、Wordに出力するエクスポートメニューが加わりました。保存処理を自分で行うためのOnExportイベントもあります。VCLとFireMonkeyのプレビュー、WinForms、WPF、Avaloniaのプレビューで利用でき、FireMonkeyのPDFビューアもテキスト検索に対応します。
oPreview.ShowThumbnails := True;
oPreview.ExportFormats := [rpxPDF, rpxXLSX];
if oPreview.SearchText('Total', False, True) then
Writeln(oPreview.SearchResults, ' match(es)');
パート2 · 不足を埋める
PDFのしおり、ハイパーリンク、アンカー
バンドまたはアイテムに新しいBookmark式を設定すると、PDFエクスポートはしおりをグループごとに入れ子にしたドキュメントのアウトラインとして書き出します。VCLとFireMonkeyのプレビューでは、アウトラインのペイン(ShowOutline)に表示されます。新しいHyperlinkプロパティは、Webやmailtoのアドレスを開いたり、#nameの形式で同じレポート内のAnchorへジャンプしたりします。リンクはPDF、HTML、Word、XLSXのエクスポートでも保持されます。
電子インボイスPDF: Factur-X、ZUGFeRD、XRechnung
PDFエクスポートは、新しいEInvoiceプロパティを通じて、アプリケーションが用意した電子インボイスのXMLを、PDF/A-3の関連ファイルとして埋め込みます。対応するのはFactur-X、ZUGFeRD、XRechnungで、PDF/UAを伴うPDF/A-3aにも対応します。人が読むインボイスと、機械が読むデータが、ひとつのファイルで届きます。sgcReports自体はXMLを生成しません。XMLはアプリケーション側で用意します。
68の関数と10の集計関数を備えた式ライブラリ
式ライブラリは、68の関数と10の集計関数に拡張されました。新たに、日付の計算、パディングと書式設定、Choose、金額を文章で表すToWords(sgcUIの12言語に対応)、そして集計関数のSumIf、CountIf、Previous、RunningSum、RunningCountが加わります。集計関数は、それが印刷されるバンドに従います。グループフッターではグループの合計、ページフッターではページの合計になります。
ハイライト: スクリプトなしの条件付きスタイル
ハイライトは、条件とスタイルのリストをアイテムに設定する機能です。最初に真になった条件が、アイテムのスタイルを置き換えます。そのため、スクリプトを1行も書かずに、マイナスの合計を赤、良い結果を緑で印刷できます。ハイライトはJSON、フルーエントビルダー、VCL、FireMonkey、HTMLの各デザイナーで利用できます。
大きなレポートの進捗表示とキャンセル
エンジンに、ページ数とレコード数を渡す新しいOnProgressイベントと、Cancelメソッドが加わりました。プレビューはレポートの生成中に進捗を表示し、Escでも押せるキャンセルボタンを備えます。HTTPエンドポイントには新しいMaxPagesとTimeoutの制限があり、暴走した1つのレポートがサーバーを占有することを防ぎます。
すべてのプラットフォームで同じAPI
このページの機能はすべて、DelphiとC++ Builder(VCLとFireMonkeyのプレビューとデザイナー)、そして.NET(WinForms、WPF、Avalonia)向けに提供され、クラス名とプロパティ名も共通です。JSONで定義したレポートは、2つの世界の間をそのまま移動でき、エンジンはこれまでどおり、サービスやLinux64のデーモンでヘッドレスに動作します。
このリリースには、Delphi、C++ Builder、.NET向けの新しいデモが5つ付属します。ReportImport、ReportParameters、ReportTables、ReportVisualItems、ReportInheritanceです。ReportEInvoiceデモもあわせてご覧ください。
sgcReports 2026.11のその他の新機能
- VCLとFireMonkey向けのネイティブなレポートデザイナー。ツールボックス、アウトライン、インスペクタ、ルーラー、ガイド、スナップ、元に戻す・やり直し、キーボード編集、スクリーンリーダー対応を備えています。
- Pascalのサブセットによるスクリプト。VCLとFireMonkeyのデザイナーで編集と検証ができます。
- DOCXエクスポート(固定モードとフローモード)とHTMLエクスポート(ページ分割と連続)。HTTPルートからも利用できます。
- カスタムアイテム、ネイティブのクロスタブ、そしてsgcReportsChartsとsgcReportsPivotGridのブリッジを介したチャートとピボットグリッドのアイテム。
- 透かし、そしてmacOS、iOS、Androidで動作するFireMonkeyのプレビュー。
レポートインポーター、スパークラインとゲージのアイテムには、登録版が必要です。sgcReportsはsgcUI EnterpriseとAll-Accessに含まれており、単体でも販売しています。
sgcReports 2026.11を試す
お手持ちのFastReport、QuickReport、ReportBuilderのファイルをひとつインポートして、何が引き継がれるかを確認してください。
ご質問やご意見はありますか?お問い合わせください。コードを書いた開発者本人からお返事いたします。
