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

📄 ser520_03.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
字号:
unit Ser520_03;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Bas100_01, Menus, StdCtrls, Buttons, ExtCtrls,
  wwdbdatetimepicker, DB, ADODB;

type
  TSer520_03Form = class(TBas100_01Form)
    lblCode: TLabel;
    edtCode: TEdit;
    sbCode: TSpeedButton;
    edtName: TEdit;
    edtPerson: TEdit;
    lblPerson: TLabel;
    sbPerson: TSpeedButton;
    lblClass: TLabel;
    edtClass: TEdit;
    lblPriority: TLabel;
    edtPriority: TEdit;
    lblDays: TLabel;
    edtDays: TEdit;
    lblFromDate: TLabel;
    edtFromDate: TwwDBDateTimePicker;
    lblToDate: TLabel;
    edtToDate: TwwDBDateTimePicker;
    cbUnit: TComboBox;
    Bevel1: TBevel;
    bbtnOk: TBitBtn;
    bbtnExit: TBitBtn;
    qryHrm150: TADOQuery;
    qryHrm150H150_001: TAutoIncField;
    qryHrm150H150_002: TWideStringField;
    qryHrm150H150_003: TWideStringField;
    qryTas510: TADOQuery;
    qryTas510T510_001: TWideStringField;
    qryTas510T510_002: TWideStringField;
    qryTas510T510_005: TSmallintField;
    qryTas510T100_002: TWideStringField;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnOkClick(Sender: TObject);
    procedure bbtnExitClick(Sender: TObject);
    procedure edtPersonExit(Sender: TObject);
    procedure edtPersonEnter(Sender: TObject);
    procedure edtFromDateExit(Sender: TObject);
    procedure sbPersonClick(Sender: TObject);
    procedure sbCodeClick(Sender: TObject);
    procedure edtCodeExit(Sender: TObject);
  private
    AMode:string;
    ANoStrList,ANameStrList,ACodeStrList:TStringList;
    FDataSet:TADOQuery;
    procedure SetInterface;
    procedure SetPersonByEmpNo(APersonNo:string);
    procedure SetPersonByEmpID(APersonID:string);
    { Private declarations }
  public
    procedure OpenData(ANo:Integer;ADataSet:TADOQuery);
    { Public declarations }
  end;

var
  Ser520_03Form: TSer520_03Form;

implementation

uses SYSDATA, CommFun, HwSelData;

{$R *.dfm}

//取得执行人员和原因说明的显示、编辑、保存的字符串
//显示时:员工姓名1,员工姓名2...
//编辑时:员工编号1,员工编号2...
//保存时:[电脑编号1],[电脑编号2]...
//AType:类型,0=不加入其他字串,1=加入'['和']'字串
function GetPerson(AStringList:TStringList;AType:Integer=0):string;
var
  I:Integer;
  S:String;
begin
  for I:=0 to AStringList.Count-1 do
  begin
    if AType=0 then S:=S+','+AStringList[I] else S:=S+','+'['+AStringList[I]+']';
  end;
  Delete(S,1,1);  //删除第一个字符串','
  Result:=S;
end;

//检查输入的执行人员是否合法(用编辑格式)
function CheckPerson(APersonID:string):Boolean;
var
  AStringList:TStringList;
  I:Integer;
  S:string;
begin
  Result:=True;
  if APersonID='' then Exit;
  AStringList:=TStringList.Create;
  for I:=1 to Length(APersonID) do
  begin
    if Copy(APersonID,I,1)=',' then
    begin
      AStringList.Add(trim(S));
      S:='';
    end else
      S:=S+Copy(APersonID,I,1);
    if (I=Length(APersonID)) and (S<>'') then AStringList.Add(trim(S));
  end;
  for I:=0 to AStringList.Count-1 do
  begin
    if AStringList[I]='' then
    begin
      Result:=False;
      AStringList.Free;
      Exit;
    end;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select 1 from HRM150 where H150_002='+''''+AStringList[I]+'''');
    SYSDM.qryQuery.Open;
    if SYSDM.qryQuery.IsEmpty then
    begin
      Result:=False;
      AStringList.Free;
      Exit;
    end;
  end;
  AStringList.Free;
