📄 ser520_03.pas.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 + -