?? paymentbase.pas
字號:
unit PaymentBase;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Base, DBCtrls, StdCtrls, ExtCtrls, DB, ADODB, ComCtrls, ToolWin,
ActnList, wwdbdatetimepicker, Mask, wwdbedit;
type
TfrmPaymentBase = class(TfrmBase)
ALToolbar: TActionList;
acNew: TAction;
acModify: TAction;
acDelete: TAction;
acSave: TAction;
acCancel: TAction;
acFirst: TAction;
acPrior: TAction;
acNext: TAction;
acLast: TAction;
acFind: TAction;
acPrint: TAction;
acExit: TAction;
acConfirm: TAction;
ToolBar: TToolBar;
tbtNew: TToolButton;
tbtModify: TToolButton;
tbtDelete: TToolButton;
tbtDivider1: TToolButton;
tbtFirst: TToolButton;
tbtPrior: TToolButton;
tbtNext: TToolButton;
tbtLast: TToolButton;
tbtDivider: TToolButton;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
tbtSave: TToolButton;
tbtCancel: TToolButton;
ToolButton5: TToolButton;
tbtFind: TToolButton;
tbtDivider3: TToolButton;
tbtExit: TToolButton;
spGetInNumber: TADOStoredProc;
spGetOutNumber: TADOStoredProc;
pnlTop: TPanel;
lblSubmit: TLabel;
lblBillCaption: TLabel;
lblNO: TLabel;
dbtxtNo: TDBText;
QMaster: TADOQuery;
dsMaster: TDataSource;
lblMaker: TLabel;
lblSubmitUser: TLabel;
lblDate: TLabel;
lblSubmitDate: TLabel;
wwDBEdtMaker: TwwDBEdit;
wwDBEdtSubmitUser: TwwDBEdit;
wwPKDate: TwwDBDateTimePicker;
wwPKSubmitDate: TwwDBDateTimePicker;
procedure acFirstExecute(Sender: TObject);
procedure acPriorExecute(Sender: TObject);
procedure acNextExecute(Sender: TObject);
procedure acLastExecute(Sender: TObject);
procedure acExitExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure dsMasterDataChange(Sender: TObject; Field: TField);
procedure dsMasterStateChange(Sender: TObject);
procedure acNewExecute(Sender: TObject);
procedure acModifyExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
procedure acSaveExecute(Sender: TObject);
procedure acCancelExecute(Sender: TObject);
procedure QMasterBeforePost(DataSet: TDataSet);
procedure QMasterAfterPost(DataSet: TDataSet);
procedure QMasterBeforeDelete(DataSet: TDataSet);
procedure QMasterPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure QMasterDeleteError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
procedure FormCreate(Sender: TObject);
procedure QMasterAfterInsert(DataSet: TDataSet);
procedure acConfirmExecute(Sender: TObject);
private
{ Private declarations }
protected
iFunctionID :Integer; {模塊標識ID}
iBillTypeID :Integer; {單據類型ID}
sMasterSql :String; {主表的Sql語句}
bCanNew,bCanModify,bCanDelete,bCanPrint,bCanConfirm,bCanCounteract :Boolean;
function CheckSave :Boolean; {檢測當前數據是否保存函數}
function GetErrorInfo(E: EDatabaseError) :String; {取錯誤描述信息和錯誤原碼}
Procedure GetPermiss ; virtual; {得到當前用戶的權限}
public
{ Public declarations }
end;
var
frmPaymentBase: TfrmPaymentBase;
implementation
Uses Main, Global, DataModule;
{$R *.dfm}
{檢測當前數據是否保存函數}
Function TfrmPaymentBase.CheckSave :Boolean;
begin
Result:=true;
if QMaster.State in [dsInsert,dsEdit] then //判斷當前狀態
Case Messagedlg('是否保存當前的修改?',mtWarning,[mbYes,mbNo,mbCancel],0) of
mrYes:
begin
QMaster.Post ;
Result := QMaster.State = dsBrowse; //狀態是否為Browse
end;
mrNo:
begin
QMaster.Cancel ;
Result := QMaster.State = dsBrowse; //狀態是否為Browse
end;
mrCancel:
Result := False ;
End
end;
{取錯誤描述信息和錯誤原碼}
function TfrmPaymentBase.GetErrorInfo(E: EDatabaseError) :String;
var
AdoErrors :Errors; //ado的錯誤信息對象
sError :String;
// i :Integer;
begin
inherited;
{取得錯誤信息}
AdoErrors:=dmClient.adocnClothing.Errors ;
//for i:=0 to AdoErrors.Count-1 do
if AdoErrors.Count >0 then //可能有多個錯誤信息,這里只取第一個
sError:= sError+#10#13+AdoErrors.Item[0].Description+' (錯誤碼:'+InttoStr(AdoErrors.Item[0].NativeError)+')'
Else if (E is EDatabaseError) then
sError:=E.Message ;
Result:=sError;
end;
{得到用戶對當前窗體的操作權限}
procedure TfrmPaymentBase.GetPermiss;
begin
bCanNew :=G_bAdmin;
bCanModify :=G_bAdmin;
bCanDelete :=G_bAdmin;
bCanPrint :=G_bAdmin;
bCanConfirm :=G_bAdmin;
bCanCounteract :=G_bAdmin;
if G_bAdmin then //判斷是否為超級用戶
begin
bCanNew :=G_bAdmin;
bCanModify :=G_bAdmin;
bCanDelete :=G_bAdmin;
bCanPrint :=G_bAdmin;
bCanConfirm :=G_bAdmin;
bCanCounteract :=G_bAdmin;
end
else //否則查找當前用戶是否有當前窗體的操作權限
with dmClient.spUserRight do
if Locate('fModuleID;fActionName',varArrayOf([iModuleID,sFunctionName]),[]) then
begin
bCanNew := FieldByName('fInsert').AsBoolean;
bCanModify := FieldByName('fEdit').AsBoolean;
bCanDelete := FieldByName('fDelete').AsBoolean;
bCanPrint := FieldByName('fPrint').AsBoolean;
bCanConfirm := FieldByName('fConfirm').AsBoolean;
bCanCounteract := FieldByName('fCancel').AsBoolean;
end
end;
procedure TfrmPaymentBase.acFirstExecute(Sender: TObject);
begin
inherited;
QMaster.First ;
end;
procedure TfrmPaymentBase.acPriorExecute(Sender: TObject);
begin
inherited;
QMaster.Prior;
end;
procedure TfrmPaymentBase.acNextExecute(Sender: TObject);
begin
inherited;
QMaster.Next;
end;
procedure TfrmPaymentBase.acLastExecute(Sender: TObject);
begin
inherited;
QMaster.Last;
end;
procedure TfrmPaymentBase.acExitExecute(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmPaymentBase.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
inherited;
CanClose :=CheckSave; //未保存則不能退出
end;
procedure TfrmPaymentBase.dsMasterDataChange(Sender: TObject;
Field: TField);
begin
inherited;
{調用狀態變化過程}
dsMasterStateChange(Sender);
end;
procedure TfrmPaymentBase.dsMasterStateChange(Sender: TObject);
var
i: Integer;
begin
inherited;
{設置功能按鈕的有效性}
acSave.Enabled := QMaster.State in [dsInsert,dsEdit];
acNew.Enabled := bCanNew and Not acSave.Enabled ;
acModify.Enabled := bCanModify
and Not acSave.Enabled
and not QMaster.FieldByName('fSubmitFlag').AsBoolean; //還未確認的單據
acCancel.Enabled := acSave.Enabled ;
acDelete.Enabled := bCanDelete
and not QMaster.FieldByName('fSubmitFlag').AsBoolean; //還未確認的單據
acPrint.Enabled := bCanPrint;
acConfirm.Enabled := bCanConfirm //有確認操作權限
and not QMaster.FieldByName('fSubmitFlag').AsBoolean //還未確認的單據
and Not acSave.Enabled ;
acFind.Enabled := Not acSave.Enabled ;
//頁腳信息
lblSubmitDate.Visible := QMaster.FieldByName('fSubmitFlag').AsBoolean;
lblSubmitUser.Visible := lblSubmitDate.Visible;
wwPKSubmitDate.Visible := lblSubmitDate.Visible;
wwDBEdtSubmitUser.Visible := lblSubmitDate.Visible;
//Lable信息
lblSubmit.Visible :=QMaster.FieldByName('fSubmitFlag').AsBoolean;
{設置編輯控件的ReadOnly}
With PnlTop do
for i:= 0 to ControlCount-1 do
if Controls[i] is TDBEdit then
(Controls[i] as TDBEdit).ReadOnly := Not acSave.Enabled
else if Controls[i] is TwwDBEdit then
(Controls[i] as TwwDBEdit).ReadOnly := Not acSave.Enabled
else if Controls[i] is TDBMemo then
(Controls[i] as TDBMemo).ReadOnly := Not acSave.Enabled;
{設置導航按鈕的有效性}
acFirst.Enabled := (Not QMaster.Bof) and (Not acSave.Enabled) ;
acLast.Enabled := (Not QMaster.Eof) and (Not acSave.Enabled);
acPrior.Enabled := (acFirst.Enabled) and (Not acSave.Enabled);
acNext.Enabled := (acLast.Enabled) and (Not acSave.Enabled);
end;
procedure TfrmPaymentBase.acNewExecute(Sender: TObject);
begin
inherited;
QMaster.Append ;
end;
procedure TfrmPaymentBase.acModifyExecute(Sender: TObject);
begin
inherited;
QMaster.Edit ;
end;
procedure TfrmPaymentBase.acDeleteExecute(Sender: TObject);
begin
inherited;
if QMaster.RecordCount >0 then
if messagedlg('您確定要刪除當前單據嗎?',mtWarning,[mbOk,mbCancel],0)=mrOk then
QMaster.Delete ;
end;
procedure TfrmPaymentBase.acSaveExecute(Sender: TObject);
begin
inherited;
if QMaster.State in [dsInsert,dsEdit] then
QMaster.Post ;
end;
procedure TfrmPaymentBase.acCancelExecute(Sender: TObject);
begin
inherited;
if messagedlg('您確定要取消修改嗎?',mtWarning,[mbOk,mbCancel],0)=mrOk then
QMaster.Cancel ;
end;
procedure TfrmPaymentBase.QMasterBeforePost(DataSet: TDataSet);
begin
inherited;
if QMaster.State = dsInsert then
begin
//取外部單號NO
Try
With spGetOutNumber do
begin
parameters.ParamValues['@BillType']:=iBillTypeID;
Execproc;
end;
except
on E:Exception do
begin
MessageDlg('取單據號失敗!'+#13#10+E.Message,mterror,[mbOk],0);
Abort;
end;
end;
QMaster.FieldByName('fNO').asString:=
Trim(spGetOutNumber.Parameters.ParamValues['@OutNumber']);
End;
//開啟事務
if Not dmClient.adocnClothing.InTransaction then
dmClient.adocnClothing.BeginTrans ;
end;
procedure TfrmPaymentBase.QMasterAfterPost(DataSet: TDataSet);
begin
inherited;
{提交事務}
if dmClient.adocnClothing.InTransaction then
dmClient.adocnClothing.CommitTrans ;
end;
procedure TfrmPaymentBase.QMasterBeforeDelete(DataSet: TDataSet);
begin
inherited;
{開啟事務}
if Not dmClient.adocnClothing.InTransaction then
dmClient.adocnClothing.BeginTrans ;
end;
procedure TfrmPaymentBase.QMasterPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
inherited;
{提示錯誤描述信息和錯誤原碼}
messagedlg('存盤失敗!'+GetErrorInfo(E),mtError,[mbOk],0);
Action := daAbort; //終止存盤
end;
procedure TfrmPaymentBase.QMasterDeleteError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
inherited;
{提示錯誤描述信息和錯誤原碼}
messagedlg('刪除失敗!'+GetErrorInfo(E),mtError,[mbOk],0);
Action := daAbort; //終止存盤
end;
procedure TfrmPaymentBase.FormCreate(Sender: TObject);
begin
inherited;
GetPermiss;
if not QMaster.Active then
QMaster.Open
else
dsMasterStateChange(Sender); {調用狀態變化過程}
end;
procedure TfrmPaymentBase.QMasterAfterInsert(DataSet: TDataSet);
begin
inherited;
//取內部單號ID
Try
With spGetInNumber do
begin
parameters.ParamValues['@BillType']:=iBillTypeID;
Execproc;
end;
except
on E:Exception do
begin
MessageDlg('新增單據失敗!'+#13#10+E.Message,mterror,[mbOk],0);
Abort;
end;
end;
QMaster.FieldByName('fID').asInteger:=
spGetInNumber.Parameters.ParamValues['@InNumber'];
QMaster.FieldByName('fPayType').asInteger:= 0;
QMaster.FieldByName('fUseRemain').asBoolean:= False;
QMaster.FieldByName('fMaker').asString:= G_sUserName;
QMaster.FieldByName('fDate').asDatetime:= Date();
end;
procedure TfrmPaymentBase.acConfirmExecute(Sender: TObject);
begin
inherited;
if messageDlg('你確定要審核當前單據嗎?',mtWarning,[mbOk,mbCancel],0)=mrOk then
begin
Screen.Cursor :=crHourGlass;
try
QMaster.Edit ;
QMaster.FieldValues['fSubmitFlag'] :=1;
QMaster.FieldByName('fSubmitDate').AsDatetime :=date();
QMaster.FieldByName('fSubmitUser').AsString :=G_sUserName;
QMaster.Post ;
except
on E:Exception do
begin
Screen.Cursor :=crDefault;
messagedlg('操作失敗!'+#13#10+E.Message,mtError,[mbOk],0);
exit;
end;
end;
Screen.Cursor :=crDefault;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -