QuickReport에서 sgcReports로 마이그레이션

sgcReports는 sgcUI의 밴드 리포트 엔진입니다. TsgcReport는 레이아웃을 담고, TsgcReportEngine는 데이터를 바인딩하며, TsgcReportPreviewVCL는 페이지를 표시하고, PDF 내보내기는 태그된 PDF/UA를 작성합니다. 이 키트는 사용 중인 QuickReport 밴드와 컨트롤을 sgcReports의 대응 항목에 매핑하고, 컴파일된 데모의 코드를 보여 주며, 대응되지 않는 부분도 솔직하게 정리합니다.

QuickReport로 만든 Delphi VCL 리포트

폼의 TQuickRep, 밴드, 밴드 위의 QR 컨트롤, 그리고 애플리케이션의 미리 보기, 인쇄 또는 PDF 버튼.

QuickReport는 다시 유지 관리되고 있습니다. "QuickReport is back"(Embarcadero 블로그, Ian Barker, 2024년 11월 14일)에서 Embarcadero는 수석 개발자가 세상을 떠나면서 제품이 위기를 맞았고, Embarcadero 파트너인 Barnsten과 함께 되살렸으며, 이제 Delphi 7부터 Delphi와 C++Builder가 포함된 모든 RAD Studio 버전을 지원한다고 설명합니다. Barnsten QuickReport 페이지(2026-10-20 확인)에는 TrueType 글꼴이 포함된 PDF 필터, PDF/A 지원, HTML, XML/XSLT, XLS, XLSX 내보내기 필터가 나열되어 있고, QuickReport Pro 5개발자 라이선스는 부가세 별도 EUR 2.155,00입니다. 따라서 이 페이지는 사라진 제품이나 없는 PDF 버튼에 관한 것이 아닙니다. 그 기능 목록에 언급되지 않은 것을 원하는 팀을 위한 페이지입니다.

sgcReports가 더하는 것

아래의 모든 sgcReports 관련 설명은 배포되는 소스에 있습니다. QuickReport 쪽에서 "not listed"는 벤더 페이지에 언급이 없다는 뜻이지, 지원하지 않는다는 뜻이 아닙니다.

접근성을 갖춘 PDF/UA

TsgcReportPDFExport는 기본적으로 태그된 PDF/UA를 작성합니다(PDFUA는 True이며 PDFUAPart로 파트 1 또는 2를 선택합니다). 읽기 순서, 항목 TagRole의 제목 역할, AltText의 대체 텍스트, 문서의 Language 및 Title이 포함됩니다. PDFA는 보관용으로 PDF/A-3b, PDF/A-3a 또는 PDF/A-4를 추가합니다. Community를 포함한 모든 에디션에 들어 있습니다. PDF/UA와 태그된 PDF는 Barnsten 기능 페이지에 나열되어 있지 않습니다. 전자책, 전자상거래, 은행 서비스 같은 제품과 서비스를 대상으로 하는 유럽 접근성법(European Accessibility Act), 지침(EU) 2019/882 이후 접근 가능한 문서는 더욱 중요해졌습니다.

최종 사용자 디자이너, VCL 및 FireMonkey

사용자가 새로 빌드하지 않고도 리포트를 변경할 수 있습니다. sgcShowReportDesigner(Engine)는 VCL 디자이너를 열고, TsgcVCLReportDesigner 패널을 임베드할 수도 있습니다. sgcShowReportDesignerFMX(Engine)는 FireMonkey에서 같은 일을 합니다(Delphi XE6 이상, 데스크톱). VCL 디자이너는 폼의 DPI 변경을 따릅니다(인스펙터, 아이콘, 디자인 화면이 ChangeScale에서 다시 조정됩니다). Registered 에디션 전용입니다. Barnsten 기능 페이지에는 최종 사용자 디자이너가 나열되어 있지 않으며, 예전에는 QRDesign이라는 별도의 서드파티 제품이었습니다. 고해상도 DPI와 관련해서는 2022년 4월 4일의 Delphi-PRAXiS 답글에서 QuickReport 6은 Delphi 11.1로 빌드되지만 High-DPI를 지원하지 않는다고 했으므로, 현재 릴리스는 벤더에 확인하세요.

스위트를 위한 하나의 엔진

크로스탭, 바코드, 서브리포트, 리치 텍스트는 같은 밴드 엔진의 항목 종류입니다. 브리지 유닛을 사용하면 리포트가 sgcCharts 차트와 sgcPivotGrid 피벗 테이블도 항목으로 인쇄하며, PDF에서는 벡터 콘텐츠로 그려집니다(Registered 에디션). 내보내기: PDF, XLSX, CSV, HTML, PNG는 모든 에디션에서, DOCX는 Registered 에디션에서 제공됩니다.

