Использование параметров отчета в заголовке - PullRequest
2 голосов
/ 19 мая 2011

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 20 мая 2011

Проблема использования 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)

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

...