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


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

主题:考勤报表

帅哥哟,离线,有人找我吗?
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
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
图片点击可在新窗口打开查看
就像这样的效果

 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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格式再求和.


 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/12 11:26:00 [显示全部帖子]

原来是要这样才行,对了我想问一下,
<GroupHeader,考勤明细,姓名,1>
<GroupHeader,考勤明细,姓名,1>
<考勤明细,姓名>
<GroupFooter,考勤明细,姓名,1>
<GroupFooter,考勤明细,姓名,1>
<end>
模板是这样设计的,在保持现状的情况下,怎样让日期按升序排列 有的人统计出来的效果日期是排好的 有的是乱的

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/12 12:37:00 [显示全部帖子]

感谢红版

Select Case e.Book.TempLate
    Case "考勤"
        Dim str1 As String = ""
        Dim Filter As String = "姓名 = '" & e.DataRow("姓名") & "'"
        For Each dr As String In e.DataRow.DataTable.GetValues("早退时间", filter)
            str1 &= dr & ","
        Next
        e.Book.Marks("请假明细") = str1.trim(",")
        Dim sum As Double = 0
        For Each dr As DataRow In e.DataRow.DataTable.Select("姓名 = '" & e.DataRow("姓名") & "'")
            Dim d As Date = dr("加班时间")
            sum += d.Hour * 3600 + d.Minute * 60 + d.Second
        Next
        e.Book.Marks("加班总计") = sum/3600
        Dim sum1 As Double = 0
        For Each dr As DataRow In e.DataRow.DataTable.Select("姓名 = '" & e.DataRow("姓名") & "'")
            Dim d As Date = dr("迟到时间")
            sum1 += d.Hour * 3600 + d.Minute * 60 + d.Second
        Next
        e.Book.Marks("迟到总计") = sum1 /60
        Dim sum2 As Double = 0
        If e.Book.Marks("迟到总计")< 5 AndAlso e.Book.Marks("迟到总计")>0 Then
            sum2 = e.Book.Marks("加班总计")*18-10
        Else
            sum2 = e.Book.marks("加班总计")*18-(e.Book.Marks("迟到总计")-5)*10-10
        End If
        e.Book.Marks("加班费") = sum2
End Select

这个加班费:加班总计和迟到总计都为零,加班费理应也为0 为什么统计出来等于40 

e.Book.Marks("加班总计") = sum/3600 用round()还是其他的保留两位小数


 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/12 15:50:00 [显示全部帖子]

这个我想到了,后来改成

If e.Book.Marks("迟到总计") < = 5 AndAlso e.Book.Marks("迟到总计") <> 0 Then
            sum2 = e.Book.Marks("加班总计")*18-10
        ElseIf e.Book.Marks("迟到总计") > 5
            sum2 = e.Book.marks("加班总计")*18-(e.Book.Marks("迟到总计")-5)*10-10
        End If
        e.Book.Marks("加班费") = sum2 & "元"
劳烦我试过:<Round(<加班总计>,2)> 不行 那么在 e.Book.Marks("加班总计") = sum/3600 怎样直接限定保留两位小数就好


 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/6/12 17:48:00 [显示全部帖子]

谢谢版主

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