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

📄 billbase.pas

📁 产品信息系统!关于产品基础信息的系统!功能强大!
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -