我用Delphi开发了一个人事考勤系统,在实际应用过程中,发现系统对夜班员工的工时计算上存在一些
问题,主要在两个方面: 1.员工由白班转成夜班或由夜班转成白班;2.夜班员工刷卡次数超过两次(夜班正常2次).
在系统中,后台数据库采用SQL Server,刷卡记录转换成Datetime类型,这样一来,夜班员工的下班刷卡就
变成了第二天的刷卡记录了,当遇到以上两方面的情况时,处理就比较麻烦,请高手给些建议吧.

解决方案 »

  1.   

    先排个班,再把打卡数据往排好班的记录上打,不存在你所提的两个问题
    上班时间  XXXX-XX-XX XX:XX:XX
    下班时间:
    上班提前打卡时间,下班延迟打卡时间取最早和最晚的记录就好了,中间不管它打几次卡。
      

  2.   

    自定义你一天的其实时间段,通过SQLServer的存储过程分离数据,处理
      

  3.   

    jinjazz,能否祥述你的方法,最好举例说明,多谢!
      

  4.   

    minjunw說的很清楚了,排班是計算每位員工考勤的根本依據.這一點不可否認,事實上,每位員工上班不是亂上的,他肯定有上司給他規定的具體班次時間.我同時也明白了樓主的意思,那就是希望軟件更智能些,能夠自動修正排班錯誤,樓主,你說我講的對麼?    我認為,如果排班錯誤,那麼考勤計算結果必然出現異常,如缺卡,遲到,早退時間偏大,下條記錄的上班時間與上條記錄的下班時間相同等等,你可以通過判斷,設置為異常標記,待計算完考勤後,再來人工處理異常.    另外一種辦法可以設置模糊排班,可以利用模糊數學原理,設定員工可能上的班次,軟件智能匹配,這種方法比較複雜,且會影響速度和效率,最好是和固定排班結合使用.    本人也是做這個的,我們可以互相學習和交流.
      

  5.   

    不用考虑其他的,唯一的标准就是时间;
    把你的一段记录按工号和时间排序,游标遍历一下,按你的时间规则取出员工每日的两条记录就可以了,其他的多余记录都丢掉。一次处理几万记录的时间不成问题的;只要你会写一般的T-SQL存储过程,熟悉一点T-SQL语法就能搞定;因为我有过商业应用具体代码不方便给你;但的确没什么难度
      

  6.   

    这里有代码可以下载:  http://www.datcn.com/luntan/list.asp?boardid=10
      

  7.   

    功能介绍:
    純動態系統﹐界面﹑欄位﹑報表均可自定義﹐內置delphi7.0解釋器﹐支持運行期間二次開發。 
    考勤﹐工資部分的計算方法﹐計算項目均可完全由客戶自行定義﹗
      

  8.   

    谢谢各位的支持,大概有好几个月没能用CSDN与大家交流了(因为所在的公司不让上网,真郁闷!现在换了公司后,才可以),前些时间用VB,现在又用回Delphi了(暂时不做人事考勤方面的项目),希望能与各位继续交流探讨,共同提高!