分享_一个考勤日报整理脚本。_人力资产
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 11  1/1   1  
作者
内容
achen0207  [个人空间]
QQ名  绍兴-和尚


注册  2016-09-24
发贴数  3
精华贴  1
原创贴  0
来自  
状态  正常

级别  会员
#1»发布于2016-10-07 16:37

//背景情况:仅需要实际出勤天数来核算工资。 
//作用:在考勤日报中 
//1、判断是否入职但为上岗人员,有则删除; 
//2、判断是否有离职但排版提早已经拍了的,有则删除; 
//3、判断人员的辅助分组:行政人员双休和法定假日需要加班申请后该日考勤才会计算;非行政人员法定假日需要加班申请;如果没有加班申请,则删除。 
//4、判断在超过排班(含指定加班时间)限定时间的加班,有没有加班申请记录,如果有的话,则延续加班时间,否则就不算加班。譬如规定规定是加班到16:40,但实际这个人加班到19:40,而公司又需要认可这个加班19:40的时间段,则必须额外写加班申请。


附件(登录后才可下载):1610071637_19.cpp  说明: 原文件:J01.考勤日帐脚本.CPP   大小:7774 Byte

        


qf2016  [个人空间]
QQ名  meng 113779009


注册  2016-01-17
发贴数  2533
精华数  0
原创贴  0
来自  
状态  正常

级别  版主
#2»发布于2016-10-07 16:43

感谢 achen0207 分享脚本,让更多的人可以参考。 
 
//作者:绍兴-和尚 
//时间:2016-10-07 
//背景情况:仅需要实际出勤天数来核算工资。 
//作用:在考勤日报中 
//1、判断是否入职但为上岗人员,有则删除; 
//2、判断是否有离职但排版提早已经拍了的,有则删除; 
//3、判断人员的辅助分组:行政人员双休和法定假日需要加班申请后该日考勤才会计算;非行政人员法定假日需要加班申请;,,,,如果没有加班申请,则删除。 
//4、判断在超过排班(含指定加班时间)限定时间的加班,有没有加班申请记录,如果有的话,则延续加班时间,否则就不算加班。譬如规定规定是加班到16:40,但实际这个人加班到19:40,而公司又需要认可这个加班19:40的时间段,则必须额外写加班申请。 
 
//离职日期,上岗日期,考勤日期,,,,,,,,,,,,,,,有的班次存在下班打卡1和下班打开2两种情况 
int leave_date,post_date,考勤日期,法定工作时间,法定内实际工作时间,法定假日,允许加班分钟数,允许加班结束时间; 
//员工状态,运行SQL语句,提取当前考勤年月,班次类型,人员类型表示行政非生产和生产类别 
string state, sql,考勤年月,班次,人员类型,删除当天排班标记; 
int 停工放假判断标识符,count,count_jb,n1; 
/* 
//员工请假 
int beg_time1,end_time1,请假时刻1,请假时刻2; 
int beg_date,end_date,n1,beg_time,end_time,n2; 
int 时刻1,时刻2,count_jb; 
string 时刻11,时刻21; 
*/ 
 
 
//---------------------------------------------------------------------- 
法定工作时间=合计分钟数+迟到分钟数+早退分钟数+缺勤分钟数-加班折算分钟数;//8小时内 
法定内实际工作时间=合计分钟数+迟到分钟数+早退分钟数-加班折算分钟数;//8小时内 
停工放假判断标识符=0; 
允许加班分钟数=0; 
班次=str_get_sub(班次编号,0,1); 
考勤日期=to_int(str_get_sub(class_date,0,8)); 
leave_date=get_emp_info(emp_id,"leave_date"); 
state=get_emp_info(emp_id,"sate"); 
post_date=get_emp_info(emp_id,"post_date"); 
考勤年月=str_get_sub(class_date,0,6); 
考勤年月=考勤年月+"%"; 
删除当天排班标记=计算结果; 
 
//---------------------------------------------------------------------- 
 
