.“周期天数”是指该部门所上班次的“上班”和“休息”的规律,例如:某个班次是上5天,休息2 天,其“周期天数”为 7 天。另一个三班制的班,上3天,休息1天,其“周期天数”为 4 天。3.“休息日”是指按规律,第几天是休息日。仍如上例:上 5 天,休2 天,周期为7天,“休息日”是第6天,第7天, 在“休自日”里输入“6,7”,以“逗号”分隔;而三班制的,上3天,休 1 天,第 4 天休息,则在“休息日”里输入“4”。这样的怎么计算出  就某个人的 排班表呢  谢谢了

解决方案 »

  1.   

    给你个思路:
    利用DaySpan函数计算出某一天距离开始上班的天数,然后求模运算,即可得这一天他是上的什么班
    例如某个人2006年1月8日上班,他的上班周期为7,我们要求他2007年10月21日该上那个班,那我们利用DaySpan函数
    求得天数为
    procedure TForm1.Button1Click(Sender: TObject);
    var
    daynum:double;
    a,b:TDate;
    begin
    a:=strtodate('2006-1-8');
    b:=strtodate('2007-10-21');
    daynum:=DaySpan(a,b);
    showmessage('2006-1-8'+'到'+'2007-10-21'+'共有'+floattostr(daynum)+'天');
    end;
    求得共有651天,那么651模7得
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    showmessage(inttostr(651 mod 7));
    end;
    得0;
    即为第7天,所以他这一天为休息日
      

  2.   

    曾经见过有个考勤软件是这样处理的.
    假设有五十个员工,分为三个班组:A班,B班,C班
    A班工作三天休息一天, B班工作五天休息两天,C班工作十天休息三天.第一步,录入员工信息,
    第二步,录入班组信息(即三个班组,A,B,C, 同时录入他们的开如执行日期及结束日期,工作时间,休息时间)
    班组名, 开始时间,  结束时间, 工作日期,休息日期
    A      2007-1-1  2009-1-1  3       1
    B      2007-2-1  2009-1-1  5       2
    C      2007-2-1  2009-1-1  10      3根据这两张表,你就可以得出,每个员工,任意一天是休息,还是工作(注意开始日期,是周期的开始)..还有一个表,就那就是每个班组的上下班时间表,
    根据这个表,这就可以知道每个员工,每一天打的考勤是迟到,早退还是无效记录....再加班员工每天的打卡记录表,基本上的表结构就是这样子的.