📄 arstatementsreport.pas
字号:
unit ARStatementsReport;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBTables, DB, quickrpt, Qrctrls, qrprntr;
type
TrptARStatements = class(TForm)
QuickReport: TQuickRep;
Detail: TQRBand;
txtInvoiceNo: TQRDBText;
qryARInv: TQuery;
qryARInvInvoiceNo: TStringField;
qryARInvInvoiceDate: TDateField;
qryARInvInvoiceAmount: TCurrencyField;
qryARInvOwing: TCurrencyField;
qryARInvBillToNo: TStringField;
qryARInvBillToName: TStringField;
txtInvoiceDate: TQRDBText;
txtInvoiceAmount: TQRDBText;
txtOwing: TQRDBText;
Customer: TQRGroup;
CustomerFooter: TQRBand;
QRShape4: TQRShape;
QRLabel12: TQRLabel;
qryARInvSummary: TQuery;
qryARInvSummaryBilltoID: TIntegerField;
qryARInvSummarySUMOFOwing: TCurrencyField;
qryARInvSummaryMINOFInvoiceDate: TDateField;
qryARInvBillToID: TIntegerField;
qryARInvDescription: TStringField;
txtDescription: TQRDBText;
CustomerHeaderOverflow: TQRBand;
lblPageNumber: TQRLabel;
qryARInvDueDate: TDateField;
qryARInvNetDays: TSmallintField;
txtDueDate: TQRDBText;
qryARInvCustomerMessage: TMemoField;
txtCustomerMessage: TQRDBText;
qryARInvCurrencyID: TIntegerField;
qryARInvCurrencyName: TStringField;
txtCurrencyName: TQRDBText;
qryARInvBAddressLine1: TStringField;
qryARInvBAddressLine2: TStringField;
qryARInvBCity: TStringField;
qryARInvBStateProv: TStringField;
qryARInvBZipCode: TStringField;
qryARInvBCountry: TStringField;
qryARInvBCityStateZip: TStringField;
lblHCompanyName: TQRLabel;
lblHCompanyAddressLine1: TQRLabel;
lblHCompanyAddressLine2: TQRLabel;
lblHCompanyAddressLine3: TQRLabel;
lblHAsOf: TQRLabel;
lblHStatement: TQRLabel;
lblHBillTo: TQRLabel;
txtHBillToNo: TQRDBText;
txtHBillToName: TQRDBText;
txtHBAddressLine1: TQRDBText;
txtHBAddressLine2: TQRDBText;
txtHBCityStateZip: TQRDBText;
txtHBCountry: TQRDBText;
QRShape3: TQRShape;
QRShape5: TQRShape;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel9: TQRLabel;
QRLabel10: TQRLabel;
QRLabel11: TQRLabel;
QRLabel13: TQRLabel;
totBOwing: TQRExpr;
lblCompanyName: TQRLabel;
lblCompanyAddressLine1: TQRLabel;
lblCompanyAddressLine2: TQRLabel;
lblCompanyAddressLine3: TQRLabel;
lblBillTo: TQRLabel;
txtBillToNo: TQRDBText;
txtBillToName: TQRDBText;
txtBAddressLine1: TQRDBText;
txtBAddressLine2: TQRDBText;
txtBCityStateZip: TQRDBText;
txtBCountry: TQRDBText;
lblStatement: TQRLabel;
lblAsOf: TQRLabel;
QRShape1: TQRShape;
QRShape2: TQRShape;
QRLabel1: TQRLabel;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRLabel3: TQRLabel;
QRLabel6: TQRLabel;
QRLabel2: TQRLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure qryARInvCalcFields(DataSet: TDataSet);
procedure CustomerBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure CustomerFooterAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
procedure CustomerFooterBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure CustomerHeaderOverflowBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure DetailBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure DetailAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
procedure QuickReportPreview(Sender: TObject);
procedure QuickReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
rptARStatements: TrptARStatements;
implementation
uses BS1Form, ARReportsForm, LookUpsData, PreviewForm;
var
CustomerTotalOwing: currency;
CustomerMaxDaysOld: integer;
PageNumber: integer;
InvoicesPrinted: boolean;
intStatementsPrinted: integer;
{$R *.DFM}
procedure TrptARStatements.FormCreate(Sender: TObject);
begin
qryARInv.DatabaseName := strDatabaseName;
qryARInvSummary.DatabaseName := strDatabaseName;
dmLookUps.tblCurrency.DatabaseName := strDatabaseName;
dmLookUps.tblCurrency.Active := true;
//qryARInv.Active := true;
lblCompanyName.caption := frmBS1.tblCompanyCompanyName.value;
lblCompanyAddressLine1.caption := frmBS1.tblCompanyAddressLine1.value;
lblCompanyAddressLine2.caption := frmBS1.tblCompanyAddressLine2.value;
lblCompanyAddressLine3.caption := frmBS1.tblCompanyAddressLine3.value;
lblHCompanyName.caption := lblCompanyName.caption;
lblHCompanyAddressLine1.caption := lblCompanyAddressLine1.caption;
lblHCompanyAddressLine2.caption := lblCompanyAddressLine2.caption;
lblHCompanyAddressLine3.caption := lblCompanyAddressLine3.caption;
end;
procedure TrptARStatements.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TrptARStatements.qryARInvCalcFields(DataSet: TDataSet);
begin
qryARInvDueDate.value := qryARInvInvoiceDate.value + qryARInvNetDays.value;
qryARInvBCityStateZip.value := qryARInvBCity.value;
if qryARInvBStateProv.value <> '' then qryARInvBCityStateZip.value := qryARInvBCityStateZip.value + ', ' + qryARInvBStateProv.value;
if qryARInvBZipCode.value <> '' then qryARInvBCityStateZip.value := qryARInvBCityStateZip.value + ' ' + qryARInvBZipCode.value;
end;
procedure TrptARStatements.CustomerBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var
LookupResults: variant;
begin
if (frmARReports.MinOwing >0) or (frmARReports.MinDays >0) then begin
qryARInvSummary.open;
LookupResults := qryARInvSummary.Lookup('BilltoID', qryARInvBilltoID.value, 'SUM OF Owing;MIN OF InvoiceDate');
CustomerTotalOwing := LookupResults[0];
CustomerMaxDaysOld := frmARReports.AsOfDate1 - LookupResults[1];
end;
PrintBand := true;
if (frmARReports.MinOwing >0) and (CustomerTotalOwing < frmARReports.MinOwing) then PrintBand := false;
if (frmARReports.MinDays >0) and (CustomerMaxDaysOld < frmARReports.MinDays) then PrintBand := false;
if qryARInvBillToID.AsVariant = null then PrintBand := false; //Suppress headings if no detail.
if PrintBand = true then begin
if intStatementsPrinted >0 then QuickReport.NewPage; //Force new page for each new invoice after the 1st one. Delphi 4 (QR 3.0) gives Access Violation if you use ForceNewPage property of band.
inc(intStatementsPrinted);
end;
PageNumber := 1;
if qryARInvBAddressLine2.value = '' then begin
txtBCityStateZip.top := 216;
txtHBCityStateZip.top := 216;
txtBCountry.top := 233;
txtHBCountry.top := 233;
end else begin
txtBCityStateZip.top := 233;
txtHBCityStateZip.top := 233;
txtBCountry.top := 250;
txtHBCountry.top := 250;
end;
end;
procedure TrptARStatements.CustomerFooterAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
InvoicesPrinted := False;
if BandPrinted = false then totBOwing.Reset;
end;
procedure TrptARStatements.CustomerFooterBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
PrintBand := true;
if (frmARReports.MinOwing >0) and (CustomerTotalOwing < frmARReports.MinOwing) then PrintBand := false;
if (frmARReports.MinDays >0) and (CustomerMaxDaysOld < frmARReports.MinDays) then PrintBand := false;
if qryARInvBillToID.AsVariant = null then PrintBand := false; //Suppress totals if no detail.
end;
procedure TrptARStatements.CustomerHeaderOverflowBeforePrint(
Sender: TQRCustomBand; var PrintBand: Boolean);
begin
if InvoicesPrinted = True then PrintBand := true //Only print header on page overflow.
else PrintBand := false;
PageNumber := PageNumber + 1;
lblPageNumber.caption := 'Page ' + IntToStr(PageNumber);
end;
procedure TrptARStatements.DetailBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
PrintBand := true;
if (frmARReports.MinOwing >0) and (CustomerTotalOwing < frmARReports.MinOwing) then PrintBand := false;
if (frmARReports.MinDays >0) and (CustomerMaxDaysOld < frmARReports.MinDays) then PrintBand := false;
end;
procedure TrptARStatements.DetailAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
if BandPrinted = true then InvoicesPrinted := True;
end;
procedure TrptARStatements.QuickReportPreview(Sender: TObject);
begin
frmPreview := TfrmPreview.Create(Application);
frmPreview.QRPreview1.QRPrinter := TQRPrinter(sender);
frmPreview.QuickReport := QuickReport; //Set dummy quickreport so as to be able to apply selected printer and from/to page.
frmPreview.show;
end;
procedure TrptARStatements.QuickReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
intStatementsPrinted := 0;
InvoicesPrinted := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -