访问报告 - 总计变量

时间:2015-07-29 20:35:34

标签: ms-access report calculated-field

我有一份报告给了我一个付薪期的所有时间。我有一个查找表单,我在其中选择付款期开始日期和结束日期。它按员工姓名提取所有记录,并在该支付期间休假,然后计算该期间的总休假时间。例如,员工从2015年9月8日到2015年2月2日度假,总共休假152个小时。在2015年9月27日至10月10日的付款期间,他们已经休息了40个小时。我通过在报表上创建多个隐藏文本框然后将最后一个计算显示为关闭小时数来计算。工作得很漂亮!以下是我创建的文本框:

'get hours off if begin time and end time off are entered.
vHoursOff = =IIf([BeginTime]="",0,[hoursoff])

'get days off in time period
vDaysOff = IIf([vbd1] = [ved1], 1, Workdays([vbd1], [ved1]))
vDaysOff2 = IIf(IsNull([BeginTimeOff]), [vDaysOff], 0)

'add hours off and days off to get total hours off
vtothoursoff = ([vDaysOff2] * 8) ' + [vHoursOff]
TimeOffThisPeriod = =Format(IIf([Hours]>0,[Hours],"-" & [vtothoursoff]),"Standard")

我的问题 - 我希望按照休假时间(病假,假期,个人,补偿)计算该支付期的休息时间。我试过了:

=Sum(IIf([tblCodesWork]![Description]="Vacation Time",[TimeOffThisPeriod],0))

它为我提供了一个输入TimeOffThisPeriod的框。它不是从我对每条记录的计算中得出的。

解释我的需求:员工在9/27/15到10/10/15的付款期间有以下内容:

  1. 2015年9月8日至2015年10月2日假期 - 2015年9月27日至2015年10月2日的付款期 - 或40小时假期
  2. 度假10/10/15 - 这段时间10/10/15或8小时假期
  3. 在员工页脚中,我希望它在此付款期间共显示48小时的假期。

    请帮忙!并提前感谢!

1 个答案:

答案 0 :(得分:0)

您正在对[TimeOffThisPeriod]进行求和,但此字段已格式化。格式化始终意味着值以某种方式转换为字符串。此字段是否始终包含可以转换回数字的值?

试试这个:

=Sum(IIf([tblCodesWork]![Description]="Vacation Time",
         IIf(IsNumeric([TimeOffThisPeriod]),CDbl([TimeOffThisPeriod]),0), 0))

如果它仍然不起作用,您可能必须创建一个安全的CDbl函数,如果该字符串不是数字,则不会抛出错误,因为Iff始终会评估这两种情况。即即使CDbl([TimeOffThisPeriod])IsNumeric([TimeOffThisPeriod]),也会对False进行评估。

Public Function SafeCDbl(ByVal x As Variant) As Double
    If IsNumeric(x) Then
        SafeCDbl = CDbl(x)
    Else
        SafeCDbl = 0
    End If
End Function

然后将你的求和表达式改为:

=Sum(IIf([tblCodesWork]![Description]="Vacation Time", SafeCDbl([TimeOffThisPeriod]), 0))