Foxtable(狐表)用户栏目专家坐堂 → 求助代码(考勤表)


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

主题:求助代码(考勤表)

帅哥哟,离线,有人找我吗?
huizhong
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:141 积分:1227 威望:0 精华:0 注册:2018/2/22 10:06:00
求助代码(考勤表)  发帖心情 Post By:2018/7/16 17:03:00 [只看该作者]

老师,求教下关于考勤计算和统计的代码

 

考勤机导出一个表,表明为“打卡记录”,表内有三列数据,A列 为员工编号;B列 为打卡时间(日期时间格式);在此基础上我以公式形式生成了C列(索引列)  为员工编号+打卡日期(没有时间)以此列作为索引标识,区分同一个员工在同一天的打卡次数

 

需求:在狐表系统有一个表“考勤台账”,表内有【员工编号】列,【打卡日期】列(没有时间),【早打卡时间】列,【晚打卡时间】列,我以代码形式如何实现:在导入数据的时候,同一个员工,同一天的最早打卡时间放入该员工编号和同打卡日期的【早打卡时间】列;同理,将同一个员工,的同一天的最后一次打卡时间放入该员工编号和同打卡日期的【晚打卡时间】列

 

当前导入按钮的代码如下,能导入数据,但是没有上述功能,烦劳老师指点下代码,新手上路多多帮忙!!

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("考勤台账")
    t.StopRedraw()
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim newcount As Integer = 0
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim r As DataRow
        r = t.DataTable.AddNew()
        newcount += 1
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If t.Cols.Contains(cname) Then
                r(cname) = sheet(n, i).Text
            End If
        Next
    Next
    msgbox("已导入 " & newcount &" 行数据")
    t.ResumeRedraw()
End If


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


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

建议做一个【考勤表】,把数据都导入此表。然后,你的【台账表】再根据【考勤表】统计你所需要的数据(比如查找早晚时间、打卡次数等等)

 

http://www.foxtable.com/webhelp/scr/1453.htm

 


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


加好友 发短信
等级:幼狐 帖子:141 积分:1227 威望:0 精华:0 注册:2018/2/22 10:06:00
  发帖心情 Post By:2018/7/17 16:43:00 [只看该作者]

老师,我按照您给的建议,已将考勤记录数据导入到【考勤台账】表中,然后,再整理提取到【考勤查询】表,但是,由于我是新手,对代码不熟,向您请教一下代码的编写问题

考勤台账有【考勤编号】【打卡时间】【索引标识】三列,其中索引标识是将考勤编号与打卡时间的年月进行合并而成

考勤查询有【考勤编号】【员工姓名】【所属公司】【1号上班时间】【1号下班时间】【1号工作时间】

以下是【考勤查询】窗口的查询按钮代码
If e.Form.Controls("DateTimePicker1").Value Is Nothing OrElse e.Form.Controls("DateTimePicker2").Value Is Nothing Then
    MessageBox.Show("请输入起始日期和终止日期!","提示", MessageBoxButtons.OK ,MessageBoxIcon.Information)
    e.Cancel = True
Else
Dim C As New Filler
DataTables("考勤查询").DataRows.Clear() '清除原有数据
C.SourceTable = DataTables("考勤台账") '来源表
C.SourceCols = "索引标识,考勤编号" '来源列
C.Filter = "打卡时间日期格式 >= #" & e.Form.Controls("DateTimePicker1").value & "# And 打卡时间日期格式 <= #" & e.Form.Controls("DateTimePicker2").value & "# " '判断条件
C.DataTable = DataTables("考勤查询") '目标表
C.DataCols = "索引标识,考勤编号" '目标列
C.Fill()
Tables("考勤管理窗口_Table2").Sort = "所属公司 DESC"
End If

以下是【考勤查询】表的事件代码
If e.DataCol.Name = "考勤编号"  Then
    If e.NewValue Is  Nothing  Then
        e.DataRow("员工姓名") =  Nothing
        e.DataRow("所属公司") =  Nothing
    Else
        Dim DD As  DataRow
        DD =  DataTables("员工档案").Find("[考勤编号] = '" & e.NewValue &  "'")
        If DD IsNot Nothing Then
        e.DataRow("员工姓名") = DD("员工姓名")
        e.DataRow("所属公司") = DD("所属公司")
        End If
    End If
End If

请教:我如何编写表代码,实现将 “考勤台账” 中的某一个员工的当天最早一次打卡时间放在 ‘考勤查询“ 的【1号上班时间】列中,以1号为例,实际共31天,您受累给指导下,搞了一下午了,也看了所有与跨表引用和导入数据相关的帮助,搞不定

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


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

比如代码

 

        Dim d As Date = "2018-7-17"

        Dim DD As  DataRow
        DD =  DataTables("考勤台账").Find("[考勤编号] = '" & e.datarow("考勤编号") &  "' and 打卡时间 >= #" & d & "# and 打卡时间 < #" & d.adddays(1) & "#", "打卡时间")
        msgbox(dd("打卡时间")) '最早
 
        DD =  DataTables("考勤台账").Find("[考勤编号] = '" & e.datarow("考勤编号") &  "' and 打卡时间 >= #" & d & "# and 打卡时间 < #" & d.adddays(1) & "#", "打卡时间 desc")
        msgbox(dd("打卡时间")) '最迟

 回到顶部