yldm.pas

来自「delphi框架可以学习, 写的很好的」· PAS 代码 · 共 302 行

PAS
302
字号
unit yldm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BasicFind, Menus, ActnList, ImgList, StdCtrls, RzLstBox,
  RzBckgnd, RzButton, RzEdit, RzLabel, Mask, RzRadChk, RzPanel, ExtCtrls,
  Grids, DBGridEh, DB, ppEndUsr, ppBands, ppCache, ppClass, ppProd,
  ppReport, ppDB, ppComm, ppRelatv, ppDBPipe;

type
  TfrmYldm = class(TfrmBasicFind)
    RzPanel8: TRzPanel;
    dbgridList: TDBGridEh;
    actPrice: TAction;
    ppBasicData: TppDBPipeline;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure dbgridListDrawColumnCell(Sender: TObject; const Rect: TRect;
              DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
    procedure dbgridListTitleBtnClick(Sender: TObject; ACol: Integer;
              Column: TColumnEh);
  private
    { Private declarations }
    procedure doAfterPost(DataSet: TDataSet);
    procedure doAfterScroll(DataSet: TDataSet);

    procedure doMyOpen(Sender: TObject;   var _EventNote, _State: String); override;
    procedure doNewData(Sender: TObject;  var _EventNote, _State: String); override;
    procedure doSave(Sender: TObject;     var _EventNote, _State: String); override;
    procedure doCancel(Sender: TObject;   var _EventNote, _State: String); override;
    procedure doDelete(Sender: TObject;   var _EventNote, _State: String); override;
    procedure doCheck(Sender: TObject;    var _EventNote, _State: String); override;
    procedure doUnCheck(Sender: TObject;  var _EventNote, _State: String); override;

    procedure ButtonState(_IsActive, _IsEmpty, _IsModify, _IsCheck :Boolean); override;
  public
    { Public declarations }
  end;

var
  frmYldm: TfrmYldm;

implementation

uses dm32, MyPublic, dmc32;

{$R *.dfm}

procedure TfrmYldm.ButtonState(_IsActive, _IsEmpty, _IsModify,
  _IsCheck: Boolean);
begin
  if _IsActive and not _IsEmpty then
    _IsCheck := UseDataSet.FieldByName('SHBZ').AsInteger = SHBZ_OK;

  inherited;

  dbgridList.FindColumn('PRICE').Visible := actPrice.Visible;
  dbgridList.FindColumn('JGRQ').Visible  := actPrice.Visible;
end;

procedure TfrmYldm.doAfterPost(DataSet: TDataSet);
begin
  //企业规则
  with UseDataSet do
  try
    AfterPost := nil;
    Edit;
    if FieldByName('JGRQ').IsNull then FieldByName('JGRQ').AsDateTime := Now; 
    FieldByName('SRRQ').AsDateTime := Now;
    FieldByName('CZY').AsString    := CurrentUser.EmpName;
    Post;
  finally
    AfterPost := doAfterPost;
  end;
end;

procedure TfrmYldm.doCancel(Sender: TObject; var _EventNote, _State: String);
begin
  if not ShowMess('询问','确定要取消刚才对数据的修改吗?', MB_OKCANCEL) then Exit;

  _EventNote := '取消原料代码数据';
  _State := EV_OK;

  try
    if UseDataSet.State in [dsEdit, dsInsert] then
      UseDataSet.Cancel;
  except
    _State := EV_FAIL;
  end;
end;

procedure TfrmYldm.doCheck(Sender: TObject; var _EventNote, _State: String);
var ls_Code: String;
begin
  //先保存之前的输入
  with UseDataSet do
  try
    if not IsEmpty then
    if State in [dsEdit, dsInsert] then Post;

    ls_Code   := FieldByName('CODE').AsString;
    _EventNote:= '审核原料代码'+ ls_Code +'报价资料';
    _State    := EV_OK;

    Edit;
    FieldByName('SHBZ').AsInteger := ShBZ_OK;
    FieldByName('SHR').AsString   := CurrentUser.EmpName;
    FieldByName('SHRQ').AsDateTime:= Now;
    Post;
  except
    On E: Exception do
    begin
      ShowMess('系统错误','审核原料代码'+ ls_Code +'报价资料失败,具体为:'+E.Message, MB_ICONERROR);
      _State := EV_FAIL;
    end;
  end;
end;

procedure TfrmYldm.doDelete(Sender: TObject; var _EventNote, _State: String);
begin
  if not ShowMess('询问','确定要删除下面所选择的数据吗?', MB_OKCANCEL) then Exit;

  _EventNote := '删除原料代码'+ _Para2 +'[' +UseDataSet.FieldByName('CODE').AsString+']';
  _State := EV_OK;

  try
    if UseDataSet.State in [dsEdit, dsInsert] then
      UseDataSet.Post;

    UseDataSet.Delete;
  except
    _State := EV_FAIL;
  end;
end;

procedure TfrmYldm.doMyOpen(Sender: TObject; var _EventNote, _State: String);
var ls_SQL, ls_Err, ls_where: String;
begin
  ls_where := WhereSQL;
  _EventNote := '打开原料资料:'+ls_where;
  _State := EV_OK;

  if ls_where = '' then Exit;
  ls_SQL := 'SELECT * FROM MATERIAL WHERE '+ ls_where;
  ls_Err := OpenDataSet(UseDataSet, ls_SQL);
  if ls_err <> '' then
  begin
    ShowMess('系统错误','打开报价资料失败,具体为:'+ls_Err, MB_ICONERROR);
    _State := EV_FAIL;
  end;

  if UseDataSet.IsEmpty then
    ShowMess('提示','按您指定的条件未发现有效记录!', MB_OK);
end;

procedure TfrmYldm.doNewData(Sender: TObject; var _EventNote, _State: String);
var ls_SQL, ls_Err: String;
begin
  _EventNote := '新增原料代码资料';
  _State := EV_OK;
  dbgridList.SetFocus;

  with UseDataSet do
  try
    //打开一个空数据集
    if not Active then
    begin
      ls_SQL := 'SELECT * FROM MATERIAL WHERE 0=1';
      ls_Err := OpenDataSet(UseDataSet, ls_SQL);
      if ls_Err <> '' then
      begin
        ShowMess('系统错误','生成空数据集失败,具体为:'+ls_Err, MB_ICONERROR);
        _State := EV_FAIL;
        Exit;
      end;
    end;
    //先保存之前的输入
    if not IsEmpty then
    if State in [dsEdit, dsInsert] then Post;

    Append;
  except
    _State := EV_FAIL;
  end;
end;

procedure TfrmYldm.doSave(Sender: TObject; var _EventNote, _State: String);
begin
  _EventNote := '保存原料代码管理';
  _State := EV_OK;

  try
    if UseDataSet.State in [dsEdit, dsInsert] then
      UseDataSet.Post;
  except
    _State := EV_FAIL;
  end;
end;

procedure TfrmYldm.doUnCheck(Sender: TObject; var _EventNote, _State: String);
var ls_Code: String;
begin
  //先保存之前的输入
  with UseDataSet do
  try
    if not IsEmpty then
    if State in [dsEdit, dsInsert] then Post;

    ls_Code   := FieldByName('CODE').AsString;
    _EventNote:= '撤审原料代码'+ ls_Code +'报价资料';
    _State    := EV_OK;

    Edit;
    FieldByName('SHBZ').AsInteger := SHBZ_NOT;
    FieldByName('CSR').AsString   := CurrentUser.EmpName;
    FieldByName('CSRQ').AsDateTime:= Now;
    Post;
  except
    On E: Exception do
    begin
      ShowMess('系统错误','撤审原料代码'+ ls_Code +'报价资料失败,具体为:'+E.Message, MB_ICONERROR);
      _State := EV_FAIL;
    end;
  end;
end;

procedure TfrmYldm.FormCreate(Sender: TObject);
begin
  inherited;

  FindFields[1] := 'CODE LIKE ''%'+REPLACEKEY+'%''';
  FindFields[2] := 'SYFW='+REPLACEKEY;
  FindFields[3] := 'LX='''+REPLACEKEY+'''';
  FindFields[4] := 'FG='''+REPLACEKEY+'''';
  FindFields[5] := 'GG='''+REPLACEKEY+'''';
  FindFields[6] := 'FACTORY='''+REPLACEKEY+'''';
  FindFields[13] :='JGRQ';

  FindSQL[2] := 'SELECT CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_YLSYFW''';
  FindSQL[3] := 'SELECT CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_YLLX''';
  FindSQL[4] := 'SELECT CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_YLSTYLE''';
  FindSQL[6] := 'SELECT CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_STOCKER''';

  UseDataset := dm.qryMaterial;

  with dm.qryMaterial do
  begin
    AfterPost   := doAfterPost;
    AfterScroll := doAfterScroll;
    BeforeEdit  := doBeforeEdit;
  end;

  //处理DBGrid的快捷输入
  SetDBGridList(dbgridList.FindColumn('SYFW').PickList, dbgridList.FindColumn('SYFW').KeyList,
                'LISTFIELD', 'KEYFIELD',
                'SELECT NAME AS KEYFIELD, CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_YLSYFW''');
  SetDBGridList(dbgridList.FindColumn('LX').PickList, dbgridList.FindColumn('LX').KeyList,
                'LISTFIELD', 'KEYFIELD',
                'SELECT NAME AS KEYFIELD, CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_YLLX''');
  SetDBGridList(dbgridList.FindColumn('FACTORY').PickList, dbgridList.FindColumn('FACTORY').KeyList,
                'LISTFIELD', 'KEYFIELD',
                'SELECT NAME AS KEYFIELD, CODE +'' = ''+ NAME AS LISTFIELD FROM CODER WHERE ISOK ='+ IntToStr(SHBZ_OK) +' AND FZLX=''BASE_STOCKER''');

  //打开近一个月的原料数据
  OpenDataSet(dm.qryMaterial, 'SELECT * FROM MATERIAL WHERE SRRQ >= ''' + FormatDateTime('yyyy-mm-dd', Now-30) + ''' AND '+
                                                          ' SRRQ <= ''' + FormatDateTime('yyyy-mm-dd', Now+1)  + '''');
end;

procedure TfrmYldm.dbgridListDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
   with dbgridList.DataSource.DataSet do
     if FieldByName('SHBZ').AsInteger = SHBZ_NOT then
       dbgridList.Canvas.Brush.Color := $0084D7AB;

   dbgridList.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TfrmYldm.dbgridListTitleBtnClick(Sender: TObject; ACol: Integer;
  Column: TColumnEh);
begin
  DBGridTitleBtnClick(Sender, ACol, Column);
end;

procedure TfrmYldm.doAfterScroll(DataSet: TDataSet);
begin
  SetButtonState(DataSet);
end;

procedure TfrmYldm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  OpenDataSet(dmc.qryYldm, 'SELECT * FROM MATERIAL WHERE SHBZ ='+ IntToStr(SHBZ_OK));

  inherited;
end;

end.

⌨️ 快捷键说明

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