📄 formperson.pas
字号:
if datamod.qryexchange.eof then
begin
datamod.qryexchange.close;
panel2.Visible :=false;
end
else begin
datamod.qryexchange.close;
toolbutton6.OnClick(sender);
end;
manyfield:=false; //设定dbgrid1,2可以进行多字段排序
fcount:=0; //最多一次可选择5个字段进行 atoz or ztoa
dbgrid:=0;
angry:=0;
end;
procedure Tformpeople.DBNavigator1BeforeAction(Sender: TObject;
Button: TNavigateBtn);
begin
case button of //判断dbnavigator产生的何种操作
nbinsert,nbedit: begin //新增,修改
if not assigned(formpersonal) then
formpersonal:=tformpersonal.create(application);
if button=nbedit then
begin
if length(datamod.adopersonal.fieldbyname('photo').asstring)>1 then
formpersonal.Image1.Picture.LoadFromFile(datamod.adopersonal.fieldbyname('photo').asstring);
end
else begin
formpersonal.DBCheckBox2.Checked:=false;
formpersonal.DBCheckBox3.Checked:=false;
formpersonal.DBCheckBox4.Checked:=true;
formpersonal.Edit1.Text :='';
end;
formpersonal.show;
end;
end;
end;
procedure Tformpeople.DBGrid2DblClick(Sender: TObject);
begin
if not assigned(formpersonal) then //单击dbgrid2时,同样产生修改人事主档的操作
dbnavigator1.BeforeAction (dbnavigator1,nbedit);
end;
//******************************************************
//用工号进行查找
procedure Tformpeople.ToolButton4Click(Sender: TObject);
begin
close;
end;
procedure Tformpeople.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
dbgrid_keypress(sender,key);
end;
procedure Tformpeople.FormKeyPress(Sender: TObject; var Key: Char);
begin
if activecontrol=dbgrid1 then exit;
if key=#13 then
begin
key:=#0;
selectnext(activecontrol,true,true);
end;
end;
procedure Tformpeople.tbnprintClick(Sender: TObject);
begin
if not assigned(reportformpeople) then
reportformpeople:=Treportformpeople.create(self);
reportformpeople.RadioGroup1.itemindex:=0;
reportformpeople.show;
end;
procedure Tformpeople.tbnfindClick(Sender: TObject); //查询按钮
begin
if assigned(formcanfind) then formcanfind.close;
findrecorder(datamod.adopersonal,'Adopersonal','per24010'); //调用publicfuction中的查询功能
end;
procedure Tformpeople.FormCreate(Sender: TObject);
var sr,tname,workno:String;
i,j:integer;
fixot:real;
log:Textfile;
begin
adoprof.Open;
adodept.Open;
adoprovname.open;
f:='ASC';
{ with datamod.ADOQuery1 do
begin
datamod.adosalset.open;
close;
sql.clear; //更新年龄
sql.Add('update per24010 set years=datediff(mm,indate,'''+datetostr(date)+''')/12+(datediff(mm,indate,'''+datetostr(date)+''')%12)*0.01');
sql.Add('update per24010 set try=0 where try=1 and datediff(mm,indate,'''+datetostr(date)+''')=(select trymonth from sal02010)');//试用期过後需自动转正
sql.Add('update per24010 set age=case when convert(int, substring(convert(varchar,getdate(),111),6,2))- convert(int,substring(convert(varchar, birthday, 111),6,2)) <0 '+
' then datediff(yy,birthday,getdate())-1 else case when convert(int, substring(convert(varchar,getdate(),111),6,2))- convert(int,substring(convert(varchar, birthday, 111),6,2))>0 '+
' then datediff(yy,birthday,getdate()) else case when convert(int, substring(convert(varchar,getdate(),111),9,2))- convert(int,substring(convert(varchar, birthday, 111),9,2)) >=0 '+
' then datediff(yy,birthday,getdate()) else datediff(yy,birthday,getdate())-1 end end end ');
//把离职人员离职到的人事资料把它marked,并把它写到per16010中
sql.Add('update per24010 set leave=1 where workno in (select workno from per15010 where agreedate<='''+datetostr(date)+''') ');
sql.Add('insert per16010 (workno,cardno,name,deptno,dept,prof,gradename,sexname,blood,birthday,age,marry,peopleID,provname,people,homeadd,reladd,reltel1,reltel2,reltel3,reltel4,degreename,coursename,university,visa,'+
'foreignlan,indate,leave,years,specname1,specname2,specname3,specname4,experince,introduce1,relation1,introduce2,relation2,memo,try,brushcard,scheno,dothing,factorykind,dayormon,basepay,profmoney,techmoney,deptmoney,money1,'+
'money2,add1,add2,present,fixot,otkind,manage,clearpay,templive,staymoney,meatmoney,other1,other2,decrease1,decrease2,insurance,cdate,operator,usefuldate,unusedate,photo,stoppay,ruleno,mankind,eightornine,operatorL,cdateL,reason,leavekind,leavedate) '+
' select a.workno,a.cardno,a.name,a.deptno,a.dept,a.prof,a.gradename,a.sexname,a.blood,a.birthday,a.age,a.marry,a.peopleID,a.provname,a.people,a.homeadd,a.reladd,a.reltel1,a.reltel2,a.reltel3,a.reltel4,a.degreename,a.coursename,a.university,a.visa,'+
'a.foreignlan,a.indate,a.leave,a.years,a.specname1,a.specname2,a.specname3,a.specname4,a.experince,a.introduce1,a.relation1,a.introduce2,a.relation2,a.memo,a.try,a.brushcard,a.scheno,a.dothing,a.factorykind,a.dayormon,a.basepay,a.profmoney,a.techmoney,'+
'a.deptmoney,a.money1,a.money2,a.add1,a.add2,a.present,a.fixot,a.otkind,a.manage,a.clearpay,a.templive,a.staymoney,a.meatmoney,a.other1,a.other2,a.decrease1,a.decrease2,a.insurance,a.cdate,a.operator,a.usefuldate,a.unusedate,a.photo,a.stoppay,a.ruleno,'+
'a.mankind,a.eightornine,'''+pubworkname+''','''+datetostr(date)+''',b.reason,b.leavekind,b.agreedate from per24010 a,per15010 b where a.workno=b.workno and leave=1 and a.workno not in (select workno from per16010)');
// sql.Add('delete from per24010 where leave=1 and workno in (select workno from per15010 where agreedate<='''+datetostr(date)+''') ');
//日期满足,把该员工标识为停薪留职
sql.Add ('update per28010 set state=1 where ((sdate<='''+datetostr(date)+''' and edate>='''+datetostr(date)+''') or edate<'''+datetostr(date)+''') and state=0 ');
//把处于停薪留职状态的人员,在人事主档里更新
sql.add('update per24010 set stoppay=1 where leave<>1 and stoppay<>1 and workno in (select workno from per28010 where state=1)');
//日期已失效,把该员工还原
sql.Add ('update per28010 set state=2 where edate<'''+datetostr(date)+''' and state=1 ');
//把人事主档停薪留职日期到的,自动取消mark
sql.add('update per24010 set stoppay=0 where leave<>1 and stoppay=1 and workno in (select workno from per28010 where state=2)');
sql.add('update per24010 set cardno=per_changecard.newcard from per_changecard where per_changecard.workno=per24010.workno and per_changecard.oldcard=per24010.cardno and ((per_changecard.invalidedate is null and '''+formatdatetime('yyyy/mm/dd',now)+'''>per_changecard.validedate) or (per_changecard.invalidedate is not null and '''+formatdatetime('yyyy/mm/dd',now)+''' between per_changecard.validedate and per_changecard.invalidedate))' );
sql.add('update per24010 set cardno=per_changecard.oldcard from per_changecard where per_changecard.workno=per24010.workno and per_changecard.newcard=per24010.cardno and per_changecard.invalidedate<='''+formatdatetime('yyyy/mm/dd',now)+'''');
execsql;
close;
//更新之前把要变更的档案放入历史档案中
tname:='per24010';
sql.Clear ;
sql.Add('select max(num) from history');
open;
if eof then
j:=1
else
j:=fields[0].AsInteger+1;
close;
sql.clear; //选出调薪人员资料生效日期已达到的人员,存入历史档案中
sql.Add ('select * from per24010 where workno in '+
' ( select workno from per27012 where workno=per24010.workno and '+
' cpusedate in (select max(cpusedate) from per27012 d where d.workno=per24010.workno and '+
' (isnull(d.cbasepay,0)<>isnull(per24010.basepay,0) or isnull(d.cprofpay,0)<>isnull(per24010.profmoney,0) or isnull(d.ctechpay,0)<>isnull(per24010.techmoney,0) or '+
' isnull(d.cdeptpay,0)<>isnull(per24010.deptmoney,0) ) ) and cpusedate<='''+datetostr(date)+''') ');
open;
while not eof do
begin
sr:='';
for i:=0 to Fields.Count-1 do
sr:=sr+Fields[i].AsString+'\';
datamod.adoquery2.sql.Clear;
datamod.adoquery2.sql.Add('insert history values('''+inttostr(j)+''','''+tname+''','''','''+pubworkname+''','''+formatdatetime('yyyy'+dateseparator+'mm'+dateseparator+'dd hh:mm:ss',now)+''','''+sr+''',0)' );
datamod.adoquery2.execsql;
j:=j+1;
next;
end;
//处理自动调薪
close;
sql.Clear;
////////////------------------------------////////////////////
//不夸年份的自动调薪
sql.Add('update per24010 set classname=classname+1,prof2=prof2+1 from sal02010 a where gradename=1 and classname=1 '+
' and left(convert(varchar,indate,111),4) = left(convert(varchar,getdate(),111),4) and '+
' convert(int,substring(convert(varchar,getdate(),111),6,2))-convert(int,substring(convert(varchar,indate,111),6,2))>=a.autosal and a.autosal<>0 and a.autosal is not null ');
//夸年份的自动调薪
sql.Add('update per24010 set classname=classname+1,prof2=prof2+1 from sal02010 a where gradename=1 and classname=1 '+
' and convert(int, left(convert(varchar,getdate(),111),4))-convert(int,left(convert(varchar,indate,111),4))=1 and '+
' convert(int,substring(convert(varchar,getdate(),111),6,2))<=a.autosal and convert(int,substring(convert(varchar,indate,111),6,2))>=10 '+
' and (convert(int,substring(convert(varchar,getdate(),111),6,2))+12) - convert(int,substring(convert(varchar,indate,111),6,2))>=a.autosal and a.autosal<>0 and a.autosal is not null');
//更新底薪
sql.add('update per24010 set basepay=a.Bmoney1 from per11010 a where classname=a.jno and gradename=a.gno ');
//更薪职务津贴
sql.add('update per24010 set meatmoney=a.prof from profmoney a where per24010.prof1=a.prof1 and per24010.prof2=a.prof2 ');
////////////////////////////////
sql.savetofile('c:\mydata.sql');
execsql;
close;
sql.clear; //选出职务调升,部门变动的人员资料生效日期已达到,更新之前,存入历史档案
sql.Add('select * from per24010 where workno in (select workno from per21010 b where workno=per24010.workno '+
' and usefuldate in (select max(usefuldate) from per21010 where workno=per24010.workno) and '+
' (b.ldept<>per24010.deptno or b.lprof<>per24010.prof) and b.usefuldate<=getdate() )' );
open;
while not eof do
begin
sr:='';
for i:=0 to Fields.Count-1 do
sr:=sr+Fields[i].AsString+'\';
datamod.adoquery2.sql.Clear;
datamod.adoquery2.sql.Add('insert history values('''+inttostr(j)+''','''+tname+''','''','''+pubworkname+''','''+formatdatetime('yyyy'+dateseparator+'mm'+dateseparator+'dd hh:mm:ss',now)+''','''+sr+''',0)' );
datamod.adoquery2.execsql;
j:=j+1;
next;
end;
close;
sql.clear; //更新人事主档中,部门变动的人员资料生效日期已达到的
sql.add('update per24010 set deptno=c.ldept,prof=c.lprof from '+
' ( select workno,ldept,lprof from per21010 b where b.usefuldate<=getdate() and '+
' b.usefuldate in (select max(usefuldate) from per21010 where workno=b.workno)) c '+
' where per24010.workno=c.workno and (c.ldept<>per24010.deptno or c.lprof<>per24010.prof)');
sql.Add('update per24010 set per24010.dept=pub05010.dept From pub05010 where per24010.deptno=dno');
execsql;
close;
sql.Add('select * from per24010 where workno in (select workno from per21010 b where '+
' usefuldate in (select max(usefuldate) from per21010 where workno=b.workno) and '+
' (b.ldept<>per24010.deptno or b.lprof<>per24010.prof) and b.usefuldate<=getdate() )' );
open; //选出异动人员薪资变化的情况,重新计算加班费
first;
while not eof do
begin
workno:=fieldbyname('workno').value;
fixot:=calcfixot(fieldbyname('otkind').asstring,workno);
datamod.query2.sql.clear;
datamod.query2.sql.text:='Update per24010 set fixot='+floattostr(fixot)+' where workno='''+workno+''' ';
datamod.query2.execsql;
datamod.query2.close;
next;
end;
AssignFile(log,extractfilepath(application.exename)+'Data\sysmsg.log');
rewrite(log);
writeln(log,'---------------------------'+datetostr(date)+'----------------------------------');
close;
sql.text:='Select * from per24010 where dayormon=1 and dateadd(mm,'+inttostr(datamod.adosalsettrymonth.asinteger)+',indate)='''+datetostr(date)+''' ';
open;
while not eof do
begin
writeln(log,pchar('日薪员工 工号='+fieldbyname('workno').asstring+',姓名='+fieldbyname('name').asstring+' 的员工,进厂日期='+fieldbyname('indate').asstring+',於'+datetostr(date)+'试用期满'));
next;
end;
close;
sql.text:='Select * from per24010 where dayormon=0 and dateadd(mm,'+inttostr(datamod.adosalsettrymonth1.asinteger)+',indate)='''+datetostr(date)+''' ';
open;
while not eof do
begin
writeln(log,pchar('月薪员工 工号='+fieldbyname('workno').asstring+',姓名='+fieldbyname('name').asstring+' 的员工'''+datetostr(date)+'''试用期满'));
next;
end;
close;
writeln(log,'---------------------------'+datetostr(date)+'----------------------------------');
closefile(log);
end; }
datamod.ADOpersonal.Close;
datamod.ADOpersonal.CursorType:=ctkeyset;
datamod.ADOpersonal.LockType :=ltpessimistic;
datamod.adopersonal.Open; //在击活窗体时,把adopersonal--人事主档打开
end;
procedure Tformpeople.SpeedButton1Click(Sender: TObject);
begin
panel2.Visible :=false;
datamod.qryexchange.close;
end;
procedure Tformpeople.ToolButton6Click(Sender: TObject);
begin
datamod.qryexchange.open;
if datamod.qryexchange.Eof then
begin
datamod.qryexchange.close;
Application.messagebox('当前没有录用人员的资料需转入人事主档','提示',mb_ok+mb_iconinformation);
exit;
end
else
panel2.Visible :=true;
end;
procedure Tformpeople.Panel2DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
panel2.Top :=x;
panel2.Left :=y;
end;
procedure Tformpeople.DBGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
accept:=true;
panel2.Top :=y;
panel2.Left :=x;
end;
procedure Tformpeople.Button1Click(Sender: TObject);
begin
DBNavigator1BeforeAction(Sender,nbinsert);
formpersonal.Button1.Click;
end;
procedure Tformpeople.DBGrid1TitleClick(Column: TColumn);
var db:Tdbgridsort;
begin
if angry=2 then
begin
angry:=0;
exit;
end;
db:=Tdbgridsort.create; //调用排序
db.sort(column,DATAMOD.ADOpersonal,f);
db.free;
angry:=1;
end;
procedure Tformpeople.N1Click(Sender: TObject);
var i:integer;
db:Tdbgrid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -