Office中国论坛/Access中国论坛

标题: 这个考勤报表中的工时字段怎样汇总呢? [打印本页]

作者: laiguiyou    时间: 2012-2-20 21:47
标题: 这个考勤报表中的工时字段怎样汇总呢?
报表是用DAO的,汇总工时时用sum=([工时]出错。请问如何解决?
[attach]48423[/attach]
[attach]48422[/attach]
作者: fnsmydyang    时间: 2012-2-20 23:20
[attach]48424[/attach],这样行吗?

作者: fnsmydyang    时间: 2012-2-20 23:25
修改后附件
[attach]48426[/attach]


作者: laiguiyou    时间: 2012-2-21 08:20
谢谢。是这样
作者: 海婷    时间: 2012-2-21 08:52
学习一下
作者: laiguiyou    时间: 2012-2-21 09:42
这张表中,不知如何得出星期六,星期天的上班时数,上面那个例子中,如果用姓名作为组页脚的话,每个人的工时就不能汇总了,会累加上一个人的。
作者: fnsmydyang    时间: 2012-2-21 10:28
传附件上来,试一试看能否解决
作者: fnsmydyang    时间: 2012-2-21 10:34
多输几个人的考勤资料。
作者: fnsmydyang    时间: 2012-2-21 10:46
你这个报表搞的有点复杂,表关系一时还没看懂,最好是用几个临时表来处理完成后,再生成你所需要的报表数据。
作者: laiguiyou    时间: 2012-2-21 13:11
我是用追加查询追到临时表中
这样速度会快些
作者: fnsmydyang    时间: 2012-2-21 13:35
这样也行,在临时表(在原有的甚而上多加几个字段)中可以更新一些数据,如星期六星期天工时的计算都可以的,报表可以用临时表做数据源。
作者: fnsmydyang    时间: 2012-2-21 13:48
那一张表是你考勤数据表?
作者: fnsmydyang    时间: 2012-2-21 13:50
指纹机考勤表?考勤表?
作者: laiguiyou    时间: 2012-2-21 13:51
这个是我做的指纹机考勤报表。工厂用的那个指纹机报表不直观,很难看,所以想到导入到ACCcess中,结合自已工厂的管理系统,如请假数据等,看起来有点复杂,我不太会写代码,所以全用查询做的。报表中有很多不足的地方,也有很多功能没有实现。如平时白天的工作天数,星期六,星期天的加班时数汇总,晚上加班小时的汇总。因为晚上加班不是定时的,有的加二个小时,有的加一个小时,有的4、5、6也不定,所以这里很难介定。不知哪位有更好的办法。完善一下这个报表。异常打卡的只能想这个办法了。只要在规定时间外打卡的,全到异常打卡里。还有就是在窗体中,点预览报表...打不开报表呢,要到报表中去点。不能弹出,不知是为什么?在原来的库是可以。
    以下报表是参考猫的一个查询。

下面这个是指纹机自带的报表。很难统计数据。
[attach]48432[/attach]

[attach]48431[/attach]

自已做的报表。
[attach]48433[/attach]
[attach]48434[/attach]

作者: fnsmydyang    时间: 2012-2-21 13:59
明白是怎么回事了,我试试看能否解决你的问题
作者: laiguiyou    时间: 2012-2-21 14:16
指纹机考勤表是从指纹机上导入的
作者: laiguiyou    时间: 2012-2-21 14:19
报表中,用姓名分类,无法汇总工时,是什么原因。
作者: laiguiyou    时间: 2012-2-21 14:25
谢谢。
作者: fnsmydyang    时间: 2012-2-21 19:13
明天回复吧!正在修改中...
作者: laiguiyou    时间: 2012-2-21 19:24
本帖最后由 laiguiyou 于 2012-2-21 19:25 编辑

期待中...........先谢了。用姓名作为组页脚进行工时汇总。之前这个有问题
作者: jacky6501103    时间: 2012-2-21 20:23
谢谢楼主的分享~~~~~~~~~
作者: fnsmydyang    时间: 2012-2-22 11:40
laiguiyou 发表于 2012-2-21 19:24
期待中...........先谢了。用姓名作为组页脚进行工时汇总。之前这个有问题

[attach]48436[/attach]

[attach]48436[/attach]修改完成,我想这就是你想要的结果吧!

作者: laiguiyou    时间: 2012-2-22 15:41
谢谢fnsmydyang。先看下
作者: laiguiyou    时间: 2012-2-22 15:44
数据处理窗体功能还没完吧。
作者: laiguiyou    时间: 2012-2-22 15:55
本帖最后由 laiguiyou 于 2012-2-22 15:59 编辑

星期六,星期天的工时如何得出呢?还有那个迟到次数好象也不对,要分组统计..晚上加班工时统计,能不能只统计整数,小数点后面的忽略不计。因为晚上加班没满一个小时不计的。如果累计的话,本来20个小时的加班,会变成20多个小时。
作者: fnsmydyang    时间: 2012-2-22 16:16
用VBA代码:
CurrentDb.Execute "UPDATE 临时表 SET 临时表.节假日 = IIf(Weekday([日期])=1,'星期天',IIf(Weekday([日期])=7,'星期六',Null))
用时间函数:Weekday
Weekday 函数说明
      

返回一个 Variant (Integer),包含一个整数,代表某个日期是星期几。

语法

Weekday(date, [firstdayofweek])

Weekday 函数语法有下列的命名参数:

部分 描述
date 必要。能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。如果 date 包含 Null,则返回 Null。
Firstdayofweek 可选。指定一星期第一天的常数。如果未予指定,则以 vbSunday 为缺省值。



设置

firstdayofweek 参数有以下设定值:

常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
VbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六



返回值

Weekday 函数可以返回以下诸值:

常数 值 描述
vbSunday 1 星期日
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
数据处理窗体发现一些问题,主要是刷卡人不规范,多次刷卡(一天多达10次),无法准确判定哪一个是上下班,所发没做了,只帮你解决现有报表员工工时分组汇总问题。



作者: laiguiyou    时间: 2012-2-22 16:27
本帖最后由 laiguiyou 于 2012-2-22 16:28 编辑

非常谢谢你的帮忙。我是说星期天,星期六的上班时数如何汇总。
作者: fnsmydyang    时间: 2012-2-22 16:41
加班只统计整数搞定
[attach]48437[/attach]
作者: fnsmydyang    时间: 2012-2-22 16:52
知道哪一天是星期六、天,根据上班时间与下班时间计算就好了
DateDiff 函数
返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:

部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。



设置

interval 参数的设定值如下:

设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒



firstdayofweek 参数的设定值如下:

常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六




常数 值 描述
vbUseSystem 0 用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。



说明

DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。

为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。

如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。


作者: laiguiyou    时间: 2012-2-22 17:03
这个星期日函数不错。这样就不用再另外建表了

作者: laiguiyou    时间: 2012-2-22 17:09
高手,{:soso_e179:}加班工时取整是怎样实现的,看不到在哪里有设置啊。
作者: fnsmydyang    时间: 2012-2-22 17:14
用Int()函数
Int 函数,Fix 函数示例
本示例说明 Int 及 Fix 函数在返回某数值的整数部分时有何不同。当参数为负数时,Int 函数返回小于或等于该参数之最大整数,而 Fix 函数则返回大于或等于该参数之最小整数。

Dim MyNumber
MyNumber = Int(99.8)    ' 返回 99。
MyNumber = Fix(99.2)    ' 返回 99。

MyNumber = Int(-99.8)    ' 返回 -100。
MyNumber = Fix(-99.8)    ' 返回 -99。

MyNumber = Int(-99.2)    ' 返回 -100。
MyNumber = Fix(-99.2)    ' 返回 -99。
或用Left() 和 InStr()截取整数部分数据,再用Cint()转换成数字类型。

作者: fnsmydyang    时间: 2012-2-22 17:18
在报表主体
添加两个文本框Textid,textiid,格式长宽都为0,所以你看不到,自已找找吧!,哈哈...
作者: laiguiyou    时间: 2012-2-22 17:20
哈哈,看到了。藏得还挺深的{:soso_e128:}
作者: laiguiyou    时间: 2012-2-22 17:23
把打卡时间中的秒去掉,再分组统计,这样,连打卡就不怕。还有设好上下班时间,在规定时间内打了N次卡,报表上也只能显示第一次的。
作者: fnsmydyang    时间: 2012-2-22 21:47
{:soso_e100:},问题解决了就好。
作者: laiguiyou    时间: 2012-2-23 00:01
谢谢fnsmydyang的帮助.{:soso_e181:}
作者: fnsmydyang    时间: 2012-2-23 14:23
一切如你所愿...
[attach]48445[/attach]
作者: laiguiyou    时间: 2012-2-23 17:04
{:soso_e181:}。谢谢这几天的热情帮助。太好了
作者: laiguiyou    时间: 2012-2-23 17:22
本帖最后由 laiguiyou 于 2012-2-23 17:28 编辑

不过试了一下,速度出奇的慢,报表打开以后,往下页也非常的慢。
作者: fnsmydyang    时间: 2012-2-23 21:42
最好是查询做报表数据源,这样就快了。
作者: laiguiyou    时间: 2012-2-23 22:17
本帖最后由 laiguiyou 于 2012-2-23 22:20 编辑

是的。在fnsmydyang的帮助下,弄了几天,基本上完成我想要的功能。学了不少东西。再次感谢fnsmydyang. 上图
[attach]48456[/attach]
作者: 小何    时间: 2021-3-27 18:58
5654654654654




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3