📄 billbase.pas
字号:
unit BillBase;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Base, DB, ADODB, ActnList, ComCtrls, ToolWin, Grids, Wwdbigrd,
Wwdbgrid, ExtCtrls, StdCtrls, wwdblook, Mask, DBCtrls, dxExEdtr, dxTL,
dxDBCtrl, dxDBGrid, dxCntner, ppBands, ppCache, ppClass, ppProd,
ppReport, ppComm, ppRelatv, ppDB, ppDBPipe, wwdbdatetimepicker, wwdbedit;
type
TfrmBillBase = class(TfrmBase)
ToolBar: TToolBar;
tbtNew: TToolButton;
tbtModify: TToolButton;
tbtDelete: TToolButton;
tbtDivider1: TToolButton;
tbtFirst: TToolButton;
tbtPrior: TToolButton;
tbtNext: TToolButton;
tbtLast: TToolButton;
tbtSave: TToolButton;
tbtCancel: TToolButton;
tbtFind: TToolButton;
tbtDivider3: TToolButton;
tbtExit: TToolButton;
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;
QMaster: TADOQuery;
dsMaster: TDataSource;
QDetail: TADOQuery;
dsDetail: TDataSource;
acAddLine: TAction;
acDelLine: TAction;
pnlTop: TPanel;
pnlClient: TPanel;
SplitterCenter: TSplitter;
wwDGDetail: TwwDBGrid;
wwDBLKProductCode: TwwDBLookupCombo;
QProducts: TADOQuery;
dsProducts: TDataSource;
acConfirm: TAction;
acCounteract: TAction;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
spGetInNumber: TADOStoredProc;
spGetOutNumber: TADOStoredProc;
tbtAddLine: TToolButton;
tbtDelLine: TToolButton;
ToolButton4: TToolButton;
pnlBottom: TPanel;
lblBillCaption: TLabel;
lblNO: TLabel;
acFinish: TAction;
dbtxtNo: TDBText;
ToolButton5: TToolButton;
lblSubmit: TLabel;
lblCancel: TLabel;
lblFinish: TLabel;
lblCancelInfo: TLabel;
spCounteract: TADOStoredProc;
lblMaker: TLabel;
lblSubmitUser: TLabel;
wwDBEdtMaker: TwwDBEdit;
wwDBEdtSubmitUser: TwwDBEdit;
lblCancelUser: TLabel;
wwDBEdtCancelUser: TwwDBEdit;
lblDate: TLabel;
wwPKDate: TwwDBDateTimePicker;
lblSubmitDate: TLabel;
wwPKSubmitDate: TwwDBDateTimePicker;
lblCancelDate: TLabel;
wwPKCancelDate: TwwDBDateTimePicker;
tbtFinish: TToolButton;
acImport: TAction;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
acBegin: TAction;
tbtBegin: TToolButton;
ToolButton3: TToolButton;
tbtDivider: TToolButton;
procedure acFirstExecute(Sender: TObject);
procedure acPriorExecute(Sender: TObject);
procedure acNextExecute(Sender: TObject);
procedure acLastExecute(Sender: TObject);
procedure acExitExecute(Sender: TObject);
procedure acNewExecute(Sender: TObject);
procedure acModifyExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
procedure dsMasterDataChange(Sender: TObject; Field: TField);
procedure dsMasterStateChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure acSaveExecute(Sender: TObject);
procedure acCancelExecute(Sender: TObject);
procedure acAddLineExecute(Sender: TObject);
procedure acDelLineExecute(Sender: TObject);
procedure QMasterBeforePost(DataSet: TDataSet);
procedure QMasterAfterPost(DataSet: TDataSet);
procedure QMasterBeforeDelete(DataSet: TDataSet);
procedure QMasterAfterDelete(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 QDetailBeforePost(DataSet: TDataSet);
procedure QMasterAfterCancel(DataSet: TDataSet);
procedure QDetailAfterInsert(DataSet: TDataSet);
procedure acConfirmExecute(Sender: TObject);
procedure acCounteractExecute(Sender: TObject);
procedure QMasterBeforeCancel(DataSet: TDataSet);
procedure acPrintExecute(Sender: TObject);
procedure acFinishExecute(Sender: TObject);
procedure wwDBLKProductCodeDblClick(Sender: TObject);
private
{ Private declarations }
protected
// bInsert :Boolean; {控制从表的 UpdateBacth}
bBatch: Boolean; {录入明细时,是否批量导入}
//iFunctionID :Integer; {模块标识ID}
iBillTypeID: Integer; {单据类型ID}
sMasterSql: string; {主表的Sql语句}
bCanNew, bCanModify, bCanDelete, bCanPrint, bCanConfirm, bCanCounteract, bCanBegin, bCanFinish: Boolean;
function CheckSave: Boolean; {检测当前数据是否保存函数}
function GetErrorInfo(E: EDatabaseError): string; {取错误描述信息和错误原码}
procedure GetPermiss; virtual; {得到当前用户的权限}
public
{ Public declarations }
end;
var
frmBillBase : TfrmBillBase;
implementation
uses DataModule, Global, Main, ProductFilter;
{$R *.dfm}
{检测当前数据是否保存函数}
function TfrmBillBase.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 TfrmBillBase.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 TfrmBillBase.GetPermiss;
begin
bCanNew := G_bAdmin;
bCanModify := G_bAdmin;
bCanDelete := G_bAdmin;
bCanPrint := G_bAdmin;
bCanConfirm := G_bAdmin;
bCanCounteract := G_bAdmin;
bCanBegin := G_bAdmin;
bCanFinish := 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;
bCanBegin := G_bAdmin;
bCanFinish := 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;
bCanBegin := FieldbyName('fStart').asBoolean;
;
bCanFinish := FieldbyName('fFinish').asBoolean;
end
end;
procedure TfrmBillBase.acFirstExecute(Sender: TObject);
begin
inherited;
QMaster.First;
end;
procedure TfrmBillBase.acPriorExecute(Sender: TObject);
begin
inherited;
QMaster.Prior;
end;
procedure TfrmBillBase.acNextExecute(Sender: TObject);
begin
inherited;
QMaster.Next;
end;
procedure TfrmBillBase.acLastExecute(Sender: TObject);
begin
inherited;
QMaster.Last;
end;
procedure TfrmBillBase.acExitExecute(Sender: TObject);
begin
inherited;
Close;
end;
{退出前,检测是否能退出}
procedure TfrmBillBase.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
inherited;
CanClose := CheckSave; //未保存则不能退出
end;
procedure TfrmBillBase.dsMasterDataChange(Sender: TObject; Field: TField);
begin
inherited;
{调用状态变化过程}
dsMasterStateChange(Sender);
end;
procedure TfrmBillBase.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;
acAddLine.Enabled := acSave.Enabled;
acDelLine.Enabled := acSave.Enabled;
wwDGDetail.ReadOnly := not acSave.Enabled;
acConfirm.Enabled := bCanConfirm //有确认操作权限
//and not QMaster.FieldByName('fSubmitFlag').AsBoolean //还未确认的单据
and not VarIsnull(QMaster.FieldValues['fID'])
and not QMaster.FieldbyName('fCancelFlag').asBoolean //还未作废的单据
and not acSave.Enabled;
acCounteract.Enabled := bCanCounteract //有冲销操作权限
and QMaster.FieldbyName('fSubmitFlag').asBoolean //已经确认的单据
and not QMaster.FieldbyName('fCancelFlag').asBoolean; //未冲销
acFind.Enabled := not acSave.Enabled;
if QMaster.FieldbyName('fSubmitFlag').asBoolean then
acConfirm.Caption := '弃审'
else
acConfirm.Caption := '审核';
//页脚信息
lblSubmitDate.Visible := QMaster.FieldbyName('fSubmitFlag').asBoolean;
lblSubmitUser.Visible := lblSubmitDate.Visible;
wwPKSubmitDate.Visible := lblSubmitDate.Visible;
wwDBEdtSubmitUser.Visible := lblSubmitDate.Visible;
lblCancelDate.Visible := QMaster.FieldbyName('fCancelFlag').asBoolean;
lblCancelUser.Visible := lblCancelDate.Visible;
wwPKCancelDate.Visible := lblCancelDate.Visible;
wwDBEdtCancelUser.Visible := lblCancelDate.Visible;
//Lable信息
lblSubmit.Visible := QMaster.FieldbyName('fSubmitFlag').asBoolean;
lblCancel.Visible := QMaster.FieldbyName('fCancelFlag').asBoolean;
lblCancel.Caption := '*已冲销*';
lblCancelInfo.Visible := lblCancel.Visible;
if QMaster.FieldbyName('fBeCancel').asBoolean then
lblCancelInfo.Caption := '被 ' + Trim(QMaster.FieldbyName('fCancelNO').asString) + '单 冲销'
else
lblCancelInfo.Caption := '冲销 ' + Trim(QMaster.FieldbyName('fCancelNO').asString) + '单';
lblFinish.Visible := false;
{设置编辑控件的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 TfrmBillBase.acNewExecute(Sender: TObject);
begin
inherited;
{$IFDEF DEMO}
if ((Date - G_StartDate) > c_Day) then
begin
Messagedlg('该演示版已过使用期!如果要继续使用,请和供应商联系!', mtWarning, [mbOk], 0);
G_bAppEnabled := false;
exit;
end;
{$ENDIF}
QMaster.Append;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -