📄 apchequesform.pas
字号:
unit APChequesForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, Grids, DBGrids, DB, DBTables, Menus, ExtCtrls, StdCtrls, Buttons, BDE, SHELLAPI;
type
TfrmAPCheques = class(TForm)
Panel1: TPanel;
MainMenu1: TMainMenu;
tblAPCheq: TTable;
dsAPCheq: TDataSource;
DBGrid1: TDBGrid;
Label1: TLabel;
mnuFile: TMenuItem;
mnuView: TMenuItem;
mnuHelp: TMenuItem;
mnuFilter: TMenuItem;
mnuSortBy: TMenuItem;
N1: TMenuItem;
mnuRefresh: TMenuItem;
mnuAPInvoicesHelp: TMenuItem;
mnuPrint: TMenuItem;
N2: TMenuItem;
mnuExit: TMenuItem;
Bevel1: TBevel;
mnuSortAmount: TMenuItem;
mnuSortDate: TMenuItem;
mnuSortName: TMenuItem;
mnuVendor: TMenuItem;
N4: TMenuItem;
btnNew: TSpeedButton;
btnEdit: TSpeedButton;
btnDelete: TSpeedButton;
mnuRecords: TMenuItem;
mnuNew: TMenuItem;
mnuEdit: TMenuItem;
mnuDelete: TMenuItem;
qryAPCheq: TQuery;
tblAPInvChq: TTable;
mnuSortDateAscending: TMenuItem;
mnuSortDateDescending: TMenuItem;
mnuSortVendorNo: TMenuItem;
mnuSortChequeno: TMenuItem;
PopupMenu1: TPopupMenu;
popVendor: TMenuItem;
editFind: TEdit;
N3: TMenuItem;
mnuPost: TMenuItem;
popNew: TMenuItem;
popEdit: TMenuItem;
popDelete: TMenuItem;
N5: TMenuItem;
popPhone: TMenuItem;
qryAPCheqChequeID: TIntegerField;
qryAPCheqChequeNo: TIntegerField;
qryAPCheqVendorID: TIntegerField;
qryAPCheqBankID: TIntegerField;
qryAPCheqGLYear: TSmallintField;
qryAPCheqGLPeriod: TSmallintField;
qryAPCheqChequeDate: TDateField;
qryAPCheqChequeAmount: TCurrencyField;
qryAPCheqReconciled: TBooleanField;
qryAPCheqVendorNo: TStringField;
qryAPCheqVendorName: TStringField;
qryAPCheqCurrencyID: TIntegerField;
qryAPCheqPhone: TStringField;
qryAPCheqPeriodppyyyy: TStringField;
tblAPCheqChequeID: TAutoIncField;
tblAPInvChqChequeID: TIntegerField;
qryAPCheqPosted: TBooleanField;
mnuPrintCheques: TMenuItem;
mnuReconciled: TMenuItem;
tblAPCheqReconciled: TBooleanField;
popReconciled: TMenuItem;
N8: TMenuItem;
mnuOutstanding: TMenuItem;
popEMail: TMenuItem;
N6: TMenuItem;
qryAPCheqEMail: TStringField;
btnFilter: TSpeedButton;
procedure mnuRefreshClick(Sender: TObject);
procedure tblAPCheqBeforeDelete(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure Panel1DblClick(Sender: TObject);
procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure mnuNewClick(Sender: TObject);
procedure mnuEditClick(Sender: TObject);
procedure mnuDeleteClick(Sender: TObject);
procedure mnuExitClick(Sender: TObject);
procedure qryAPCheqCalcFields(DataSet: TDataSet);
procedure mnuSortDateAscendingClick(Sender: TObject);
procedure mnuSortDateDescendingClick(Sender: TObject);
procedure mnuSortNameClick(Sender: TObject);
procedure mnuSortAmountClick(Sender: TObject);
procedure mnuSortVendorNoClick(Sender: TObject);
procedure mnuSortChequenoClick(Sender: TObject);
procedure mnuVendorClick(Sender: TObject);
procedure editFindKeyPress(Sender: TObject; var Key: Char);
procedure FormResize(Sender: TObject);
procedure mnuPostClick(Sender: TObject);
procedure mnuFilterClick(Sender: TObject);
procedure qryAPCheqFilterRecord(DataSet: TDataSet; var Accept: Boolean);
procedure mnuPrintClick(Sender: TObject);
procedure popPhoneClick(Sender: TObject);
procedure mnuPrintChequesClick(Sender: TObject);
procedure dsAPCheqDataChange(Sender: TObject; Field: TField);
procedure mnuReconciledClick(Sender: TObject);
procedure qryAPCheqChequeNoGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure mnuAPInvoicesHelpClick(Sender: TObject);
procedure mnuOutstandingClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure popEMailClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmAPCheques: TfrmAPCheques;
implementation
uses BS1Form, VendorForm, APChequeForm, APChequesPostForm, APChequesFilterForm, DialerForm,
APChequeNewForm, APChequesReport, APChequesPrintForm, JVsPostForm;
var
intClientHeight, intClientWidth: Integer;
OldWindowState: TWindowState;
{$R *.DFM}
procedure TfrmAPCheques.mnuRefreshClick(Sender: TObject);
var
Bookmark: TBookmark;
begin
repaint;
screen.cursor := crHourglass;
Bookmark := qryAPCheq.GetBookmark;
with qryAPCheq do begin close; open; end; //Refresh.
try qryAPCheq.GotoBookmark(Bookmark); except; end;
qryAPCheq.FreeBookmark(BookMark);
screen.cursor := crDefault;
end;
procedure TfrmAPCheques.tblAPCheqBeforeDelete(DataSet: TDataSet);
begin
if qryAPCheqPosted.value = true then raise(Exception.Create('Unable to delete cheque ' + '''' + qryAPCheqChequeNo.AsString + '''' + '...' + #13 + 'It has already been posted'));
if qryAPCheqChequeNo.value > 0 then begin
if MessageDlg('Delete cheque ' + '''' + qryAPCheqChequeNo.AsString + '''' + '?',mtConfirmation,mbOKCancel,0) <> mrOK then raise(EAbort.create('')); //Silent Exception: "abort;" replaced by "raise etc" since abort conflicts with BDE (required by DbiSaveChanges).
end else begin
if MessageDlg('Delete cheque for ' + '''' + qryAPCheqVendorName.AsString + '''' + '?',mtConfirmation,mbOKCancel,0) <> mrOK then raise(EAbort.create('')); //Silent Exception: "abort;" replaced by "raise etc" since abort conflicts with BDE (required by DbiSaveChanges).
end;
repaint;
tblAPCheq.edit; //Put lock on master table.
with tblAPInvChq do begin //Delete detail for this cheque.
Active := true;
First;
while not eof do Delete;
end;
end;
procedure TfrmAPCheques.FormCreate(Sender: TObject);
var
x: integer;
begin
qryAPCheq.DatabaseName := strDatabaseName;
tblAPCheq.DatabaseName := strDatabaseName;
tblAPInvChq.DatabaseName := strDatabaseName;
qryAPCheq.Active := true;
//tblAPCheq.Active := true; ...pospone until required (delete).
//tblAPInvChq.Active := true;
if FontFactor <> 1 then begin //If using large fonts, resize grid columns.
intClientWidth := Trunc(20*FontFactor) + DBGrid1.Columns.Count - 1; //Scrollbar + grid lines.
for x := 0 to DBGrid1.Columns.Count - 1 do begin
DBGrid1.Columns[x].width := Trunc(DBGrid1.Columns[x].width*FontFactor);
intClientWidth := intClientWidth + DBGrid1.Columns[x].width;
end;
ClientWidth := intClientWidth;
end;
intClientHeight := ClientHeight; //Store form size.
intClientWidth := ClientWidth;
end;
procedure TfrmAPCheques.Panel1DblClick(Sender: TObject);
begin
ClientHeight := intClientHeight; //Resize form.
ClientWidth := intClientWidth;
end;
procedure TfrmAPCheques.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then begin
mnuEditClick(Sender);
Key := #0; //Cancel Enter key.
end;
end;
procedure TfrmAPCheques.FormShow(Sender: TObject);
begin
editFind.text := '<Cheque no.>'; //Clear selection.
editFind.setfocus;
editFind.SelectAll;
qryAPCheq.First; //Reset grid to start at 1st record.
if mnuOutstanding.checked = true then begin
if mnuFilter.checked = true then caption := 'AP Cheques (Outstanding, Filtered)'
else caption := 'AP Cheques (Outstanding)';
end else begin
if mnuFilter.checked = true then caption := 'AP Cheques (Filtered)'
else caption := 'AP Cheques';
end;
end;
procedure TfrmAPCheques.mnuNewClick(Sender: TObject);
var
aComponent: TComponent;
begin
screen.cursor := crHourglass;
aComponent := Application.FindComponent('frmAPChequeNew');
if not Assigned (aComponent) then frmAPChequeNew := TfrmAPChequeNew.Create(Application);
screen.cursor := crDefault;
if frmAPChequeNew.ShowModal = mrOk then begin
if frmAPChequeNew.optSingleCheque.checked = true then begin
screen.cursor := crHourglass;
application.createform (TfrmAPCheque,frmAPCheque);
frmAPCheque.tblAPCheq.Insert;
frmAPCheque.Show;
screen.cursor := crDefault;
end else mnuRefreshClick(sender);
end;
end;
procedure TfrmAPCheques.mnuEditClick(Sender: TObject);
begin
if qryAPCheqChequeID.AsVariant = null then mnuNewClick(sender) //Can happen if no cheques yet.
else begin
screen.cursor := crHourglass;
application.createform (TfrmAPCheque,frmAPCheque);
frmAPCheque.tblAPCheq.Locate('ChequeID', qryAPCheqChequeID.value, []);
frmAPCheque.Show;
screen.cursor := crDefault;
end;
end;
procedure TfrmAPCheques.mnuDeleteClick(Sender: TObject);
var
Bookmark: TBookmark;
begin
tblAPCheq.Active := true;
tblAPCheq.Database.TransIsolation := tiDirtyRead;
if tblAPCheq.Locate('ChequeID', qryAPCheqChequeID.value, []) = true then begin
tblAPCheq.delete; //Delete from table as query is read-only.
tblAPCheq.Database.ApplyUpdates([tblAPInvChq, tblAPCheq]);
DbiSaveChanges(tblAPInvChq.handle);
DbiSaveChanges(tblAPCheq.handle);
Bookmark := qryAPCheq.GetBookmark;
with qryAPCheq do begin close; open; end; //Refresh.
try qryAPCheq.GotoBookmark(Bookmark); except; end;
qryAPCheq.FreeBookmark(BookMark);
if qryAPCheqChequeID.AsVariant = null then qryAPCheq.first; //If deleting last record, prevent blank record with focus after last record (move to 1st record as per other grids).
end;
end;
procedure TfrmAPCheques.mnuExitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmAPCheques.qryAPCheqCalcFields(DataSet: TDataSet);
begin
if qryAPCheqGLPeriod.AsVariant <> null then qryAPCheqPeriodppyyyy.value := qryAPCheqGLPeriod.AsString + '/' + qryAPCheqGLYear.AsString
else qryAPCheqPeriodppyyyy.value := '';
end;
procedure TfrmAPCheques.mnuSortDateAscendingClick(Sender: TObject);
begin
screen.cursor := crHourglass;
mnuSortDate.checked := true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -