以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教老师考勤数据处理  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=137294)

--  作者:wakai
--  发布时间:2019/7/2 17:29:00
--  请教老师考勤数据处理
原始记录为每行一个时间,同一日打6次卡
需要按月度对员工所有考勤进行汇总处理,并按班次时段归到对应列去,怎么统计代码
需要实现下面的结果

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20190702172614.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:考勤.table

谢谢老师

--  作者:有点蓝
--  发布时间:2019/7/2 21:10:00
--  
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("编号", Gettype(String), 16)
dtb.AddDef("打卡时间", Gettype(Date))
For Each r As Row In Tables("班次").Rows
    dtb.AddDef(r("打卡时段"), Gettype(Date))
Next
dtb.Build()
MainTable= Tables("统计")
For Each r As Row In Tables("班次").Rows
    DataTables("统计").DataCols(r("打卡时段")).SetDateTimeFormat(DateTimeFormatEnum.Time)
Next
Dim ds As List(Of String) = DataTables("考勤表").SQLGetValues("编号+\',\'+format(打卡时间,\'yyyy-MM-dd\')")
For Each s As String In ds
    Dim s1() As String = s.Split(",")
    Dim r1 As Row = Tables("统计").AddNew
    r1("编号") = s1(0)
    Dim d As Date = cdate(s1(1))
    r1("打卡时间") = s1(1)
    For Each dr As DataRow In DataTables("考勤表").Select("编号=\'" & s1(0) & "\' And 打卡时间 >= #" & d & "# And 打卡时间<#" & d.AddDays(1) & "#")
        Dim d2 As Date = cdate(Format(dr("打卡时间"),"1900-01-01 HH:mm:ss"))
        Dim dr2 As DataRow = DataTables("班次").Find("起始时间 <= #" & d2 & "# And 结束时间 >=#" & d2 & "#")
        If dr2 IsNot Nothing Then
            r1(dr2("打卡时段")) = d2
        End If
    Next
Next
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:考勤.zip


--  作者:wakai
--  发布时间:2019/7/3 0:08:00
--  
蓝老师,代码可以用,不过在由于实际员工打卡并不规范,很多打卡不在设置范围内,造成记录未汇总上来
能否不按班次,直接将所有同日的记录汇总在一行里,像下面这样

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20190703000704.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2019/7/3 8:48:00
--  
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("编号", Gettype(String), 16)
dtb.AddDef("打卡时间", Gettype(Date))
dtb.AddDef("打卡时段", Gettype(String),255)
dtb.Build()
MainTable= Tables("统计")

Dim ds As List(Of String) = DataTables("考勤表").SQLGetValues("编号+\',\'+format(打卡时间,\'yyyy-MM-dd\')")
For Each s As String In ds
    Dim s1() As String = s.Split(",")
    Dim r1 As Row = Tables("统计").AddNew
    r1("编号") = s1(0)
    Dim d As Date = cdate(s1(1))
    r1("打卡时间") = s1(1)
    r1("打卡时段") = DataTables("考勤表").SQLGetComboListString("format(打卡时间,\'HH:mm\')","编号=\'" & s1(0) & "\' And 打卡时间 >= #" & d & "# And 打卡时间<#" & d.AddDays(1) & "#").replace("|"," ")
Next

--  作者:长刚1
--  发布时间:2019/7/3 10:51:00
--  
请问各位老师这种表格用foxtable制作,谢谢!
图片点击可在新窗口打开查看此主题相关图片如下:360截图20190703104826116.jpg
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2019/7/3 11:13:00
--  
用法和上面差不多,创建临时表,然后根据考勤表数据进行填充。

论坛搜索“考勤”,看看别人用法

--  作者:wakai
--  发布时间:2019/7/3 19:49:00
--  
蓝老师,只能用内部表吗,用外部ACCESS或SQL数据库出错


--  作者:有点蓝
--  发布时间:2019/7/4 8:38:00
--  
内部外部都可以,外部表提示什么错误?

能不能主动一点把错误描述发上来的,方便别人分析问题,还要每次等我们问,何必呢。
[此贴子已经被作者于2019/7/4 8:38:54编辑过]