Выражение ReportViewer IIF возвращает #error - PullRequest
0 голосов
/ 20 февраля 2012

Я потратил 2 дня, чтобы понять это, но не повезло.У меня есть выражение IIF, которое показывает правильное значение, когда условие становится истинным (вычисляется IPmt), но остальное всегда возвращает #error, хотя оно должно быть просто 0.

=IIf(Fields!PaymentNumber.Value<>0,
     IPmt(Fields!Annual_Interest_Rate.Value/1200,Fields!PaymentNumber.Value,Fields!Payment.Value,Fields!Total_Amount_Financed.Value),
     0)

Все поля имеют значения (могутне может быть нулевым) Что может вызвать это?

спасибо

1 Ответ

0 голосов
/ 20 февраля 2012

Ошибка заключается в том, что истинное условие всегда оценивается и возвращает ошибку, когда 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 )

(ПРИМЕЧАНИЕ: я не проверял это, и вынужно будет проверить типы данных)

...