Foxtable(狐表)用户栏目专家坐堂 → 时间的计算


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

主题:时间的计算

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
时间的计算  发帖心情 Post By:2019/6/11 22:14:00 [只看该作者]

 

    密码:732100

    我想在考勤统计表里显示打卡数据表中5分钟内不重复打卡数据,然后在上班时间列计算出她们的工作时间,我已经在窗口上的整理重复打卡数据按钮中编了程序,如果时间列是字符,考勤统计表时间列能够显示合并后的日期时间,但我把时间列全转换成时间格式,不是时间格式无法计算吧?考勤统计表里时间列数据全不显示了,我在考勤统计表表属性上编的上班时间程序更别谈计算了!请教如何实现工作时间计算?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar

[此贴子已经被作者于2019/6/11 22:19:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/6/11 22:51:00 [只看该作者]

打卡数据表时间列属性设置为Time短时间格式:http://www.foxtable.com/webhelp/topics/0044.htm

考勤统计表时间列属性设置为DateTime短日期时间格式。

考勤统计表上班工时列类型改为双精度小数

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/12 20:46:00 [只看该作者]

谢谢,能计算了,再请教一下,在EXCEL中用FLOOR函数可实现小数后第一位数大于等于5安0.5计,小于5安0计,Foxtable怎样实现这一效果?
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190612204516.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/12 20:59:00 [只看该作者]

图上第2、3列数字是打卡的上下班时间,第五列数据是直接用下班时间减上班时间得出当天工作时间,现际上以8点起计早于8点安8点,迟于8点安实计,超过12小时后才计加班工资,但不足半小时的不计,大于半小时才安0.5计,应怎样计算这小数后的取舍,它不是四舍五入。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/13 10:33:00 [只看该作者]

编写代码处理,参考

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 9:35:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.zip


密码:732100
谢谢,根据你的代码我把考勤表中的工作时间做成这样。
问题一,我已把按钮中的代码写成执行一次后按钮为灰,但关闭软件重新打开后,按钮恢复能执行了,我的目的是已执行的数据不重复复制到考勤统计表。
问题二,时间列中有的只有一次打卡记录,实际上这些是跨班打卡,即从今天一直上班到第一天早上下班,如此类推,直到下一次那天打卡次数为奇数,如何计算这部份上班时间?非常复杂,我想了很久都不知怎么做。
[此贴子已经被作者于2019/6/19 10:41:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 10:22:00 [只看该作者]

1、判断重复,如果重复,就不拷贝过去,即可。或者加一个列,如果拷贝过去的行,就勾选一下记录。

 

2、判断打开记录,如果第二个时间早于第一个时间,那就算为跨了一天。


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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 10:31:00 [只看该作者]

没有第二个时间,时间跑到下一行了。

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


加好友 发短信
等级:八尾狐 帖子:1879 积分:10352 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2019/6/19 10:38:00 [只看该作者]

你看清楚数据构成,这个取数程序应不简单,要通过整理后的打卡次数判断是否跨天计算,这跨天计算依天类推,直至下一个奇打卡次数为止。
[此贴子已经被作者于2019/6/19 13:26:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/6/19 10:59:00 [只看该作者]

比如

 

Select Case e.DataCol.name
    Case "时间1","时间2","时间3","时间4","时间5","时间6"
        Dim d1 As Date = e.DataRow("时间1")
        Dim d2 As Date = e.DataRow("时间2")
        Dim d3 As Date = e.DataRow("时间3")
        Dim d4 As Date = e.DataRow("时间4")
        If d2 = Nothing Then
            Dim fdr = e.DataTable.Find("_Identify > " & e.DataRow("_Identify"))
            If fdr IsNot Nothing Then
                d2 = fdr("时间1")
            Else
                d2 = d1
            End If
        Else
            Dim d As Date = #07:00#
            Dim d0 As Date = #08:00#
            Dim d5 As Date = #20:00#
            Dim d6 As Date = #20:30#
            If d < d1 And d1 < d0 Then
                d1 = d0
            End If
            If d5 < d2 And d2 < d6 Then
                d2 = d5
            End If
            If d5 < d3 And d3 < d6 Then
                d3 = d5
            End If
        End If
        Dim sp As TimeSpan = d2-d1
        Dim n1 = sp.TotalHours
        Dim n = Math.Floor(n1)
        If n1 > n+0.5 Then
            n1 = n+0.5
        End If
        e.DataRow("工作时间") = n1
End Select


 回到顶部
总数 29 1 2 3 下一页