以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  时间的计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136354)

--  作者:采菊东篱下
--  发布时间:2019/6/11 22:14:00
--  时间的计算

 

    密码:732100

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

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

--  作者:有点蓝
--  发布时间:2019/6/11 22:51:00
--  
打卡数据表时间列属性设置为Time短时间格式:http://www.foxtable.com/webhelp/topics/0044.htm

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

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

--  作者:采菊东篱下
--  发布时间:2019/6/12 20:46:00
--  
谢谢,能计算了,再请教一下,在EXCEL中用FLOOR函数可实现小数后第一位数大于等于5安0.5计,小于5安0计,Foxtable怎样实现这一效果?
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190612204516.png
图片点击可在新窗口打开查看

--  作者:采菊东篱下
--  发布时间:2019/6/12 20:59:00
--  
图上第2、3列数字是打卡的上下班时间,第五列数据是直接用下班时间减上班时间得出当天工作时间,现际上以8点起计早于8点安8点,迟于8点安实计,超过12小时后才计加班工资,但不足半小时的不计,大于半小时才安0.5计,应怎样计算这小数后的取舍,它不是四舍五入。
--  作者:有点甜
--  发布时间:2019/6/13 10:33:00
--  

编写代码处理,参考

 

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


--  作者:采菊东篱下
--  发布时间:2019/6/19 9:35:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.zip


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

--  作者:有点甜
--  发布时间:2019/6/19 10:22:00
--  

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

 

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


--  作者:采菊东篱下
--  发布时间:2019/6/19 10:31:00
--  
没有第二个时间,时间跑到下一行了。
--  作者:采菊东篱下
--  发布时间:2019/6/19 10:38:00
--  
你看清楚数据构成,这个取数程序应不简单,要通过整理后的打卡次数判断是否跨天计算,这跨天计算依天类推,直至下一个奇打卡次数为止。
[此贴子已经被作者于2019/6/19 13:26:14编辑过]

--  作者:有点甜
--  发布时间: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