end;

//设置执行人员的显示数据(使用保存格式)
procedure TSer520_03Form.SetPersonByEmpNo(APersonNo:string);
var
  I:Integer;
  S:String;
begin
  if APersonNo='' then Exit;
  ANoStrList.Clear;
  ACodeStrList.Clear;
  ANameStrList.Clear;
  for I:=1 to Length(APersonNo) do
  begin
    if Copy(APersonNo,I,1)='[' then
      S:=''
    else if Copy(APersonNo,I,1)=']' then
    begin
      ANoStrList.Add(trim(S));
      S:='';
    end else
      S:=S+Copy(APersonNo,I,1);
  end;
  for I:=0 to ANoStrList.Count-1 do
  begin
    if ANoStrList[I]<>'' then
    begin
      SYSDM.qryQuery.Close;
      SYSDM.qryQuery.SQL.Clear;
      SYSDM.qryQuery.SQL.Add('select H150_002,H150_003 from HRM150 where H150_001='+ANoStrList[I]);
      SYSDM.qryQuery.Open;
      ACodeStrList.Add(SYSDM.qryQuery.FieldByName('H150_002').AsString);
      ANameStrList.Add(SYSDM.qryQuery.FieldByName('H150_003').AsString);
    end;
  end;
end;

//设置执行人员的显示数据(使用编辑格式)
procedure TSer520_03Form.SetPersonByEmpID(APersonID:string);
var
  I:Integer;
  S:String;
begin
  if APersonID='' then Exit;
  ANoStrList.Clear;
  ACodeStrList.Clear;
  ANameStrList.Clear;
  for I:=1 to Length(APersonID) do
  begin
    if Copy(APersonID,I,1)=',' then
    begin
      ACodeStrList.Add(trim(S));
      S:='';
    end else
      S:=S+Copy(APersonID,I,1);
    if I=Length(APersonID) then ACodeStrList.Add(trim(S));
  end;
  for I:=0 to ACodeStrList.Count-1 do
  begin
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 where H150_002='+''''+ACodeStrList[I]+'''');
    SYSDM.qryQuery.Open;
    ANoStrList.Add(SYSDM.qryQuery.FieldByName('H150_001').AsString);
    ANameStrList.Add(SYSDM.qryQuery.FieldByName('H150_003').AsString);
  end;
end;

procedure TSer520_03Form.OpenData(ANo:Integer;ADataSet:TADOQuery);
var
  APerson:string;
begin
  FDataSet:=ADataSet;
  AMode:='ADD';
  if ANo<>0 then
  begin
    AMode:='UPD';
    edtCode.Text:=ADataSet.FieldByName('S521_003').Value;
    if not qryTas510.Active then qryTas510.Open;
    qryTas510.Locate('T510_001',edtCode.Text,[]);
    edtName.Text:=qryTas510.FieldByName('T510_002').Value;
    edtClass.Text:=qryTas510.FieldByName('T100_002').Value;
    edtPriority.Text:=qryTas510.FieldByName('T510_005').Value;
    APerson:=ADataSet.FieldByName('S521_004').Value;
    SetPersonByEmpNo(APerson);  //设置执行人中的显示数据
    edtPerson.Text:=GetPerson(ANameStrList);
    edtDays.Text:=ADataSet.FieldByName('S521_005').Value;
    cbUnit.ItemIndex:=ADataSet.FieldByName('S521_006').Value;
    edtFromDate.Date:=ADataSet.FieldByName('S521_007').Value;
    edtToDate.Date:=ADataSet.FieldByName('S521_008').Value;
  end;
end;

procedure TSer520_03Form.SetInterface;
var
  S:String;