JSON 정의와 .NET 대응 제품

리포트는 JSON으로 저장하고 불러올 수 있으므로(TsgcReport.SaveToFile, LoadFromFile) 레이아웃을 데이터베이스나 버전 관리에 둘 수 있습니다. 같은 정의를 .NET용 sgcReports(NuGet esegece.sgcReports, .NET Standard 2.0, .NET Framework 4.7.2 및 .NET 6 이상)에서 불러올 수 있으므로, Delphi 리포트를 .NET 서비스에서 재사용할 수 있습니다.

리포트는 가져오는 것이 아니라 다시 만듭니다. sgcReports는 QuickReport .dfm를 열 수 없습니다. QuickReport 임포터는 없습니다. 각 리포트는 아래 데모처럼 코드로, 또는 sgcReports 디자이너(Registered 에디션)에서 다시 만듭니다. 이 페이지의 매핑과 단계를 따르면 밴드별로 기계적인 작업이 됩니다. sgcReports는 €199부터 개발자 단위로 라이선스되며 전체 소스 코드와 1년간의 업데이트가 포함되고, sgcUI에도 포함되어 있습니다.

QuickReport 클래스와 sgcReports 대응 항목

아래의 모든 sgcReports 이름은 배포되는 소스에 있으며, 데모에서 사용하는 이름은 그 안에서 컴파일됩니다. QuickReport 이름은 참고용으로 제시하며, 이 페이지를 확인할 때 QuickReport는 설치되어 있지 않았습니다.

QuickReport sgcReports 에디션
TQuickRepTsgcReport(Pages, Styles, Units, Title) 및 TsgcReportEngine(Report, AddDataSource, Prepare, Variables, OnGetVariable)전체
TQuickRep.DataSetAddDataSource로 등록되는 TsgcReportDataSetSource(SourceName, DataSet). 밴드의 DataSourceName가 이를 지정합니다전체
TQuickRep.Page(용지, 여백)TsgcReportPage.PaperSize (rpsA3, rpsA4, rpsA5, rpsLetter, rpsLegal, rpsCustom), Margins.Left, Top, Right, Bottom전체
TQuickRep.ReportTitleTsgcReport.Title, 그리고 PDF 메타데이터용 TsgcReportPDFExport.Title전체
BandType가 rbTitle, rbPageHeader, rbColumnHeader인 TQRBandBandType가 rbtReportTitle, rbtPageHeader, rbtColumnHeader인 TsgcReportBand전체
rbDetail마스터 소스로 설정된 DataSourceName가 있는 rbtMasterData전체
rbGroupHeader, rbGroupFooterrbtGroupHeader, rbtGroupFooter전체
rbSummary, rbPageFooterrbtReportSummary, rbtPageFooter전체
TQRChildBandTsgcReportBand.ChildBandName가 있는 rbtChild전체
TQRSubDetailrbtDetailData 밴드(DataSourceName = 디테일 소스)와, 디테일 TsgcReportDataSetSource의 MasterSource, MasterFields, DetailFields전체
TQRGroup.ExpressionGroupExpression가 있는 rbtGroupHeader전체
TQRGroup.ReprintOnNewPageTsgcReportBand.RepeatOnEveryPage전체
TQRGroup.FooterBand다음 rbtGroupFooter 밴드. 첫 번째 푸터가 가장 안쪽 그룹을 닫습니다전체
TQRBand.ForceNewPageTsgcReportBand.StartNewPage전체
TQRLabel (Caption)Kind = rikText이고 리터럴 Text.Text인 항목전체
TQRDBText (DataField, Mask)Text.Text = '[Source.Field]'인 rikText. Mask는 Text.DisplayFormat가 됩니다전체
TQRExpr (Expression)'[expression]'인 rikText, 예: '[Lines.Qty * Lines.Price]'. IIF, FormatFloat, FormatDateTime, Round, Upper 같은 함수를 사용할 수 있습니다전체
SUM, COUNT, AVERAGE, MIN, MAX가 있는 TQRExpr[Sum(x)], [Count()], [Avg(x)], [Min(x)], [Max(x)]. 그룹 푸터에서는 그룹마다 초기화되고, 페이지 푸터에서는 페이지 범위입니다전체
TQRSysData qrsPageNumber[Page], 그리고 "X / Y 페이지"용 [TotalPages]전체
TQRSysData qrsDate, qrsTime, qrsDetailNoText.DisplayFormat가 있는 [Date], [Time]. [Line] 또는 [RecNo]전체
TQRShape (qrsRectangle, qrsCircle, qrsRoundRect)Shape.ShapeKind가 rskRectangle, rskEllipse, rskRoundRect인 rikShape. Shape.PenColor, FillColor, PenWidth전체
TQRShape qrsHorLineHeight = 0인 rikLine전체
TQRImage, TQRDBImageImage.FileName 또는 Image.Picture, 또는 Image.DataField가 있는 rikImage. Stretch, KeepAspectRatio전체
TQRRichText, TQRDBRichTextRichText.Markup가 있는 rikRichText. RTF가 아닌 HTML 유사 마크업이며 [expressions]를 포함할 수 있습니다전체
실행 시 설정하는 Enabled, BeforePrint 이벤트밴드와 항목의 VisibleExpression. TsgcReportEngine.OnBeforePrintBand전체
Prepare, PreviewTsgcReportEngine.Prepare는 TsgcReportPreparedPages를 반환합니다. TsgcReportPreviewVCL.Prepare는 폼의 컨트롤에 이를 표시합니다전체
Print, PrinterSetup표준 TPrintDialog 이후의 TsgcReportPreviewVCL.Print(aTitle)전체
PDF 필터가 있는 ExportToFilterTsgcReportPDFExport.SaveToFile(aPages, aFileName) 또는 SaveToStream전체
PDF/ATsgcReportPDFExport.PDFA = rpaA3b, rpaA3a 또는 rpaA4전체
나열되지 않음PDF/UA: TsgcReportPDFExport.PDFUA(기본값 True), PDFUAPart, Language, Title. 항목의 TagRole 및 AltText전체
나열되지 않음(QRDesign은 서드파티 애드온이었음)최종 사용자 디자이너: sgcShowReportDesigner, TsgcVCLReportDesigner. FireMonkey에서는 sgcShowReportDesignerFMXRegistered

