Foxtable(狐表)用户栏目专家坐堂 → 加班统计条件


  共有2806人关注过本帖树形打印复制链接

主题:加班统计条件

美女呀,离线,留言给我吧!
zhangning
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
加班统计条件  发帖心情 Post By:2016/8/9 13:37:00 [显示全部帖子]

月末将考勤数据导入到狐表,表名:考勤机

图片点击可在新窗口打开查看此主题相关图片如下:5.png
图片点击可在新窗口打开查看
加班的定义是:

从17:05开始,30分未单位,
17:05  ~  17:35  为0小时,
17:35(含)  ~  18:05  为0.5小时
18:05(含) ~18:35  为1小时,

依次类推,

如不是节假日,也不是周六日,就将自动判断的加班小时数放在“一倍半加班H”列处,
如不是节假日,是周六日,将放于“二倍加班H”处,
如是节假日,将放于“三倍加班H”处

请问老师,如何达到这种效果?

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/9 15:10:00 [显示全部帖子]

老师,感觉您说的意思不太对呢

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/9 15:15:00 [显示全部帖子]

根据签退时间,并根据公司的加班定义,设定好代码,自动算出(不用人去算)加班小时数,
并根据日期,判定出是1.5倍,还是2倍,

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/9 15:53:00 [显示全部帖子]

老师,是不是应该用条件,
例如,签退时间  大于等于17:05,小于17:35时,不算加班(加班小时数为O小时)
                     大于等于17:35,小于18:05时,加班小时数为0.5小时
                     大于等于18:05,小于18:35时,加班小时数未1小时

这样的代码如何写呢

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/11 12:53:00 [显示全部帖子]

老师,需要根据“签到时间”、“签退时间”、“星期”三列来判断加班的情况,
我们公司的加班是从17:05分开始,满30分才算30分,不满不算
也就是  签退时间  大于等于17:05,小于17:35时,不算加班(加班小时数为O小时)
                     大于等于17:35,小于18:05时,加班小时数为0.5小时
                     大于等于18:05,小于18:35时,加班小时数未1小时
如何在哪个事件中编写代码,判断出加了多少小时班,并根据如是周一~周五 ,就将当日的加班结果自动显现在“一倍半加班H”列中,
同样,如是周六和周日,就将当日的加班结果显现在“二倍加班H”列中,
如选中了“节假日”(逻辑列),就放入“三倍加班H”列中,
请老师再帮帮忙,我老是搞不定。


 回到顶部
美女呀,离线,留言给我吧!
zhangning
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/11 12:57:00 [显示全部帖子]

忘了补充一点,如加到晚上7点半以后的,晚上7点到7点半之间是休息的,也就是要扣除30分

上夜班12个小时的,要扣除2个小时

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/11 13:21:00 [显示全部帖子]

周六  日  是从8点开始,中午12点开始,休息一个小时,如下午5点下班,则加班8个小时

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/12 15:53:00 [显示全部帖子]

编写了以下代码:
Select Case e.DataCol.Name
    Case "签退时间", "日期","签到时间"
        Dim d As Date = e.DataRow("日期")
        Dim dt As Date = e.DataRow("签退时间")
        Dim qd As Date = e.DataRow("签到时间")
        If d.DayOfWeek = 0 OrElse d.DayOfWeek = 6 Then
            Dim bz As Date = "8:00"
            If qd <= "8:00" Then
                qd = "8:00"
            ElseIf qd <= "8:30" Then
                qd = "8:30"
            ElseIf qd <= "9:00" Then
                qd = "9:00"
            ElseIf qd <= "9:30" Then
                qd = "9:30"
            ElseIf qd <= "10:00" Then
                qd = "10:00"
            ElseIf qd <= "10:30" Then
                qd = "10:30"
            ElseIf qd <= "11:00" Then
                qd = "11:00"
            ElseIf qd <= "11:30" Then
                qd = "11:30"
            ElseIf qd <= "12:00" Then
                qd = "12:00"
            ElseIf qd <= "13:00" Then
                qd = "12:00"
            ElseIf qd <= "13:30" Then
                qd = "13:30"
            ElseIf qd <= "14:00" Then
                qd = e.DataRow("签到时间")
            End If
            Dim sp As TimeSpan = dt - qd
            Dim n As Integer = sp.TotalMinutes / 30
            e.DataRow("二倍加班H") = n*0.5 -1
        Else
            Dim bz As Date = "17:01"
            If dt >= bz Then
                If dt >= "19:35" Then
                    dt = dt.AddMinutes(-30)
                ElseIf dt < "17:35" Then
                    dt = "17:01"
                ElseIf dt <= "19:05" Then
                    dt = e.DataRow("签退时间")
                ElseIf dt < "19:35"
                    dt = "19:05"
                End If
                Dim sp As TimeSpan = dt - bz
                Dim n As Integer = sp.TotalMinutes / 30
                e.DataRow("一倍半加班H") = n*0.5
            End If
        End If
