📄 apchequeform.pas
字号:
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 + -