chaingspbasefrm.pas

来自「群星医药系统源码」· PAS 代码 · 共 450 行

PAS
450
字号
unit ChainGSPBaseFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus, ActnList, ModuleAction, TB2Dock, ImgList, IMainFrm,
  Buttons, RzButton, TB2Item, TB2Toolbar, DB, DBClient, MConnect, xBaseFrm,
  ckDBClient, ceGlobal, uDataTypes, DbFuncs, DataExportFrm, RepSelectFrm,
  StdCtrls, Mask, RzEdit, RzDBEdit, ComCtrls, RzDTP, RzDBDTP, DBCtrls;

type
  TRecState = (rsAll, rsDoNothing, rsAudited, rsCompleted, rsDoNothingAndAudited, rsAuditedAndCompleted);
  TFmChainGSPBase = class(TxBaseForm)
    TBDock2: TTBDock;
    TBDock4: TTBDock;
    TBDock3: TTBDock;
    TBDock1: TTBDock;
    Toolbar1: TTBToolbar;
    TBControlItem1: TTBControlItem;
    TBSeparatorItem4: TTBSeparatorItem;
    TBItem4: TTBItem;
    TBItem3: TTBItem;
    TBItem2: TTBItem;
    TBItem9: TTBItem;
    TBItem8: TTBItem;
    TBSeparatorItem1: TTBSeparatorItem;
    TBItem1: TTBItem;
    TBItem5: TTBItem;
    TBItem17: TTBItem;
    TBSeparatorItem3: TTBSeparatorItem;
    TBItem11: TTBItem;
    TBItem10: TTBItem;
    TBSeparatorItem5: TTBSeparatorItem;
    TBItem16: TTBItem;
    TBItem15: TTBItem;
    TBItem14: TTBItem;
    TBItem13: TTBItem;
    TBSeparatorItem2: TTBSeparatorItem;
    TBItem6: TTBItem;
    TBItem7: TTBItem;
    TBItem12: TTBItem;
    RzMenuToolbarButton1: TRzMenuToolbarButton;
    ImageList1: TImageList;
    TBBackground1: TTBBackground;
    ActionList1: TActionList;
    ActInsert: TModlAction;
    ActUpdate: TModlAction;
    ActDelete: TModlAction;
    ActAudit: TModlAction;
    ActRevert: TModlAction;
    ActQuery: TModlAction;
    ActPrint: TModlAction;
    ActDesignReport: TModlAction;
    ActImport: TModlAction;
    ActExport: TModlAction;
    ActViewMoney: TModlAction;
    ActBillDetail: TModlAction;
    ActAddSubItem: TAction;
    ActDelSubItem: TAction;
    ActSave: TAction;
    ActCancel: TAction;
    ActExit: TAction;
    ActFirst: TAction;
    ActPrior: TAction;
    ActNext: TAction;
    ActLast: TAction;
    ActRefresh: TAction;
    ActFieldLayout: TModlAction;
    ActDataExport: TModlAction;
    ActBillTurn: TModlAction;
    pMenuOthers: TPopupMenu;
    R1: TMenuItem;
    X1: TMenuItem;
    ImgPopMenu: TImageList;
    plMain: TPanel;
    cdsMain: TckClientDataSet;
    DCOMConnection1: TDCOMConnection;
    dsMain: TDataSource;
    procedure ActInsertExecute(Sender: TObject);
    procedure ActUpdateExecute(Sender: TObject);
    procedure ActDeleteExecute(Sender: TObject);
    procedure cdsMainBeforeDelete(DataSet: TDataSet);
    procedure cdsMainBeforeInsert(DataSet: TDataSet);
    procedure cdsMainAfterOpen(DataSet: TDataSet);
    procedure cdsMainBeforeEdit(DataSet: TDataSet);
    procedure ActSaveExecute(Sender: TObject);
    procedure ActCancelExecute(Sender: TObject);
    procedure ActFirstExecute(Sender: TObject);
    procedure ActPriorExecute(Sender: TObject);
    procedure ActNextExecute(Sender: TObject);
    procedure ActLastExecute(Sender: TObject);
    procedure ActRefreshExecute(Sender: TObject);
    procedure ActQueryExecute(Sender: TObject);
    procedure ActPrintExecute(Sender: TObject);
    procedure ActDataExportExecute(Sender: TObject);
    procedure ActExitExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cdsMainBeforeOpen(DataSet: TDataSet);
    procedure ActAuditExecute(Sender: TObject);
  private
    { Private declarations }
    FCanInsert,FCanEdit,
    FCanAudit,FCanRevert: boolean;
    FMasterDataSet: TClientDataSet;
    FRecState: TRecState;
    procedure SetMasterDataSet(const Value: TClientDataSet);
    procedure SetCaption;
    procedure SetRecState(const Value: TRecState);
  protected
    { Public declarations }
    iFmMain:IMainForm;
    iClientID :integer;
    LogonInfo: PLogonInfo;
    LocSetting: PLocSetting;
    CdsFieldProPerty :TckClientDataSet;
    procedure SetDataControlState;   //如果数据控件的Tag为-2表示ReadOnly且Color为背景色
  public
    svrMain, SvrCommon: TDispatchConnection;
    EditMode: integer;   //数据集状态:0:浏览  1:修改  2:插入
    property  MasterDataSet: TClientDataSet read FMasterDataSet write SetMasterDataSet;
    property  RecState: TRecState read FRecState write SetRecState;
    function  GetBillNo(BillType: string): string;
    procedure CheckAudit(Audited: boolean);
    procedure CheckApprove(Approved: boolean);
    procedure CheckEditMode;
  end;

var
  FmChainGSPBase: TFmChainGSPBase;

implementation
uses  ShowProgress;

{$R *.dfm}

procedure TFmChainGSPBase.FormCreate(Sender: TObject);
begin
  inherited;
  CdsFieldProPerty := TckClientDataSet.Create(self);
  SetGressHint('正在登录到GSP管理服务器...');
  iFmMain:=Application.mainForm as iMainForm;
  LogonInfo := IFmMain.IFmMainEx.LogonInfo;
  LocSetting := IFmMain.IFmMainEx.GetLocSetting;
  SvrCommon := iFmMain.GetConnection(Handle,'','CommonSvr.CommonRDM');
  CdsFieldProPerty.RemoteServer := SvrCommon;
  CdsFieldProPerty.ProviderName := 'dspTemp';
  SetGressHint('读取用户操作权限...');
  IFmMain.SetActionStatus(ActionList1, hInstance, self.ClassName);
  iClientID:=IFmMain.IFmMainEx.ClientID;
  //记下相关权限
  FCanInsert := ActInsert.Enabled;
  FCanEdit := ActUpdate.Enabled;
  FCanAudit := ActAudit.Enabled;
  FCanRevert := ActRevert.Enabled;

  DefCaption := Caption;
end;

procedure TFmChainGSPBase.FormShow(Sender: TObject);
begin
  inherited;
  Color := FormBackColor;
  TbDock1.Color := FormBackColor;
  TbDock2.Color := FormBackColor;
  TbDock3.Color := FormBackColor;
  TbDock4.Color := FormBackColor;
  Toolbar1.Color := Color;
  SetDataControlState;
end;

procedure TFmChainGSPBase.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TFmChainGSPBase.ActInsertExecute(Sender: TObject);
begin
  if (not cdsMain.Active) or (cdsMain.State in dsEditModes) then Abort;
  EditMode := 2;
  SetCaption;
  cdsMain.Insert;
end;

procedure TFmChainGSPBase.ActUpdateExecute(Sender: TObject);
begin
  if (not cdsMain.Active) or cdsMain.IsEmpty or (cdsMain.State in dsEditModes) then Abort;
  EditMode := 1;
  SetCaption;
  cdsMain.Edit;
end;

