以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教老师考勤数据处理 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=137294) |
||||
-- 作者:wakai -- 发布时间:2019/7/2 17:29:00 -- 请教老师考勤数据处理 原始记录为每行一个时间,同一日打6次卡 需要按月度对员工所有考勤进行汇总处理,并按班次时段归到对应列去,怎么统计代码 需要实现下面的结果
|
||||
-- 作者:有点蓝 -- 发布时间: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
|
||||
-- 作者:wakai -- 发布时间:2019/7/3 0:08:00 -- 蓝老师,代码可以用,不过在由于实际员工打卡并不规范,很多打卡不在设置范围内,造成记录未汇总上来 能否不按班次,直接将所有同日的记录汇总在一行里,像下面这样
|
||||
-- 作者:有点蓝 -- 发布时间: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 -- |
||||
-- 作者:有点蓝 -- 发布时间: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编辑过]
|