begin
  Caption:=GetDBString('SER52003001');  //派工记录
  lblCode.Caption:=GetDBString('SER52003002');  //任务编号
  lblClass.Caption:=GetDBString('SER52003003');  //任务类别
  lblPriority.Caption:=GetDBString('SER52003004');  //优先级别
  lblPerson.Caption:=GetDBString('SER52003005');  //执行人员
  lblDays.Caption:=GetDBString('SER52003006');  //预计工时
  lblFromDate.Caption:=GetDBString('SER52003007');  //预计开始
  lblToDate.Caption:=GetDBString('SER52003008');  //预计完成
  bbtnOk.Caption:=GetDBString('SER52003009');  //确定(&O)
  bbtnExit.Caption:=GetDBString('SER52003010');  //退出(&X)

  //时间单位	0=时,1=天,2=周,3=月
  S:=GetSysParams('TAS0001');
  if S<>'' then cbUnit.ItemIndex:=StrToInt(S);
  //允许单据录入时更改时间单位
  cbUnit.Enabled:=GetSysParams('TAS0005')='Y';
  if cbUnit.Enabled then cbUnit.Color:=AEnableColor else cbUnit.Color:=ADisableColor;
end;

procedure TSer520_03Form.FormCreate(Sender: TObject);
begin
  inherited;
  ANoStrList:=TStringList.Create;
  ANameStrList:=TStringList.Create;
  ACodeStrList:=TStringList.Create;
  SetInterface;
  qryTas510.Open;
end;

procedure TSer520_03Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  ANoStrList.Free;
  ANameStrList.Free;
  ACodeStrList.Free;
  qryTas510.Close;
end;

procedure TSer520_03Form.bbtnOkClick(Sender: TObject);
var
  I,J,ANo:Integer;
  S:String;
begin
  inherited;
//确定(&O)
  if trim(edtCode.Text)='' then
  begin
    ShowMsg('UMS10000277');  //任务编号不能为空
    edtCode.SetFocus;
    Abort;
  end;
  if not qryTas510.Locate('T510_001',edtCode.Text,[]) then
  begin
    ShowMsg('UMS10000285');  //输入的任务编号无效
    edtCode.SetFocus;
    Abort;
  end;
  if trim(edtPerson.Text)='' then
  begin
    ShowMsg('UMS10000286');  //执行人员不能为空
    edtPerson.SetFocus;
    Abort;
  end;
  if (trim(edtDays.Text)='') or (trim(edtDays.Text)='0') then
  begin
    ShowMsg('UMS10000287');  //预计工时不能为空或零
    edtDays.SetFocus;
    Abort;
  end;
  if (trim(edtFromDate.Text)='') or (trim(edtToDate.Text)='') then
  begin
    ShowMsg('UMS10000288');  //预计开始或完成日期不能为空
    if trim(edtFromDate.Text)='' then
      edtFromDate.SetFocus
    else
      edtToDate.SetFocus;
    Abort;
  end;
  if edtToDate.Date<edtFromDate.Date then
  begin
    ShowMsg('UMS10000289');  //预计完成日期不能小于预计开始日期
    edtToDate.SetFocus;
    Abort;
  end;
  edtPerson.SetFocus;
  SetFocus;
  //执行人員不能重復
  for I:=0 to ANoStrList.Count-1 do
  begin
    S:=ANoStrList[I];
    for J:=I+1 to ANoStrList.Count-1 do
    begin
      if S=ANoStrList[J] then
      begin
        ShowMsg('UMS10000323');  //执行人员不能重复
        edtPerson.SetFocus;
        Abort;
      end;
    end;
  end;

  if AMode='ADD' then
  begin
    ANo:=GetLastNo(FDataSet,'S521_002');
    FDataSet.Append;
  end else
  begin
    ANo:=FDataSet.FieldByName('S521_002').Value;
    FDataSet.Edit;
  end;
  FDataSet.FieldByName('S521_001').Value:='-1';
  FDataSet.FieldByName('S521_002').Value:=ANo;
  FDataSet.FieldByName('S521_003').Value:=edtCode.Text;
  FDataSet.FieldByName('S521_004').Value:=GetPerson(ANoStrList,1);
  FDataSet.FieldByName('S521_005').Value:=edtDays.Text;
  FDataSet.FieldByName('S521_006').Value:=cbUnit.ItemIndex;
  FDataSet.FieldByName('S521_007').Value:=edtFromDate.Date;
  FDataSet.FieldByName('S521_008').Value:=edtToDate.Date;
  FDataSet.Post;
  ModalResult:=1;
end;

procedure TSer520_03Form.bbtnExitClick(Sender: TObject);
begin
  inherited;
//退出(&X)
  Close;
end;

procedure TSer520_03Form.edtPersonExit(Sender: TObject);
begin
  inherited;
//执行人员
  if trim(edtPerson.Text)='' then Exit;
  //检查输入的执行人员是否合法(用编辑格式)
  if CheckPerson(edtPerson.Text) then
  begin
    SetPersonByEmpID(edtPerson.Text);  //设置执行人员数据
    edtPerson.Text:=GetPerson(ANameStrList);   //显示执行人员名称
  end else
  begin
    ShowMsg('UMS10000308');  //输入的执行人员无效
    edtPerson.SetFocus;
    Abort;
  end;
end;

procedure TSer520_03Form.edtPersonEnter(Sender: TObject);
begin
  inherited;
  edtPerson.Text:=GetPerson(ACodeStrList);   //显示执行人员编号
end;

procedure TSer520_03Form.edtFromDateExit(Sender: TObject);
begin
  inherited;
  if edtFromDate.Text='' then
  begin
    edtToDate.Text:='';
    Exit;
  end;
  try
    edtToDate.Date:=edtFromDate.Date+StrToFloat(edtDays.Text)-1;
  except
    ShowMsg('UMS10000348');  //输入的日期无效,请重新输入
    Abort;
  end;
end;

procedure TSer520_03Form.sbPersonClick(Sender: TObject);
begin
  inherited;
//执行人员查询
  if not edtPerson.Focused then edtPerson.SetFocus;
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryHrm150,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    if trim(edtPerson.Text)='' then
      edtPerson.Text:=qryHrm150.FieldByName('H150_002').AsString
    else
      edtPerson.Text:=trim(edtPerson.Text)+','+qryHrm150.FieldByName('H150_002').AsString;
    SetPersonByEmpID(edtPerson.Text);  //设置执行人员数据
  end;
end;

procedure TSer520_03Form.sbCodeClick(Sender: TObject);
begin
  inherited;
//任务编号查询
  if not edtCode.Focused then edtCode.SetFocus;
  qryTas510.Close;
  qryTas510.Open;
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryTas510,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    if qryTas510.IsEmpty then Exit;
    edtCode.Text:=qryTas510.FieldByName('T510_001').AsString;  //任务编号
    edtName.Text:=qryTas510.FieldByName('T510_002').AsString;  //任务名称
    edtClass.Text:=qryTas510.FieldByName('T100_002').AsString;  //任务类别
    edtPriority.Text:=qryTas510.FieldByName('T510_005').AsString;  //优先级别
  end;
end;

procedure TSer520_03Form.edtCodeExit(Sender: TObject);
begin
  inherited;
//任务编号
  if trim(edtCode.Text)='' then Exit;
  if qryTas510.Locate('T510_001',edtCode.Text,[]) then
  begin
    edtCode.Text:=qryTas510.FieldByName('T510_001').AsString;  //任务编号
    edtName.Text:=qryTas510.FieldByName('T510_002').AsString;  //任务名称
    edtClass.Text:=qryTas510.FieldByName('T100_002').AsString;  //任务类别
    edtPriority.Text:=qryTas510.FieldByName('T510_005').AsString;  //优先级别
  end else
  begin
    ShowMsg('UMS10000285');  //输入的任务编号无效
    edtCode.SetFocus;
    Abort;
  end;
end;

end.

⌨️ 快捷键说明

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