Использование параметров отчета в заголовке

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

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

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

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

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

В параметре [Имя параметра отчета] отсутствует значение.

Я новичок в службах отчетности, поэтому мне может не хватать какой-то большой концепции. На мой взгляд, никакие возвращаемые данные не соответствуют критериям Allow null 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)

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

Другие вопросы по тегам