Правило таково: после первого года работы, в зависимости от даты годовщины, вы получаете 40 часов. (например, меня приняли на работу 12.05.2011, я получаю 40 часов отпуска 12.05.2012.)
Затем каждый последующий год он перекатывается на календарный год. Итак, используя мой пример выше, мне нужно использовать мои 40 часов между 12.05.2012 и 31.12.2012, потому что 01.01.2013 мои сорок начинаются заново.
Через три года (01.01.2014), календарная дата, я получу 80 часов.
В 10 лет, календарная дата, она достигает 120. Код, который я использую, приведен ниже, но он не работает правильно...
Function calcVacEarned(asOfDate As Date, HireDate As Date)
Dim anniversary As Boolean
Dim yos As Integer
anniversary = False
yos = Year(asOfDate) - Year(HireDate)
If Month(HireDate) = Month(asOfDate) And (yos = 1) Then
If Day(HireDate) <= Day(asOfDate) Then
anniversary = True
End If
ElseIf Month(HireDate) < Month(asOfDate) And (yos = 1) Then
anniversary = True
End If
If anniversary Then
calcVacEarned = 40
Else
Select Case yos
Case Is > 10
calcVacEarned = 120
Case Is > 3
calcVacEarned = 80
Case Is > 1
calcVacEarned = 40
Case Else
calcVacEarned = 0
End Select
End If
End Function
Моя компания использует это ежедневно для расчета часов по всем направлениям, может понадобиться помощь. Заранее спасибо!
calcVacEarned
никогда не изменится, еслиyos
отличается от 1, потому чтоanniversary
всегда будет истинным, если попадет в этот блок кода. - person Mark C.   schedule 16.07.2014