Foxtable(狐表)用户栏目专家坐堂 → 考勤报表


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

主题:考勤报表

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
考勤报表  发帖心情 Post By:2016/6/7 15:58:00 [只看该作者]

我做了一个考勤报表.现在有一个问题,怎样让系统自动区分国家法定假日与周末,周末与法定假日用不同颜色字体体现,并且在加班时间体现,比如周一至周五的加班时间是:18:30:00 法定以及周末是:全天  然后再根据加班时间 算出实际加班时长 (周一至周五=当天签退时间-加班时间) 法定及周末(当天签退时间-当天签到时间) 在最终的计算中要把时间格式转换 08:45:23=8.75h*18得出加班费

迟到阶梯扣费 十分钟10 超过10分钟每分钟扣10元, 请帮帮忙指点一下

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:考勤报表.zip


图片点击可在新窗口打开查看此主题相关图片如下:`x7q)5$4c)tpgm9tb1yy~8.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/6/7 17:41:00 [只看该作者]

1.周末可以通过时间计算,节假日需要自己用一个表格存储


Select Case e.Col.Name
    Case "日期"
        If e.Row.IsNull("日期") = False Then
            Dim d As Date = e.Row("日期")
            If d.DayOfWeek = 0 OrElse d.DayOfWeek = 6 Then
                e.Style="样式1"
            End If
        End If
End Select

3.时间计算参考

DataColChanged事件

Select Case e.DataCol.Name
    Case "签到时间"
        If e.DataRow.IsNull(e.DataCol.Name) = False AndAlso e.DataRow.IsNull("上班时间") Then
            Dim ts As TimeSpan = e.DataRow(e.DataCol.Name) - e.DataRow("上班时间")
            If ts.TotalMinutes > 0 Then  e.DataRow("迟到时间") = ts.TotalMinutes
        End If
    Case "签退时间"
        If e.DataRow.IsNull(e.DataCol.Name) = False Then
            Dim ts As TimeSpan
            If e.DataRow.IsNull("下班时间") Then
                ts = e.DataRow(e.DataCol.Name) - e.DataRow("下班时间")
                If ts.TotalMinutes < 0 Then  e.DataRow("早退时间") = ts.TotalMinutes
            End If
            Dim d As Date = #18:30#
            ts = Cdate(e.DataRow(e.DataCol.Name)) - d
            If ts.TotalMinutes > 0 Then  e.DataRow("加班时间") = ts.TotalMinutes
        End If
End Select

有了时间费用计算完全是小学数学,就不说了

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/7 18:09:00 [只看该作者]

不是这个意思,计算时间的话不需要这么复杂,excel就可以了.计算时间的条件是 先得出加班时间是 "18:30:00" l类型的 还是"全天"类型的. 并且要求签到时间与签退时间都有记录. 再去算实际加班时间和加班费,迟到扣费 代码写在BuildGroupHeader里,直接生成报表.我在BuildGroupHeader事件里不知道该怎样写,所以来请教各位 上传的实例里有报表 直接生成excel报表就有了.就是后面的不懂

如何实现.


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/7 18:14:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:ql2_i~3{glsrbm~(0yvs%h.png
图片点击可在新窗口打开查看
就像这样的效果

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/6/8 8:53:00 [只看该作者]

模板增加一个标记<加班>,去掉BuildGroupHeader事件


BeforeBuild事件


Select e.Book.TempLate
    Case "考勤"
        e.Book.Marks.Add("加班时间",Nothing)
        e.Book.Marks.Add("加班",Nothing)
End Select

BuildDetail事件

Select Case e.Book.TempLate
    Case "考勤"
        If e.DataRow IsNot Nothing Then
            Dim t As Boolean
            Dim d As Date = e.DataRow("日期")
            If d.DayOfWeek = 0 OrElse d.DayOfWeek = 6 Then
                t = True
                e.Book.Marks("加班时间") = "全天"
            Else
                e.Book.Marks("加班时间") = "18:30:00"
            End If
            If e.DataRow.IsNull("签到时间") = False AndAlso e.DataRow.IsNull("签退时间") = False Then
                d = #18:30#
                Dim ts As TimeSpan
                If t Then
                    ts = e.DataRow("签退时间") - e.DataRow("签到时间")
                    e.Book.Marks("加班") = ts.Hours & ":" & ts.Minutes & ":00"
                Else
                    ts = Cdate(e.DataRow("签退时间")) - d
                    If ts.TotalMinutes > 0 Then
                        e.Book.Marks("加班") = ts.Hours & ":" & ts.Minutes & ":00"
                    Else
                        e.Book.Marks("加班") = ""
                    End If
                End If
            Else
                e.Book.Marks("加班") = ""
            End If
        End If
End Select

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/8 15:50:00 [只看该作者]

谢谢,帮忙.

我想对个人的加班时长做一个总计,请问怎样改

 Dim Filter As String = "姓名 = '" & e.DataRow("姓名") & "'"
 e.Book.Marks("加班总计") = DataTables("考勤明细").Compute("Sum(e.Book.Marks("加班"))",Filter)
红色部分,还有一个问题是迟到时间是25分钟这种类型的 那么有个迟到总计

e.Book.Marks("迟到总计") = DataTables("考勤明细").Compute("Sum(Convert([迟到时间], 'System.DataTime'))",Filter)

报错需要具有可能的“Child”限定符的单个列参数.要转换成00:00:00格式再相加

然后:if(<迟到总计>  大于  5)

e.Book.Marks("加加班费") = <加班总计>*18-(<迟到总计>  - 5)*10-10

如果if(<迟到总计>  小于  5大于0)

e.Book.Marks("加加班费") = <加班总计>*18-10


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/8 19:32:00 [只看该作者]

 不能直接你那样统计啊,你要用代码先计算出结果

 

 你要循环这个人的每一行,获取到加班时间,然后累加,才行。

 

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/11 7:31:00 [只看该作者]

我在表中加班时间已算出具体加班时间,为longtime格式,然后我在 在报表事件生成分组头前写代码

Dim Filter As String = "姓名 = '" & e.DataRow("姓名") & "'"
e.Book.Marks("加班总计") = DataTables("考勤明细").Compute("Sum(加班时间)",Filter)

最终生成报表时报错:

无效的聚合函数 Sum()和类型 DateTime 的用法。

另外原表中已经有计算出迟到时间,但格式是""160分钟"这样的字符,想问一下怎样把它在生成分组前自动转换为time或者longtime格式再求和.


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/6/11 14:24:00 [只看该作者]

都说不能直接统计啊

 

For Each dr As DataRow In e.DataRow.DataTable.Select("姓名 = '" & e.DataRow("姓名") & "'")
    '循环每一行,累加值
Next


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/11 18:07:00 [只看该作者]

For Each dr As DataRow In e.DataRow.DataTable.Select("姓名 = '" & e.DataRow("姓名") & "'")
            '循环每一行,累加值
            Dim sum As Timespan
            If dr("加班时间")IsNot Nothing Then
                sum + = dr("加班时间")      
                e.Book.Marks("加班总计") = sum.TotalHours
           End If
        Next
指定值转换无效. 加班时间这一列是时间格式啊 为什么不行, 还有一个比如字符格式165分钟能否转换为小数点的小时 2.75

 回到顶部
总数 18 1 2 下一页