2015-07-29 6 views
0

У меня есть отчет, который дает мне все свободное время в течение периода оплаты. У меня есть форма поиска, где я выбираю дату начала периода оплаты и дату окончания. Он вытягивает все записи по имени сотрудника, у которых есть свободное время в течение этого периода оплаты, а затем вычисляет общее количество часов на этот период. Например, работник берет отпуск с 9/8/2015 по 10/2/2015 в общей сложности 152 отпусков. Во время периода оплаты с 9/27/15 по 10/10/15, у них есть 40 часов. Я вычисляю это, создавая несколько скрытых текстовых полей в своем отчете, а затем показываю последний расчет как количество отпусков. Прекрасно работает! Вот Textboxes я создал:Отчет о доступе - итоговая переменная

'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") 

Моя проблема - я хочу, чтобы в общей сложности часов от за этот период заработной платы по типу свободного времени (больной, отдых, личная, Comp). Я пробовал:

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

и это приносит коробку для меня, чтобы войти в TimeOffThisPeriod. Это не относится к расчету, сделанному на каждой записи.

Чтобы объяснить, что я хочу: Сотрудник имеет следующий за платежный период 9/27/15 до 10/10/15:

  1. отпуск 9/8/2015 до 10/2/2015 - для этот период платить 9/27/15 до 10/2/15 - или 40 часов отдыха
  2. отпуск 10/10/15 - За этот период времени 10/10/15 или 8 часов отпуска

в Сотрудник нижнего колонтитула, я хочу, чтобы он показывал в общей сложности 48 часов отпуска за этот период оплаты.

Пожалуйста, помогите! И спасибо заранее!

+0

Вы probaly должны добавить групировавать в отчет и к группе по типу свободного времени. –

+0

Пробовал и не работал. Это что-то общее с расчетными полями, которые определены в отчете. – user3033348

ответ

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)) 
Смежные вопросы