Я пытаюсь рассчитать остаток отпуска в зависимости от типа контракта и статуса сотрудника. Функция проста, и формула работает нормально, но я не могу получить функцию для извлечения даты завершения из запроса. Дата завершения имеет значение 00:00:00, в то время как «Завершено» - ИСТИНА. Я попробовал функцию Dlookup для сбора данных, но не повезло, думаю, я нахожусь под знаменитым проклятием даты доступа. Заранее спасибо.
Мой запрос выглядит следующим образом: qryLeaveBalance
И Моя функция:
Public Function LeaveBalanceCalc(EmployeeType As String, HiredDate As Date, Terminated As Boolean, Optional TerminatedDate As Date) As Double
Dim EarningRate As Double
Dim FirstMonthEarning As Double
Dim LastMonthEarning As Double
Dim enddate As Date
'First to determine the earning rate for the employee
Select Case EmployeeType
Case Is = "International"
EarningRate = 4
Case Else
EarningRate = 1.25
End Select
enddate = Now()
If Terminated = True Then
enddate = TerminatedDate
End If
FirstMonthEarning = (DateDiff("d", HiredDate, LastOfMonth(HiredDate)) + 1) * (EarningRate / (DateDiff("d", FirstOfMonth(HiredDate), LastOfMonth(HiredDate)) + 1))
LastMonthEarning = (DateDiff("d", FirstOfMonth(enddate), enddate) + 1) * (EarningRate / (DateDiff("d", FirstOfMonth(enddate), LastOfMonth(enddate)) + 1))
LeaveBalanceCalc = FormatNumber((DateDiff("m", HiredDate, enddate) - 2) * EarningRate + FirstMonthEarning + LastMonthEarning, 2)
End Function
Привет всем,
Немного больше информации о моей проблеме. Функция состоит в том, чтобы вычислить дни отпуска, заработанные долголетием служащих. Моя цель - добавить вычисляемый столбец в запрос с именем Баланс , см. Приведенный выше запрос, содержащий информацию о сотруднике.
Я пробовал другие способы; Например, приведенный ниже код для функции вычисляет (правильно), только Прекращено Сотрудники и все остальные рассчитываются по дате 0 вместо Now () . Ниже альтернативная функция использует TerminationDate для определения и вычисления Balance . Если для TerminationDate задано Nz равным Now () , но выполняется повторная установка с датой 00:00:00.
Ниже приводится альтернативная функция;
Public Function LeaveBalanceCalc(EmployeeType As String, HiredDate As Date, TerminatedDate As Date) As Double
'................................................................................................................................
'Name: LeaveBalanceCalc
'Inputs: EmployeeType as string
' HiredDate as date
' TerminatedDate as date
'Return: as Double
'Date: 07/02/2020
'Comment:This function is to calculate the earned leave days by longevity
'.................................................................................................................................
Dim EarningRate As Double
Dim FirstMonthEarning As Double
Dim LastMonthEarning As Double
'First we need to determine the earning rate for the employee
Select Case EmployeeType
Case Is = "International"
EarningRate = 4
Case Else
EarningRate = 1.25
End Select
If Nz(TerminatedDate) Then
TerminatedDate = Now()
End If
FirstMonthEarning = (DateDiff("d", HiredDate, FirstOfMonth(HiredDate)) + 1) * (EarningRate / DateDiff("d", FirstOfMonth(HiredDate), LastOfMonth(HiredDate)))
LastMonthEarning = (DateDiff("d", FirstOfMonth(TerminatedDate), TerminatedDate) + 1) * (EarningRate / (DateDiff("d", FirstOfMonth(TerminatedDate), LastOfMonth(TerminatedDate)) + 1))
LeaveBalanceCalc = ((DateDiff("m", HiredDate, TerminatedDate)) * EarningRate) + FirstMonthEarning + LastMonthEarning
End Function
Я был бы счастлив, если бы я мог заставить их работать.