⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arinvoicesprintform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 PAS
字号:
unit ARInvoicesPrintForm;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, ComCtrls, DB, DBTables, Mask, DBCtrls, Dialogs, BDE, Printers, qrprntr;

type
  TfrmARInvoicesPrint = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
    qryARInv: TQuery;
    lblRecordCount: TLabel;
    ProgressBar1: TProgressBar;
    qryARInvInvoiceNo: TStringField;
    qryARInvInvoiceAmount: TCurrencyField;
    tblARInvDet: TTable;
    dsARInv: TDataSource;
    tblARInvDetSeq: TIntegerField;
    qryARInvCurrencyID: TIntegerField;
    tblARInv: TTable;
    tblCurrency: TTable;
    tblCurrencyCurrencyID: TAutoIncField;
    qryARInvARInvoiceID: TIntegerField;
    qryARInvBillToID: TIntegerField;
    tblARInvARInvoiceID: TIntegerField;
    tblARInvDetARInvoiceID: TIntegerField;
    tblARInvDetQuantity: TFloatField;
    tblARInvDetItemNo: TStringField;
    tblARInvDetUnitPrice: TCurrencyField;
    tblARInvDetExtAmount: TCurrencyField;
    tblItem: TTable;
    tblItemItemNo: TStringField;
    qryARInvTax1Code: TStringField;
    qryARInvTax2Code: TStringField;
    qryARInvTax1Rate: TFloatField;
    qryARInvTax2Rate: TFloatField;
    qryARInvTaxableAmount1: TCurrencyField;
    qryARInvTaxableAmount2: TCurrencyField;
    qryARInvTaxableAmount3: TCurrencyField;
    qryARInvTaxableAmtCode1: TStringField;
    qryARInvTaxableAmtCode2: TStringField;
    qryARInvTaxableAmtCode3: TStringField;
    tblARInvPrinted: TBooleanField;
    tblCurrencyCurrencyName: TStringField;
    qryARInvCurrencyName: TStringField;
    tblItemItemDescription: TStringField;
    tblARInvDetItemDescription: TStringField;
    tblARInvDetTaxCodes: TStringField;
    qryARInvTax1Description: TStringField;
    qryARInvTax2Description: TStringField;
    qryARInvCustomerID: TIntegerField;
    qryARInvOriginalInvNo: TStringField;
    qryARInvDescription: TStringField;
    qryARInvInvoiceDate: TDateField;
    qryARInvDiscPC: TFloatField;
    qryARInvDiscDays: TSmallintField;
    qryARInvNetDays: TSmallintField;
    qryARInvCOD: TBooleanField;
    qryARInvPurchaseOrderNo: TStringField;
    qryARInvTerms: TStringField;
    qryARInvBillToNo: TStringField;
    qryARInvBillToName: TStringField;
    qryARInvBAddressLine1: TStringField;
    qryARInvBAddressLine2: TStringField;
    qryARInvBCity: TStringField;
    qryARInvBStateProv: TStringField;
    qryARInvBZipCode: TStringField;
    qryARInvBCountry: TStringField;
    qryARInvCustomerNo: TStringField;
    qryARInvCustomerName: TStringField;
    qryARInvAddressLine1: TStringField;
    qryARInvAddressLine2: TStringField;
    qryARInvCity: TStringField;
    qryARInvStateProv: TStringField;
    qryARInvZipCode: TStringField;
    qryARInvCountry: TStringField;
    qryARInvTax1Amount: TCurrencyField;
    qryARInvTax2Amount: TCurrencyField;
    dsARInvDet: TDataSource;
    qryARInvSubtotal: TCurrencyField;
    qryARInvCustomerMessage: TMemoField;
    qryARInvTax1ID: TIntegerField;
    qryARInvTax2ID: TIntegerField;
    tblARInvDetApplicableTaxCodes: TStringField;
    qryARInvCityStateZip: TStringField;
    qryARInvBCityStateZip: TStringField;
    qryARInvTax1DescriptionRate: TStringField;
    qryARInvTax2DescriptionRate: TStringField;
    PrintDialog1: TPrintDialog;
    tblARInvDetItemOvDesc: TStringField;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure tblARInvDetCalcFields(DataSet: TDataSet);
    procedure qryARInvCalcFields(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OpenQuery;
  end;

var
  frmARInvoicesPrint: TfrmARInvoicesPrint;

implementation

uses BS1Form, ARInvoiceReport;

var
  RecordCount: integer;

{$R *.DFM}

procedure TfrmARInvoicesPrint.OpenQuery;
begin
  qryARInv.Active := true;
  RecordCount := qryARInv.RecordCount;
  lblRecordCount.caption := IntToStr(RecordCount) + ' invoice(s) to be printed';
end;

procedure TfrmARInvoicesPrint.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmARInvoicesPrint.FormCreate(Sender: TObject);
begin
  qryARInv.DatabaseName := strDatabaseName;
  tblARInv.DatabaseName := strDatabaseName;
  tblCurrency.DatabaseName := strDatabaseName;
  tblARInvDet.DatabaseName := strDatabaseName;
  tblItem.DatabaseName := strDatabaseName;

  if qryARInv.SQL[6] = 'WHERE I.Printed = false' then OpenQuery;   //If batch (not single): open regular batch query. Single version sets SQL[6] to point to selected invoice, then calls OpenQuery.
end;

procedure TfrmARInvoicesPrint.btnOKClick(Sender: TObject);
var
  aComponent: TComponent;
  x: integer;
begin
  ModalResult := mrCancel;   //Set to mrCancel to prevent subsequent requery in case job can't be started.
  if RecordCount = 0 then exit;
  aComponent := Application.FindComponent('frmARInvoice');
  if Assigned (aComponent) then raise(Exception.Create('A conflicting program is running...' + #13 + 'Please close ' + '''' + 'AR Invoice' + '''' + ' form'));

  PrintDialog1.options := [];
  PrintDialog1.Copies := 2;
  PrintDialog1.Collate := true;
  if PrintDialog1.execute = false then begin ModalResult := mrNone; exit; end;
  repaint;

  repeat   //Exclusive open to prevent locking Delphi 2 locking bug.
  try
    tblARInv.Active := True;
    Break;   //If no error, exit the loop.
  except
    on EDatabaseError do if MessageDlg('Unable to open Invoices table exclusively.', mtError, [mbRetry, mbCancel], 0) <> mrRetry then raise;
  end;
  until False;

  ModalResult := mrOK;
  screen.cursor := crHourglass;
  tblARInvDet.Active := true;
  tblCurrency.Active := true;
  tblItem.Active := true;
  ProgressBar1.max := qryARInv.RecordCount;
  ProgressBar1.step := 1;
  application.createform (TrptARInvoice,rptARInvoice);
  screen.cursor := crDefault;
  rptARInvoice.QuickReport.PrinterSettings.PrinterIndex := Printer.PrinterIndex;   //Required for Delphi 3.
  if (PrintDialog1.Collate = true) and (PrintDialog1.Copies > 1) then begin   //collate multiple copies.
    QRPrinter.Copies := 1;
    for x := 1 to PrintDialog1.Copies do begin rptARInvoice.QuickReport.Print; repaint; end;
  end else if PrintDialog1.Copies > QRPrinter.Copies then begin   //Printer doesn't support multiple copies.
    for x := 1 to PrintDialog1.Copies do begin rptARInvoice.QuickReport.Print; repaint; end;
  end else rptARInvoice.QuickReport.print;

  if copy(caption,0,7) = 'Reprint' then begin   //Bypass updating if reprinting single invoice.
    ModalResult := mrCancel;
    tblARInv.Close;
    screen.cursor := crDefault;
    exit;
  end;
  lblRecordCount.caption := IntToStr(RecordCount) + ' invoice(s) to be updated';
  try
    if MessageDlg('Did invoice(s) print OK?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then ModalResult := mrCancel
    else begin
      lblRecordCount.caption := 'Updating invoice(s)';
      qryARInv.First;
      progressbar1.position := 0;
      while not qryARInv.EOF do begin
        with tblARInv do begin
          try
            Edit;
            FieldValues['Printed'] := true;
            Post;
          except raise; end;
        end;
        ProgressBar1.StepIt;
        qryARInv.next;
      end;
    end;
  finally
    DbiSaveChanges(tblARInv.handle);
    tblARInv.Close;
    screen.cursor := crDefault;
  end;
end;

procedure TfrmARInvoicesPrint.tblARInvDetCalcFields(DataSet: TDataSet);
begin
  tblARInvDetApplicableTaxCodes.value := '';
  if (Copy(tblARInvDetTaxCodes.value,1,1) = qryARInvTax1Code.value) or (Copy(tblARInvDetTaxCodes.value,1,1) = qryARInvTax2Code.value) then tblARInvDetApplicableTaxCodes.value := tblARInvDetApplicableTaxCodes.value + Copy(tblARInvDetTaxCodes.value,1,1);
  if (Copy(tblARInvDetTaxCodes.value,2,1) = qryARInvTax1Code.value) or (Copy(tblARInvDetTaxCodes.value,2,1) = qryARInvTax2Code.value) then tblARInvDetApplicableTaxCodes.value := tblARInvDetApplicableTaxCodes.value + Copy(tblARInvDetTaxCodes.value,2,1);
  if (Copy(tblARInvDetTaxCodes.value,3,1) = qryARInvTax1Code.value) or (Copy(tblARInvDetTaxCodes.value,3,1) = qryARInvTax2Code.value) then tblARInvDetApplicableTaxCodes.value := tblARInvDetApplicableTaxCodes.value + Copy(tblARInvDetTaxCodes.value,3,1);

  tblARInvDetExtAmount.value := frmBS1.RoundIt(tblARInvDetQuantity.value * tblARInvDetUnitPrice.value * 100)/100;
end;

procedure TfrmARInvoicesPrint.qryARInvCalcFields(DataSet: TDataSet);
begin
  qryARInvCityStateZip.value := qryARInvCity.value;
  if qryARInvStateProv.value <> '' then qryARInvCityStateZip.value := qryARInvCityStateZip.value + ', ' + qryARInvStateProv.value;
  if qryARInvZipCode.value <> '' then qryARInvCityStateZip.value := qryARInvCityStateZip.value + '     ' + qryARInvZipCode.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;

  qryARInvTerms.AsString := 'Terms: ';
  if qryARInvCOD.value = true then qryARInvTerms.AsString := qryARInvTerms.AsString + 'C.O.D.'
  else begin
    if qryARInvDiscPC.value >0 then
      if qryARInvDiscDays.AsVariant = null then qryARInvTerms.AsString := qryARInvTerms.AsString + qryARInvDiscPC.AsString + '% ' + '0' + '   '
      else                                      qryARInvTerms.AsString := qryARInvTerms.AsString + qryARInvDiscPC.AsString + '% ' + qryARInvDiscDays.AsString + '   ';
    //if qryARInvNetDays.AsVariant = null then qryARInvTerms.AsString := qryARInvTerms.AsString + 'Net 0'
    if qryARInvNetDays.value = 0 then qryARInvTerms.AsString := qryARInvTerms.AsString + 'Payable on Receipt'
    else                              qryARInvTerms.AsString := qryARInvTerms.AsString + 'Net ' + qryARInvNetDays.AsString;
  end;

  if qryARInvTax1Rate.value >0 then qryARInvTax1DescriptionRate.value := qryARInvTax1Description.value + ' @ ' + qryARInvTax1Rate.AsString + '%'
  else qryARInvTax1DescriptionRate.value := qryARInvTax1Description.value;
  if qryARInvTax2Rate.value >0 then qryARInvTax2DescriptionRate.value := qryARInvTax2Description.value + ' @ ' + qryARInvTax2Rate.AsString + '%'
  else qryARInvTax2DescriptionRate.value := qryARInvTax2Description.value;

  if qryARInvTax1Code.value = qryARInvTaxableAmtCode1.value then qryARInvTax1Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount1.value * qryARInvTax1Rate.value)/100
  else if qryARInvTax1Code.value = qryARInvTaxableAmtCode2.value then qryARInvTax1Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount2.value * qryARInvTax1Rate.value)/100
  else if qryARInvTax1Code.value = qryARInvTaxableAmtCode3.value then qryARInvTax1Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount3.value * qryARInvTax1Rate.value)/100
  else qryARInvTax1Amount.AsCurrency := 0;
  if qryARInvTax2Code.value = qryARInvTaxableAmtCode1.value then qryARInvTax2Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount1.value * qryARInvTax2Rate.value)/100
  else if qryARInvTax2Code.value = qryARInvTaxableAmtCode2.value then qryARInvTax2Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount2.value * qryARInvTax2Rate.value)/100
  else if qryARInvTax2Code.value = qryARInvTaxableAmtCode3.value then qryARInvTax2Amount.AsCurrency := frmBS1.RoundIt(qryARInvTaxableAmount3.value * qryARInvTax2Rate.value)/100
  else qryARInvTax2Amount.AsCurrency := 0;

  qryARInvSubtotal.AsCurrency := qryARInvInvoiceAmount.value - qryARInvTax1Amount.value - qryARInvTax2Amount.value;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -