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

📄 paymentbase.pas

📁 Barcode And LabelPrint
💻 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 + -