if (state=="F" && 考勤日期>leave_date) 

  //离职日>考勤日,则要过滤; 
  删除当天排班标记="C"; 
 
}else if (考勤日期<post_date) 
{   
  //上岗日<考勤日,则要过滤; 
  删除当天排班标记="C"; 
 
 
}else { 
 
//正常工作日     
 
 
    //--------------备注="班次类型:"+ 班次;-------------- 
    if (计算结果!="C"  )//C表示缺勤;H表示停工放假;至少上了半天 
    {     
      //--------------判断是否法定假日-------------- 
      法定假日=dt_get_name("Holidays",考勤日期); 
     
 
 
 
      //--------------判断人员的辅助分组,行政人员双休和法定假日需要加班申请后该日考勤才会计算,非行政人员法定假日需要加班申请-------------- 
        sql="select beg_time,hours,minutes,benefit_state from timer_overtime where 1=1 "; 
        sql=sql+" and emp_id='"+emp_id+"'"; 
        sql=sql+" and (overtime_date = '"+考勤日期+"' )"; 
        db_run(sql); 
        count_jb=db_row_count(); 
        if (count_jb>0) 
        { 
        //msg("1"); 
          允许加班分钟数=to_int(db_res(1)*60)+to_int(db_res(2)); 
          允许加班结束时间=to_int(str_get_sub(db_res(0),0,2))*60+to_int(str_get_sub(db_res(0),2,2))+允许加班分钟数; 
 
          if (get_week_id(class_date)==6 || get_week_id(class_date)==7  || 法定假日!=考勤日期) 
          {//如果该日是双休日或者法定假日 
            if (合计分钟数>允许加班分钟数) 
            { 
                合计分钟数=允许加班分钟数; 
                迟到分钟数=0; 
                早退分钟数=0; 
                加班分钟数=0;     
                缺勤分钟数=0; 
                if(允许加班分钟数>480){加班折算分钟数=合计分钟数-480;  }else{加班折算分钟数=0;  }                           
                法定工作时间=合计分钟数+迟到分钟数+早退分钟数+缺勤分钟数-加班折算分钟数;//8小时内 
                法定内实际工作时间=合计分钟数+迟到分钟数+早退分钟数-加班折算分钟数;//8小时内 
            } 
          }else 
          {//如果该日是普通工作日 
            if (加班折算分钟数>=允许加班分钟数)//如果实际加班时间比允许加班时间大,则按照加班时间来限定。 
            { 
              合计分钟数=合计分钟数-加班折算分钟数+允许加班分钟数; 
              加班折算分钟数=允许加班分钟数; 
              法定工作时间=合计分钟数+迟到分钟数+早退分钟数+缺勤分钟数-加班折算分钟数;//8小时内 
              法定内实际工作时间=合计分钟数+迟到分钟数+早退分钟数-加班折算分钟数;//8小时内 
 
            }else{//如果实际加班时间比加班申请时间小,但又超过了原有班次限定的加班时间。譬如规定规定是加班到16:40,但实际这个人加班到19:40,而公司又需要认可这个加班19:40的时间段,则必须额外写加班申请。 
 
 
                int 时刻on,时刻off,实际加班时间,beg_time_1,end_time_2;//上班打卡时间,下班打卡时间 
                时刻on=to_int(str_get_sub(on_time_1,0,2))*60+to_int(str_get_sub(on_time_1,3,2)); 
                时刻off=to_int(str_get_sub(off_time_2,0,2))*60+to_int(str_get_sub(off_time_2,3,2)); 
               
               
                sql="select beg_time_1,end_time_2 from timer_class_def where 1=1 "; 
                sql=sql+" and class_id='"+班次编号+"'";           
                db_run(sql); 
                count_jb=db_row_count(); 
                if (count_jb>0) 
                { 
                  //msg(count_jb); 
                  beg_time_1=to_int(str_get_sub(db_res(0),0,2))*60+to_int(str_get_sub(db_res(0),2,2)); 
                  //end_time_2=to_int(str_get_sub(db_res(1),0,2))*60+to_int(str_get_sub(db_res(1),2,2)); 
                  if(beg_time_1>时刻on){ 
                    时刻on=beg_time_1; 
                  }                 
                 
                } 
                 
                if(时刻off>允许加班结束时间){ 
                    时刻off=允许加班结束时间; 
                } 
                //实际加班时间 
                实际加班时间=时刻off-时刻on-法定工作时间; 
                if((时刻off-时刻on)<0){ 
                  实际加班时间=24*60+时刻off-时刻on-法定工作时间; 
 
                } 
 
 
                if(实际加班时间>加班折算分钟数 && 实际加班时间<=允许加班分钟数){ 
 
                  合计分钟数=合计分钟数-加班折算分钟数+实际加班时间; 
                  加班折算分钟数=实际加班时间; 
                  法定工作时间=合计分钟数+迟到分钟数+早退分钟数+缺勤分钟数-加班折算分钟数;//8小时内 
                  法定内实际工作时间=合计分钟数+迟到分钟数+早退分钟数-加班折算分钟数;//8小时内 
 
                } 
 
 
 
            } 
 
 
          } 
 
        }else{ 
        //msg("2"); 
          if (get_week_id(class_date)==6 || get_week_id(class_date)==7  || 法定假日!=考勤日期) 
          { 
              //get_emp_info(emp_id,"cross_group_id") 
            //辅助分组:A行政,B非生产,C生产 
            人员类型=get_emp_info(emp_id,"cross_group_id"); 
       
            if(人员类型=="A" ) 
            { 
              删除当天排班标记="C";//如果A行政人员双休日或者法定日没有加班申请单,则定义本项【缺勤】,后续进行删除 
            } 
            else if (人员类型=="B" && 法定假日!=考勤日期  ) 
            { 
              删除当天排班标记="C";//如果B非生产人员法定日没有加班申请单,则定义本项【缺勤】,后续进行删除 
            } 
            else if (人员类型=="C" && 法定假日!=考勤日期  ) 
            { 
              删除当天排班标记="C";//如果C生产人员法定日没有加班申请单,则定义本项【缺勤】,后续进行删除 
            } 
           
          } 
 
        } 
 
      if (删除当天排班标记!="C" )//C表示缺勤;H表示停工放假;至少上了半天 
      { 
 
            //-----------------班次计算------------------------ 
            switch (班次){ 
              case "A": 
                数值一=法定内实际工作时间/法定工作时间; 
                break; 
              case "Z": 
                数值二=法定内实际工作时间/法定工作时间; 
                break; 
              case "Y": 
                数值三=法定内实际工作时间/法定工作时间; 
                break; 
              case "B": 
                数值一=法定内实际工作时间/法定工作时间; 
                break; 
            } 
            数值四=num_dec_cut(加班折算分钟数/60.0/8.0,2); 
            数值七=数值一+数值二+数值三+数值四; 
 
          if (法定假日!=考勤日期) 
              { 
                 
                数值五=num_dec_cut(加班折算分钟数/60.0/8.0,2); 
                数值六=法定内实际工作时间/法定工作时间; 
                备注="法定假日"; 
 
              } 
           
      } 
   
 
     
 
   
 
       
 
  } 
 
 
 
 
   
 

 
 
//----------------------------------------------------------------------删除双休日节假日缺勤的记录 
//msg("注意,法定节假日加班,请在首页加班记录申请。"); 
//判断如果是周六周日缺勤,则清除这一排班日报记录 
if ((get_week_id(class_date)==6 || get_week_id(class_date)==7 || 法定假日!=考勤日期 )&& 删除当天排班标记=="C"){ 
 
      sql="delete from timer_list where 1=1 "; 
      sql=sql+" and emp_id='"+emp_id+"' "; 
      sql=sql+" and class_date='"+class_date+"'"; 
      sql=sql+" and class_id='"+班次编号+"'"; 
      db_run(sql); 
//  msg(class_date); 
   
}


        


qf2016  [个人空间]
QQ名  meng 113779009


注册  2016-01-17
发贴数  2533
精华数  0
原创贴  0
来自  
状态  正常

级别  版主
#3»发布于2016-10-07 16:45

leave_date=get_emp_info(emp_id,"leave_date");  
state=get_emp_info(emp_id,"sate");  
post_date=get_emp_info(emp_id,"post_date");  
 
会写sql的话,这种也可以并成一个语句直接从emp表取,以提高效率


        


afoo  [个人空间]
QQ名  常德-ZEN


注册  2010-04-08
发贴数  204
精华贴  6
原创贴  6
来自  常德-ZEN
状态  正常

级别  会员
#4»发布于2016-10-07 17:24

谢谢分享,学习了。


        




官方认证第三方服务团队  蒋逸凡(常德-ZEN) QQ:50636277
服务介绍: http://www.onlyit.cn/user_home?user_id=13498

achen0207  [个人空间]
QQ名  绍兴-和尚


注册  2016-09-24
发贴数  3
精华贴  1
原创贴  0
来自  
状态  正常

级别  会员
#5»发布于2016-10-08 08:01

sql="select leave_date,state,post_date from emp where  emp_id='"+emp_id+"'"; 
db_run(sql); 
count=db_row_count(); 
if (count>0) 

  leave_date=db_res(0); 
  state=db_res(1); 
  post_date=db_res(2); 
  //leave_date=get_emp_info(emp_id,"leave_date"); 
  //state=get_emp_info(emp_id,"sate"); 
  //post_date=get_emp_info(emp_id,"post_date"); 
}


        于 2016-10-08 08:01 被 achen0207 修改


webshow  [个人空间]


注册  2009-02-09
发贴数  133
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#6»发布于2016-10-10 12:00

有没有想过结合钉钉这个手机APP进行考勤管理呢




tonyjona  [个人空间]


注册  2014-05-28
发贴数  109
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#7»发布于2016-12-29 10:05

脚本的备注完整清晰,值得参考




tonyjona  [个人空间]


注册  2014-05-28
发贴数  109
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#8»发布于2017-09-04 17:32

不错的脚本风格,谢谢!




WhiteCloud  [个人空间]


注册  2017-12-11
发贴数  12
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#9»发布于2017-12-11 13:20

多谢楼主分享。。。




langjitianyaxyb  [个人空间]


注册  2017-04-30
发贴数  17
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#10»发布于2019-04-17 11:14

谢谢分享,值得认真学习




invader09  [个人空间]


注册  2019-05-08
发贴数  1
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#11»发布于2019-05-08 16:52

谢谢分享,值得认真学习





 11  1/1   1  

登录后方可发贴


[ 电话: 0571-85462761 王先生 QQ: 124520435 加入软件QQ群 - 杭州 - 浙ICP备19051128号-1 网安 33010402003225 ]