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

📄 formperson.pas

📁 pasa人力资源考勤管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
   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 + -