컴파일된 데모의 코드

각 발췌 코드는 Delphi 7과 Delphi 13(Win32 및 Win64) 및 Community 에디션에서 컴파일되는 MigrateFromQuickReport 데모에서 복사한 것입니다. 주석에는 대체하는 QuickReport 코드가 표시되어 있습니다.

TQuickRep이 리포트와 엔진으로 바뀝니다

변경 전: 폼의 TQuickRep에 리포트와 데이터가 하나의 컴포넌트에 들어 있습니다. 변경 후: 레이아웃, 엔진, 미리 보기가 별도의 컴포넌트입니다.

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과 TQRSubDetail이 데이터 소스로 바뀝니다

변경 전: 청구서용 TQuickRep.DataSet와, 줄 항목용으로 자체 DataSet가 있는 TQRSubDetail. 변경 후: 데이터셋마다 소스 하나씩이며, 디테일은 필드로 마스터에 연결됩니다. FormCreate가 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

TQRLabel, TQRDBText, TQRExpr을 대체하는 도우미

데모는 폼의 이 작은 메서드로 모든 텍스트를 추가하므로, 아래 발췌 코드가 짧게 유지됩니다.

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;

페이지 설정, 제목 밴드, TQRSysData

변경 전: TQuickRep.Page, 제목 밴드, 날짜가 있는 TQRSysData. 변경 후: TagRole가 PDF/UA 태그 트리에서 제목을 헤딩으로 표시합니다.

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, 디테일 밴드, TQRSubDetail

변경 전: 고객에 대한 TQRGroup, TQRDBText 컨트롤로 구성된 디테일 밴드, 줄 금액을 위한 TQRExpr가 있는 TQRSubDetail. 변경 후:

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';

그룹 푸터 집계

변경 전: 그룹 푸터 밴드의 COUNT, SUM가 있는 TQRExpr 컴포넌트. 변경 후:

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';

요약 밴드, TQRShape, TQRRichText

변경 전: TQRShape, 총합계, TQRRichText가 있는 요약 밴드. 변경 후: 리치 텍스트는 HTML 유사 마크업입니다.

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>.';

"X / 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');

미리 보기 및 인쇄

변경 전: QuickRep1.Preview, PrinterSetup, Print. 변경 후:

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가 TsgcReportPDFExport로 바뀝니다

변경 전: PDF 필터가 있는 ExportToFilter. 변경 후: 스위치 하나로 일반 PDF 또는 태그된 PDF/UA 파일을 작성합니다.

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;

리포트당 여덟 단계

데이터셋은 그대로 둡니다. 리포트는 밴드별로 다시 만듭니다.

1

TQuickRep 교체

일반 폼에 TsgcReport, TsgcReportEngine(Report = 리포트), TsgcReportPreviewVCL(Engine = 엔진)를 배치합니다.

2

데이터 등록

데이터셋마다 TsgcReportDataSetSource(SourceName, DataSet)를 추가하고 AddDataSource를 호출합니다. 각 TQRSubDetail에는 MasterSource, MasterFields, DetailFields를 설정합니다.

3

페이지 설정

TQuickRep.Page의 용지 크기와 여백으로 TsgcReportPage를 추가하고, 좌표를 예측할 수 있도록 TsgcReport.Units(ruPoints는 데모에서 사용)를 설정합니다.

4

밴드 다시 만들기

TQRBand마다 TsgcReportBand 하나를 리포트 순서대로 만들고, 맞는 rbt 밴드 유형을 지정합니다. 마스터 및 디테일 밴드에는 DataSourceName, 그룹 헤더에는 GroupExpression를 지정합니다.

5

컨트롤 다시 만들기

TQRLabel, TQRDBText, TQRExpr는 리터럴 텍스트와 [expressions]가 섞인 rikText 항목이 됩니다. Mask는 Text.DisplayFormat이 되고, 글꼴은 이름 있는 스타일이 됩니다.

6

식 변환

집계는 [Sum(x)], [Count()], [Avg(x)], [Min(x)], [Max(x)]가 되고, TQRSysData는 [Page], [TotalPages], [Date], [Time]가 됩니다.

7

미리 보기, 인쇄, 내보내기

Preview는 TsgcReportPreviewVCL.Prepare가 되고, Print는 Print가 되며, PDF 필터는 TsgcReportPDFExport.SaveToFile가 됩니다. 접근성 있는 PDF를 만들려면 PDFUA, Title, Language를 설정하세요.

8

사용자에게 전달

선택 사항, Registered 에디션: 다시 만든 리포트를 TsgcReport.SaveToFile로 JSON으로 저장하고, 사용자가 sgcShowReportDesigner로 편집하게 합니다.

일대일로 대응되지 않는 부분

이동을 계획하기 전에 먼저 읽어 보세요.

MigrateFromQuickReport

고객별로 그룹화된 전형적인 QuickReport 마스터 디테일 청구서 목록: 코드로 채운 두 개의 TClientDataSet에서 가져온 4개 고객의 청구서 18건과 그 줄 항목.

위치

sgcUI 설치 프로그램이 Demos\Reports\Delphi\MigrateFromQuickReport에 설치합니다. sgcReports_Demo_MigrateFromQuickReport.dpr, frmMain.pas, frmMain.dfm, readme.html가 들어 있습니다. Community 에디션에도 포함되어 있습니다.

실행 방법

sgcReports와 sgcPDF가 설치된 Delphi 7~13 중 아무 버전에서나 .dpr를 열고 Win32 또는 Win64로 빌드한 다음 실행하세요. 리포트는 시작할 때 준비되며, "X / Y 페이지"가 있는 세 페이지입니다.

시도해 볼 것

인쇄...는 인쇄 대화 상자를 표시하고 인쇄합니다. PDF 저장은 invoices.pdf를 작성하고, PDF/UA 저장은 태그된 invoices_pdfua.pdf를 실행 파일 옆에 작성하므로 PDF/UA 검증기로 바로 확인할 수 있습니다.

두 엔진을 공정하게 말씀드리면, QuickReport는 다시 유지 관리되고 있고 Delphi 7 이상을 지원하며 리포트를 Delphi 폼 디자이너에서 디자인합니다. 기능 페이지에는 sgcReports에 없는 XML/XSLT 같은 내보내기 필터가 나열되어 있고, 계속 사용하면 리포트를 다시 만들 필요가 없습니다. 접근성 있는 PDF/UA 출력, 사용자를 위한 디자이너, sgcCharts, sgcPivotGrid 또는 .NET 서비스와 공유하는 리포트가 필요하고 각 리포트를 한 번 다시 만드는 것을 받아들일 수 있다면 sgcReports가 알맞은 선택입니다. 전체 기능 목록은 sgcReports 제품 페이지를 참조하세요.

최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

오늘 첫 리포트를 다시 만들어 보세요

sgcReports와 MigrateFromQuickReport 데모가 포함된 sgcUI 체험판을 다운로드하고 첫 번째 리포트를 옮겨 보세요.