规则:用餐时间定义11:30-13:00(1.5小时)、17:00-18:00(1小时);
考勤记录是:2011-07-20 08:30:00~2011-07-20 17:30:00
考勤时间=out时间- in时间-用餐时间由于上班是弹性上班的,啥时都行,有的时候跨过3次用餐时间都有,像这种情况如何很好的判断跨越用餐时间的并扣除啊?大家给个思路,谢谢。

解决方案 »

  1.   

    这样有些问题的,比如17:00-18:00的用餐时间,既然是弹性工作,我想不用餐凑够了工作时间下班再用餐呢?
    并不能剥夺我这种选择吧
    你只记录一个in和一个out时间想把他做的这么细化不太可能
      

  2.   

    想这么细感觉最好是配合rfid门禁,记录每次进出的时间,在办公室时间汇总得到工作时间,当然要有弹性值,比如休息防水的时间
      

  3.   


    1.划分两大时间段 a.正常上班时间段8:00-18:30 b.加班时间段(例:18:30-8:00[第二天])2.分别记录两个时间段内各自时间段内的第一次打卡时间和最后一次打卡时间 wt1,wt2 和et1,et23.设午餐ft1=1.5h 晚餐ft2=1h 正常工作时间w 加班时间e4.若8:00<wt1<=8:30 and 11:30<wt2<=13:00 则 w=(11:30-8:30)-(8:30-wt1)=3-(8:30-wt1)
       若8:30<wt1<=11:30 and 11:30<wt2<=13:00 则 w=11:30-wt1
       若8:00<wt1<=8:30 and wt2<=11:30 则 w=(wt2-8:30)-(8:30-wt1)
       若8:30<wt1<=11:30 and wt2<=11:30 则 w=wt2-wt1   若8:00<wt1<=8:30 and 17:30<wt2<=18:00 则 w=(17:30-8:30)-ft1=9-ft1
       若8:30<wt1<11:30 and 17:30<wt2<=18:00 则 w=17:30-wt1-ft1
       若8:00<wt1<=8:30 and 13:00<wt2<=17:30 则 w=wt2-wt1-ft1-(8:30-wt1)
       若8:30<wt1<11:30 and 13:00<wt2<=17:30 则 w=wt2-wt1-ft1
      同理求8:30<=wt1<11:30,11:30<=wt1<13:00,13:00<=wt1<17:30,13:00<wt2<=17:30,17:30<wt2<=18:00
      的情况……5.同理求加班的情况注意两次8:00-8:30和18:00-18:30分是判断正常上班和加班的间隔区间 若正常上班后需要加班 
    需要员工两次打卡还需要判断无效的单次打卡情况 总之要根据需求定规则 也少不了人为的干预
      

  4.   

    用餐时间是可自定义,保存到数据库中的。
    员工打卡每次都是来时打一次上班记录,走时打一次下班记录。
    考勤记录是:
    员工id   打卡时间                   上班/下班  考勤机ip
    0001     2011-07-20 08:30:00    上班      192.168.1.20
    0001     2011-07-20 17:30:00    下班      192.168.1.20有时上班时间还跨天的,现在是要从这个一上一下的记录中扣除这个用餐时间。
    还要考虑漏打上班卡或下班卡的情况,估计简单的sql语句处理不了这个问题,现在只能想着C#该如何实现呢。
      

  5.   

    你的思路不对。既然吃饭时间及次数是灵活的,应该如下处理:第一次考勤-第二次考勤=t1
    第三次考勤-第四次考勤=t2 
    第五次考勤-第六次考勤=t3
    .....
    然后
    t1+t2+t3得到工作时间当然,还必须作一些规则,来判断考勤的有效性
    譬如
    8:00打第一次考勤
    8:01打第二考勤,显然要判断第二次考勤无效
      

  6.   

    lz是来问需求的?哈哈。个人觉得实现不是很困难,关键在于怎么去做判断,画个决策树来辅助你理清思路。http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91#.E5.BB.BA.E7.AB.8B.E6.96.B9.E6.B3.95
      

  7.   


    确实,多次打卡可以简化汇总的工作,但是实际情况是员工大多非常抵触多次打卡,总会有各种理由忘记打卡,后来没办法我这边做法是又采购了一个rfid门禁通道