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

📄 apchequeform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit APChequeForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, DBGrids, ExtCtrls, DB, DBTables, Mask, DBCtrls, Buttons,
  Menus, BDE;

type
  TfrmAPCheque = class(TForm)
    Panel1: TPanel;
    panelMiddle: TPanel;
    Panel2: TPanel;
    Panel4: TPanel;
    btnOK: TButton;
    btnCancel: TButton;
    tblAPCheq: TTable;
    dsAPCheq: TDataSource;
    tblAPInvChq: TTable;
    dsAPInvChq: TDataSource;
    Label2: TLabel;
    editChequeNo: TDBEdit;
    lblInvoiceDate: TLabel;
    editChequeDate: TDBEdit;
    lblGLPeriod: TLabel;
    editGLPeriod: TDBEdit;
    panelLeft: TPanel;
    tblVendor: TTable;
    dsVendor: TDataSource;
    DBGrid1: TDBGrid;
    tblVendorVendorName: TStringField;
    tblVendorAddressLine1: TStringField;
    panelRight: TPanel;
    txtAddress: TDBText;
    tblVendorAddressLine2: TStringField;
    tblVendorCity: TStringField;
    tblVendorStateProv: TStringField;
    tblVendorAddress: TStringField;
    tblVendorZipCode: TStringField;
    tblVendorCountry: TStringField;
    editGLYear: TDBEdit;
    tblAPChqCtl: TTable;
    tblVendorVendorID: TAutoIncField;
    tblVendorVendorNo: TStringField;
    btnChequeDate: TSpeedButton;
    PopupMenu1: TPopupMenu;
    mnuNew: TMenuItem;
    mnuDelete: TMenuItem;
    lblPosted: TLabel;
    tblAPCheqChequeID: TAutoIncField;
    tblAPCheqChequeNo: TIntegerField;
    tblAPCheqVendorID: TIntegerField;
    tblAPCheqBankID: TIntegerField;
    tblAPCheqGLYear: TSmallintField;
    tblAPCheqGLPeriod: TSmallintField;
    tblAPCheqChequeDate: TDateField;
    tblAPCheqChequeAmount: TCurrencyField;
    tblAPCheqReconciled: TBooleanField;
    tblAPCheqPosted: TBooleanField;
    tblAPInvChqAPInvoiceID: TIntegerField;
    tblAPInvChqChequeID: TIntegerField;
    tblAPInvChqPaymentAmount: TCurrencyField;
    tblAPChqCtlNextChequeID: TIntegerField;
    tblAPCheqVoid: TBooleanField;
    chkVoid: TDBCheckBox;
    Label1: TLabel;
    editChequeAmount: TDBEdit;
    tblAPInv: TTable;
    tblAPInvAPInvoiceID: TIntegerField;
    tblAPInvVendorID: TIntegerField;
    tblAPInvInvoiceNo: TStringField;
    tblAPInvInvoiceDate: TDateField;
    tblAPInvDueDate: TDateField;
    tblAPInvInvoiceAmount: TCurrencyField;
    tblAPInvOwing: TCurrencyField;
    tblAPInvPosted: TBooleanField;
    tblAPInvChqInvoiceNo: TStringField;
    tblAPInvChqSeq: TIntegerField;
    qryLastDetailLineNo: TQuery;
    tblAPInvChqDueDate: TDateField;
    tblAPInvChq2: TTable;
    tblAPInvChq2APInvoiceID: TIntegerField;
    tblAPInvChq2ChequeID: TIntegerField;
    tblAPInvChq2Seq: TIntegerField;
    tblAPInvChqOwing: TCurrencyField;
    tblAPInvChqInvoiceDate: TDateField;
    tblAPInvChqInvoiceAmount: TCurrencyField;
    tblAPInvDiscountAmount: TCurrencyField;
    tblAPInvChqDiscountAmount: TCurrencyField;
    tblAPInvDiscountDate: TDateField;
    tblAPInvChqDiscountDate: TDateField;
    Label3: TLabel;
    editVendorNo: TEdit;
    cboVendor: TDBLookupComboBox;
    tblAPCheqVendorNo: TStringField;
    tblVendorSuspended: TBooleanField;
    txtTerms: TDBText;
    tblVendorDiscPC: TFloatField;
    tblVendorDiscDays: TSmallintField;
    tblVendorNetDays: TSmallintField;
    tblVendorDelayDays: TSmallintField;
    tblVendorTerms: TStringField;
    btnVendor: TSpeedButton;
    cboBank: TDBLookupComboBox;
    Label4: TLabel;
    btnBank: TSpeedButton;
    lblReconciled: TLabel;
    tblVendorCurrencyID: TIntegerField;
    tblAPCheqCurrencyIDofBank: TIntegerField;
    tblAPCheqCurrencyIDofVendor: TIntegerField;
    tblAPCheqAddress: TStringField;
    tblAPInvDiscountTaken: TBooleanField;
    tblAPInvChqDiscountTaken: TBooleanField;
    procedure btnOKClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Panel2DblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1Exit(Sender: TObject);
    procedure DBGrid1Enter(Sender: TObject);
    procedure tblVendorCalcFields(DataSet: TDataSet);
    procedure editChequeDateKeyPress(Sender: TObject; var Key: Char);
    procedure dsAPCheqDataChange(Sender: TObject; Field: TField);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure tblAPInvChqNewRecord(DataSet: TDataSet);
    procedure tblAPCheqNewRecord(DataSet: TDataSet);
    procedure tblAPCheqUpdateError(DataSet: TDataSet; E: EDatabaseError;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    procedure tblAPInvChqUpdateError(DataSet: TDataSet; E: EDatabaseError;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    procedure tblAPCheqBeforeEdit(DataSet: TDataSet);
    procedure tblAPInvChqBeforeEdit(DataSet: TDataSet);
    procedure tblAPInvChqBeforeInsert(DataSet: TDataSet);
    procedure tblAPInvChqBeforeDelete(DataSet: TDataSet);
    procedure tblAPCheqGLYearGetText(Sender: TField; var Text: string;
      DisplayText: Boolean);
    procedure tblAPCheqGLYearSetText(Sender: TField; const Text: string);
    procedure tblAPCheqBeforePost(DataSet: TDataSet);
    procedure tblAPInvChqAfterPost(DataSet: TDataSet);
    procedure tblAPInvChqAfterDelete(DataSet: TDataSet);
    procedure btnChequeDateClick(Sender: TObject);
    procedure mnuDeleteClick(Sender: TObject);
    procedure mnuNewClick(Sender: TObject);
    procedure tblAPCheqBeforeInsert(DataSet: TDataSet);
    procedure tblAPInvChqBeforePost(DataSet: TDataSet);
    procedure tblAPInvChqAPInvoiceIDValidate(Sender: TField);
    procedure tblAPInvChqAPInvoiceIDChange(Sender: TField);
    procedure tblAPInvChqPaymentAmountValidate(Sender: TField);
    procedure tblAPCheqChequeNoValidate(Sender: TField);
    procedure editVendorNoExit(Sender: TObject);
    procedure editVendorNoKeyPress(Sender: TObject; var Key: Char);
    procedure cboVendorKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnVendorClick(Sender: TObject);
    procedure cboBankKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnBankClick(Sender: TObject);
    procedure tblAPInvFilterRecord(DataSet: TDataSet; var Accept: Boolean);
    procedure tblAPCheqVendorIDValidate(Sender: TField);
    procedure tblAPCheqVendorIDChange(Sender: TField);
    procedure dsAPCheqUpdateData(Sender: TObject);
    procedure chkVoidClick(Sender: TObject);
    procedure tblAPCheqChequeDateSetText(Sender: TField;
      const Text: string);
  private
    { Private declarations }
    NextDetailLineNo: Integer;
    OldPaymentAmount: Currency;
    APInvoiceIDs, Seqs: TStringList;  OldSeq: Integer;
  public
    { Public declarations }
  end;

var
  frmAPCheque: TfrmAPCheque;

implementation

uses BS1Form, APChequesForm, CalendarForm, VendorsForm, VendorsFilterForm,
  BanksForm, LookUpsData;

var
  intClientHeight, intClientWidth: Integer;

{$R *.DFM}

procedure TfrmAPCheque.btnOKClick(Sender: TObject);
begin
  if tblAPCheq.State in [dsInsert, dsEdit] then tblAPCheq.post;
  if tblAPInvChq.State in [dsInsert, dsEdit] then tblAPInvChq.post;
  tblAPCheq.Database.ApplyUpdates([tblAPCheq, tblAPInvChq]);
  DbiSaveChanges(tblAPCheq.handle);
  DbiSaveChanges(tblAPInvChq.handle);
  try
    with frmAPCheques.qryAPCheq do begin close; open; end;   //Refresh, etc.
    frmAPCheques.qryAPCheq.Locate('ChequeID', tblAPCheqChequeID.value, []);
  except; end;
  if (tblAPCheq.UpdatesPending = false) and (tblAPInvChq.UpdatesPending = false) then Close;
end;

procedure TfrmAPCheque.btnCancelClick(Sender: TObject);
begin
  tblAPCheq.DisableControls;
  tblAPCheq.cancel;
  tblAPCheq.CancelUpdates;
  tblAPInvChq.cancel;
  tblAPInvChq.CancelUpdates;
  Close;
end;

procedure TfrmAPCheque.FormCreate(Sender: TObject);
var
  x: integer;
begin
  tblAPCheq.DatabaseName := strDatabaseName;
  tblAPChqCtl.DatabaseName := strDatabaseName;
  tblAPInvChq.DatabaseName := strDatabaseName;
  tblAPInvChq2.DatabaseName := strDatabaseName;
  tblAPInv.DatabaseName := strDatabaseName;
  tblVendor.DatabaseName := strDatabaseName;
  //tblBank.DatabaseName := strDatabaseName;   //Data Module used instead.
  qryLastDetailLineNo.DatabaseName := strDatabaseName;
  dmLookUps.tblBank.Active := true;
  tblAPCheq.Active := true;
  tblAPInv.Active := true;
  tblAPInvChq.Active := true;
  //tblAPInvChq2.Active := true;
  tblVendor.Active := true;
  tblAPCheq.Database.TransIsolation := tiDirtyRead;

  if FontFactor <> 1 then begin   //If using large fonts, resize form.
    for x := 0 to DBGrid1.Columns.Count - 1 do DBGrid1.Columns[x].width := Trunc(DBGrid1.Columns[x].width*FontFactor);
    ClientHeight := Trunc(ClientHeight*FontFactor);
    ClientWidth := Trunc(ClientWidth*FontFactor);
  end;  
  intClientHeight := ClientHeight;   //Store form size.
  intClientWidth := ClientWidth;

  APInvoiceIDs := TStringList.create;   //Create TStringLists to store APInvoiceIDs & Seqs for this cheque, to prevent invoices occurring more than once.
  Seqs := TStringList.create;
end;

procedure TfrmAPCheque.Panel2DblClick(Sender: TObject);
begin
  ClientHeight := intClientHeight;   //Resize form.
  ClientWidth := intClientWidth;
end;

procedure TfrmAPCheque.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (tblAPCheq.State in [dsInsert, dsEdit]) or (tblAPInvChq.State in [dsInsert, dsEdit])
  or (tblAPCheq.UpdatesPending = true) or (tblAPInvChq.UpdatesPending = true) then btnOKClick(sender);
  try frmAPCheques.DBGrid1.Setfocus; except; end;
  Action := caFree;
end;

procedure TfrmAPCheque.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then begin   //Enter key: advance to next control.
    if not (ActiveControl is TDBGrid) and (ActiveControl.ClassType <> TDBMemo) and (ActiveControl.ClassType <> TDBLookupCombobox) then begin
      Key := #0;
      if (ActiveControl.name = 'editVendorNo') and (editVendorNo.text <> '') then editChequeNo.setfocus
      else Perform(WM_NEXTDLGCTL, 0, 0);
    end else if (ActiveControl.ClassType = TDBLookupComboBox) and (TDBLookupComboBox(ActiveControl).ListVisible = false) then begin
      Key := #0;
      Perform(WM_NEXTDLGCTL, 0, 0);
    end else if (ActiveControl is TDBGrid) then begin
      key := #0;
      //Exit grid if on a new record & no data... replaced by ColExit event (as this event can't see whether data is being entered in the current cell).
      //if (TDBGrid(ActiveControl).selectedindex = 1) and (tblAPInvChqInvoiceID.AsVariant = Null) and (tblAPInvChqGLAmount.AsVariant = Null) then Perform(WM_NEXTDLGCTL, 0, 0)
      //else}
      with TDBGrid(ActiveControl) do
        //if selectedindex < (fieldcount - 1) then   //Increment the field.
        if selectedindex < (fieldcount - 1) then   //Skip to payment.
          selectedindex := (fieldcount - 1)
        else begin   //Move to next record.
          selectedindex := 0;
          tblAPInvChq.next;
          if tblAPInvChq.eof = true then tblAPInvChq.append;
        end;
    end;
  end;
end;

procedure TfrmAPCheque.DBGrid1ColExit(Sender: TObject);

⌨️ 快捷键说明

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