2

Я читал other posts, которые рекомендуют использовать параметры при отображении динамических данных в заголовке, потому что они правильно отображаются в pdf. Я пытаюсь реализовать это решение, но столкнулся с проблемой. Он работает, когда данные возвращаются для параметра, но он выдает ошибку, если данные не возвращаются. Вот мои настройки:Использование параметров отчета в заголовке

  • Hidden
  • Разрешить нулевое значение
  • Разрешить пустое значение
  • Доступных значений: от запроса
  • Значения по умолчанию: от запроса

текстового поля в моем заголовок имеет следующее значение:

=IIf(IsNothing(Parameters![Report Parameter Name].Value), "", Parameters![Report Parameter Name].Value) 

Когда строка не возвращается к значению по умолчанию, отображается сообщение об ошибке:

The '[Report Parameter Name]' parameter is missing a value.

Я новичок в службы отчетов, так что я может отсутствовать некоторые крупные концепции. Для меня никакие данные не возвращают значения Разрешить нулевое значение.

ответ

1

Проблема с использованием IIF в случаях с IsNothing, а также в аналогичном делении на нулевые случаи заключается в том, что это не языковая конструкция, это фактически функция. Таким образом, параметры вычисляются перед вызовом функции, а это означает, что выражение, которое, по вашему мнению, не должно быть оценено, фактически оценивается до вызова функции.

Я знаю, что кажется сумасшедшим, что и истинная, и ложная части выражения IF вычисляются, но думают об этом как о вызове функции, а не о языке. Отсутствие короткого замыкания на пути, как на языке, ошибка заключается в вычислении ВСЕХ параметров перед вызовом функции.

Вы можете заменить это на пользовательскую функцию кода, чтобы выполнить тот же эффект, что и после. Итак, что-то в следующих строках:

Щелкните правой кнопкой мыши тело отчета и выберите «Свойства». Перейдите на вкладку Код и введите следующий код:

Public Function GetParamVal(ByVal ParamVal) As String 
    If IsNothing(ParamVal) Then 
     Return "" 
    Else 
     Return ParamVal 
    End If 
End Function 

Затем вызовите его в заголовок так:

=Code.GetParamVal(Parameters!MyParam.Value) 

(я не в передней части системы, чтобы проверить это на, но вы должны получите идею)

+0

О, да, спасибо за это объяснение. Я не использую VB, поэтому я не был знаком с нюансами IsNothing и IIF. – rboone

Смежные вопросы