procedure TFmChainGSPBase.ActDeleteExecute(Sender: TObject);
begin
  if (not cdsMain.Active) or cdsMain.IsEmpty or (cdsMain.State in dsEditModes) then Abort;
  cdsMain.Delete;
  //不马上提交,让用户有机会选择保存或取消修改
  ActSave.Enabled := true;
  ActCancel.Enabled := true;
end;

procedure TFmChainGSPBase.cdsMainBeforeOpen(DataSet: TDataSet);
begin
  if not ActQuery.Enabled then Abort;
end;

procedure TFmChainGSPBase.cdsMainBeforeDelete(DataSet: TDataSet);
begin
  if MessageBox(Handle,'确定要删除当前记录吗?','提示',MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDNO then
    Abort;
end;

procedure TFmChainGSPBase.cdsMainBeforeInsert(DataSet: TDataSet);
begin
  if (not FCanInsert) or (EditMode <> 2) then
    Abort;
  ActSave.Enabled := true;
  ActCancel.Enabled := true;
  ActInsert.Enabled := false;
  ActUpdate.Enabled := false;
end;

procedure TFmChainGSPBase.cdsMainBeforeEdit(DataSet: TDataSet);
begin
  if (not FCanEdit) or (EditMode <> 1) then
    Abort;
  ActSave.Enabled := true;
  ActCancel.Enabled := true;
  ActInsert.Enabled := false;
  ActUpdate.Enabled := false;
end;

procedure TFmChainGSPBase.cdsMainAfterOpen(DataSet: TDataSet);
begin
  EditMode := 0;
  SetCaption;
end;

procedure TFmChainGSPBase.ActSaveExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  if cdsMain.State in dsEditModes then
    cdsMain.Post;
  if cdsMain.ApplyUpdates(0)>0 then
  begin
    MessageBox(Handle,'保存数据失败!',nil,MB_ICONEXCLAMATION);
    EditMode := 1;
    cdsMain.Edit;
  end
  else
  begin
    EditMode := 0;
    SetCaption;
    ActSave.Enabled :=false;
    ActCancel.Enabled := false;
    ActInsert.Enabled := FCanInsert;
    ActUpdate.Enabled := FCanEdit;
  end;
end;

procedure TFmChainGSPBase.ActCancelExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  if cdsMain.ChangeCount > 0 then
    if MessageBox(Handle,PChar(Format('共有%d项未保存的修改,确定要取消吗?',[cdsMain.ChangeCount])),'提示',MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2)=IDNO then
      exit;
  cdsMain.CancelUpdates;
  EditMode := 0;
  SetCaption;
  ActSave.Enabled :=false;
  ActCancel.Enabled := false;
  ActInsert.Enabled := FCanInsert;
  ActUpdate.Enabled := FCanEdit;
end;

procedure TFmChainGSPBase.ActFirstExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  CheckEditMode;
  cdsMain.First;
  ActFirst.Enabled := false;
  ActPrior.Enabled := ActFirst.Enabled;
  ActLast.Enabled := true;
  ActNext.Enabled := true;
end;

procedure TFmChainGSPBase.ActPriorExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  CheckEditMode;
  cdsMain.Prior;
  ActFirst.Enabled := (cdsMain.RecordCount>0) and (not cdsMain.Bof);
  ActPrior.Enabled := ActFirst.Enabled;
  ActLast.Enabled := true;
  ActNext.Enabled := true;
end;

procedure TFmChainGSPBase.ActNextExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  CheckEditMode;
  cdsMain.Next;
  ActLast.Enabled := (cdsMain.RecordCount>0) and (not cdsMain.Eof);
  ActNext.Enabled := ActLast.Enabled;
  ActFirst.Enabled := true;
  ActPrior.Enabled := true;
end;

procedure TFmChainGSPBase.ActLastExecute(Sender: TObject);
begin
  if not cdsMain.Active then exit;
  CheckEditMode;
  cdsMain.Last;
  ActLast.Enabled := false;
  ActNext.Enabled := false;
  ActFirst.Enabled := true;
  ActPrior.Enabled := true;
end;

procedure TFmChainGSPBase.ActRefreshExecute(Sender: TObject);
begin
  CheckEditMode;
  if not cdsMain.Active then exit;
  if cdsMain.State in dsEditModes then
    cdsMain.Post;
  if cdsMain.ChangeCount > 0 then
    MessageBox(Handle,PChar(Format('共有%d项未保存的修改,请保存或取消后再刷新数据!',[cdsMain.ChangeCount])),'警告',MB_ICONEXCLAMATION)
  else
    cdsMain.Refresh;
  //数据刷新之后重设记录移动按钮
  ActFirst.Enabled := (cdsMain.RecordCount>0) and (not cdsMain.Bof);
  ActPrior.Enabled := ActFirst.Enabled;
  ActLast.Enabled := (cdsMain.RecordCount>0) and (not cdsMain.Eof);
  ActNext.Enabled := ActLast.Enabled;
end;

procedure TFmChainGSPBase.ActQueryExecute(Sender: TObject);
begin
  //查询
end;

procedure TFmChainGSPBase.ActPrintExecute(Sender: TObject);
begin
  //报表
  SelRepPrint(Self.Name,[cdsMain],Self.Caption,ActDesignReport.Enabled);
end;

procedure TFmChainGSPBase.ActDataExportExecute(Sender: TObject);
begin
  //导出数据
  ExportData([cdsMain], self.Caption, '');
end;

procedure TFmChainGSPBase.ActExitExecute(Sender: TObject);
begin
  close;
end;

procedure TFmChainGSPBase.SetMasterDataSet(const Value: TClientDataSet);
begin
  FMasterDataSet := Value;
end;

procedure TFmChainGSPBase.SetCaption;
begin
  case EditMode of
  0: Caption := DefCaption;
  1: Caption := DefCaption + '--修改';
  2: Caption := DefCaption + '--新增';
  end;
end;

function TFmChainGSPBase.GetBillNo(BillType: string): string;
begin
  Result := BuildBillNo(BillType);
end;

procedure TFmChainGSPBase.SetRecState(const Value: TRecState);
begin
  FRecState := Value;
end;

procedure TFmChainGSPBase.ActAuditExecute(Sender: TObject);
begin
  if (not cdsMain.Active) or cdsMain.IsEmpty then Abort;
  CheckEditMode;
end;

procedure TFmChainGSPBase.CheckAudit(Audited: boolean);
begin
  if Audited then
  begin
    MessageBox(Handle,'当前数据已审核!不能再修改。','警告',MB_ICONEXCLAMATION);
    Abort;
  end;
end;

procedure TFmChainGSPBase.CheckApprove(Approved: boolean);
begin
  if Approved then
  begin
    MessageBox(Handle,'当前数据已审批!不能再修改。','警告',MB_ICONEXCLAMATION);
    Abort;
  end;
end;

procedure TFmChainGSPBase.CheckEditMode;
begin
  if not cdsMain.Active then Abort;
  if (EditMode >0) or (cdsMain.State in dsEditModes) then
  begin
    MessageBox(Handle,'正在编辑数据!请保存或取消后再试','警告',MB_ICONEXCLAMATION);
    Abort;
  end;
end;

procedure TFmChainGSPBase.SetDataControlState;
var
  cm: TComponent;
  i : integer;
begin
  for i :=0 to Self.ComponentCount-1 do
  begin
    cm := Self.Components[i];
    if cm.Tag = -2 then
    begin
      if cm is TRzDBEdit then
      begin
        TRzDBEdit(cm).Color := Self.Color;
        TRzDBEdit(cm).FocusColor := Self.Color;
      end
      else if cm is TRzDBMemo then
      begin
        TRzDBMemo(cm).Color := Self.Color;
        TRzDBMemo(cm).FocusColor := self.Color;
      end
      else if cm is TRzDBDateTimePicker then
      begin
        TRzDBDateTimePicker(cm).Color := Self.Color;
        TRzDBDateTimePicker(cm).FocusColor := Self.Color;
      end;
    end;
  end;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?