If E.DataRow("签退时间") = Nothing Then
        E.DataRow("一倍半加班H") = Nothing
        E.DataRow("二倍加班H") = Nothing
        E.DataRow("三倍加班H") = Nothing
    End If
End Select
Select Case e.DataCol.Name  
Case  "日期","签到时间","迟到H"
    Dim d As Date = e.DataRow("日期")
    Dim qd As Date = e.DataRow("签到时间")
    If d.DayOfWeek = 1 OrElse d.DayOfWeek = 2 OrElse d.DayOfWeek = 3 OrElse d.DayOfWeek = 4 OrElse 

d.DayOfWeek = 5  Then
        Dim bz As Date = "8:00"
        If qd <= "8:00" Then
            qd = "8:00"
        ElseIf qd > "8:00" Then
            qd = e.DataRow("签到时间")
            Dim sp As TimeSpan = qd - bz
            Dim n As Double = Math.Ceiling(sp.TotalMinutes / 30)
            e.DataRow("迟到H") = n*0.5
        End If
    End If
    If E.DataRow("签到时间") = Nothing Then
        e.DataRow("迟到H") = Nothing
    End If

End Select
Select Case e.DataCol.Name  
Case  "日期","签退时间","早退H"
    Dim d As Date = e.DataRow("日期")
    Dim qd As Date = e.DataRow("签退时间")
    If d.DayOfWeek = 1 OrElse d.DayOfWeek = 2 OrElse d.DayOfWeek = 3 OrElse d.DayOfWeek = 4 OrElse 

d.DayOfWeek = 5  Then
        Dim bz As Date = "17:05"
        If qd < "17:05" Then
            qd = e.DataRow("签退时间")
            Dim sp As TimeSpan = bz - qd
            Dim n As Double = Math.Ceiling(sp.TotalMinutes / 30)
            e.DataRow("早退H") = n*0.5
        End If
    End If
    If E.DataRow("签退时间") = Nothing Then
        e.DataRow("早退H") = Nothing
    End If

End Select




能实现在 加班  迟到  早退 列自动出现数字,就是太臃肿了,
也许是臃肿的问题,往狐表里粘贴数据或删除一些数据的时候,狐表数据库后自动退出,
请问老师,这可能是什么原因呢?
[此贴子已经被作者于2016/8/12 15:55:16编辑过]

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/12 17:09:00 [显示全部帖子]

按照老师说的,去掉了"迟到H"和"早退H",问题就解决了,
被赋值的列,不能判断, 相关的不明白,老师发些学习资料地址呗

 回到顶部
美女呀,离线,留言给我吧!
zhangning
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:3355 威望:0 精华:0 注册:2016/4/14 16:56:00
  发帖心情 Post By:2016/8/15 13:57:00 [显示全部帖子]

 Dim bz As Date = "17:05"
            If dt >= bz Then
                If dt >= "19:35" Then
                    dt = dt.AddMinutes(-30)
                ElseIf dt < "17:35" Then
                    dt = "17:01"
                ElseIf dt <= "19:05" Then
                    dt = e.DataRow("签退时间")
                ElseIf dt < "19:35"
                    dt = "19:05"
                End If
                Dim sp As TimeSpan = dt - bz
                Dim n As Integer = sp.TotalMinutes / 30
                e.DataRow("一倍半加班H") = n*0.5


如签退时间是20:19的时候,  “一倍半加班H”处显示的  2.5,
 20:20时是3,我想要的结果是直到20:35时才是3,
计算方式20:20-30-17:05=165分
165/30=5.5  取整数5, 5*0.5=2.5
之所以变3了,是不是在165/30=5.5  取整数时变成6了,
请问老师,如何才能不四舍五入,不论后边的小数多大,都只取整数






 回到顶部
总数 13 1 2 下一页