Ошибка заключается в том, что истинное условие всегда оценивается и возвращает ошибку, когда PaymentNumber = 0. Согласно документации, оба условия выражения IIF всегда оцениваются.Вы можете проверить это, изменив порядок:
=IIf(Fields!PaymentNumber.Value=0, 0,
IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed.Value))
То, что я делал в прошлом, это создание функции в «пользовательском коде».Я не использовал IPmt, но я считаю, что это должно работать:
Function CalcIpmt(Annual_Interest_Rate As Decimal, PaymentNumber As Integer, Payment As Decimal, Total_Amount_Financed As Decimal) As Decimal)
If PaymentNumber = 0 Then
Return 0
Else
Return IPmt(Annual_Interest_Rate, PaymentNumber, Payment, Total_Amount_Financed)
End If
End Function
Тогда ваше выражение будет:
=Code.CalcIpmt( Fields!Annual_Interest_Rate.Value/1200, Fields!PaymentNumber.Value, Fields!Payment.Value, Fields!Total_Amount_Financed.Value )
(ПРИМЕЧАНИЕ: я не проверял это, и вынужно будет проверить типы данных)