Как мне динамически выбрать параметр с отчетом Crystal? - PullRequest
0 голосов
/ 28 июля 2011

Я долго работал над получением отчета без успеха.

У меня есть отчет, который выбирается на основе полей параметров даты и логического значения.В настоящее время я должен создать 3 отчета.Один на основе дат, один на основе логического значения и один на основе обоих.

Однако я хочу, чтобы в моем отчете можно было выбирать все даты, если пользователь не вводит дату в параметре, или выбирать все логические значения, еслипользователь не выбирает один.

В настоящее время я использовал это

if ({?Start Date} = DateTimeValue('') or {?End Date} =DateTimeValue('')) then
   {rectReport.Call date} in DateTimeValue ('1753-01-01 00:00:00') to CurrentDateTime
else 
   ({rectReport.Call date} in {?Start Date} to {?End Date}) and {rectReport.EngineDown} = {?Engine Down}

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

Любая помощь будет высоко оценена.Спасибо,

Бимбо

Ответы [ 2 ]

1 голос
/ 28 июля 2011

В Crystal 2008 у вас есть возможность сделать параметры необязательными.Вы можете создать один отчет с обоими параметрами, а затем установить оба параметра как необязательные.В формуле выбора записи вы можете сделать что-то вроде этого:

(if  (HasValue({?Startdate}) and HasValue({?Enddate}))
        then {table.datefield} in {?Startdate} to {?Enddate}
    else {table.datefield} in {defaultstartdate} to {defaultenddate})

and (if HasValue({?BoolParam}) then {table.boolfield} = {?BoolParam}
    else {table.boolfield} = {defaultbool})

Если вы хотите выбрать ВСЕ таблицы, если пользователь не вводит параметр, вы можете просто пропустить операторы else.

(примечание: извините, если этот синтаксис неправильный (я снова возвращаюсь в CR), но вы поняли.)

РЕДАКТИРОВАТЬ: так как дополнительные параметры недоступны в CR10, не можетВы просто используете значения параметров по умолчанию для дат?Для логического значения вы можете просто создать параметр с 3 значениями: true, false и «all», а затем по умолчанию использовать значение «all» при запуске отчета.

0 голосов
/ 29 июля 2011

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

Наша основная средаБОЕ XI.

Нашими параметрами могут быть ReportPeriod (String Variable) и CustomDates (DateTime Range, но они будут работать как две отдельные даты)

Примером параметров для ReportPeriod могут быть 1 день 7 дней в прошлом месяце Пользовательские даты

Формулы используются для расчета пределов дат, которые будут использоваться при выборе записи.Я начну с КОНЕЧНОЙ ДАТЫ, так как это удобно для наших периодических отчетов.

@EndDate
  Select ?ReportPeriod
    Case
       "1 Day", "7 Days"   : CurrentDate
          // Conveniently defaults to MIDNIGHT
       "Last Month"  : Maximum(LastFullMonth)
       "CustomDates" : Maximum(?CustomDates)
          // Or discrete parameter for end date
       default : CurrentDate

@BeginDate
  Select ?ReportPeriod
    Case
       "1 Day"  :  DateAdd("d", -1, @EndDate)
       "7 Days" :  DateAdd("d", -7, @EndDate)
       "Last Month"  : Minimum(LastFullMonth)
       "CustomDates" : Minimum(?CustomDates)
          // Or discrete parameter for end date
       default : DateAdd("d", -1, @EndDate)

И позвольте мне предостеречь от использования CurentDateTime, если это не нужно.Каждый раз, когда вы пытаетесь просмотреть отчет, выбор будет меняться: 5:01:10 ... 5:01:16 ... 5:01:24 ... ... 1012 *

Когдапубликуя отчет, мы устанавливаем дату по умолчанию (неважно, что, он используется только для CUSTOM, а затем клиент сбрасывает его), а также ReportPeriod по умолчанию.

Отчет может планироваться периодически (на основе ReportPeriod) и так будет всегда.Если пользователь хочет сделать пользовательские даты (исторические отчеты и т. Д.), Он может выбрать это для отчетного периода, а затем установить любые необходимые даты начала и окончания.

Полезно?

...