Crystal Report: Как оценить несколько операторов ЕСЛИ в одной формуле?

Предыстория

  • Я пытаюсь сделать красивую проверку в строке сведений моего отчета.
  • У меня есть несколько формул, называемых утверждениями Assert, которые возвращают false, если не проходят проверку, и true, если проходят.

Цель

  • Я хотел бы создать массив, в котором хранятся «нарушения правил», а затем они отображаются в поле в конце строки под заголовком «Нарушенные правила».

Что я сделал на данный момент

  • Создан массив и инициализирован как массив пустых строк в заголовке отчета
  • Создана формула для оценки каждого правила, увеличения массива и добавления номера неработающего правила (это повторяющийся код для каждого правило, ничего особенного). Это добавляется в раздел скрытых сведений над моим отображением сведений.
  • Создана формула, представляющая собой объединение элементов массива с нарушенными правилами. Это формула, которая отображается вместе с моими полями сведений.
  • Создана формула для установки пустого массива нарушенных правил. Это идет в разделе скрытых сведений после отображения моих сведений.

Проблема

  • Crystal, похоже, не поддерживает оператор "конец, если", который мне удалось найти.
  • Таким образом, получается, что я могу вычислить только один оператор If, а не множители в одной формуле.
  • Это означает, что я не могу использовать несколько операторов if, по одному для каждого правила.

Пример кода

Создание массива (формула Init_StringVar_Array_RulesBroken):

//@Init
//This goes into the report header
WhilePrintingRecords;

//initializes the array of broken rules which we'll add to during details
StringVar Array RulesBroken;
"";

Пример первых трех оценок правил, которые увеличивают массивы и добавляют значения (это в формуле Increment_StringVar_Array_RulesBroken):

//@Increment
//Goes before the details section is displayed

//accesses the shared variable
WhilePrintingRecords;
StringVar Array RulesBroken;

//separate if statement for each assert statement

//01
if not {@Assert_01_IfCrewIsConstructionCrew_CBFlagShouldBeYesOrDirect} then
Redim Preserve RulesBroken[UBound(RulesBroken) + 1]; //extends the array to be able to hold one more item than it does currently
RulesBroken[UBound(RulesBroken)] := "01"; //adds the new string into the array

//02
if not {@Assert_02_IfCrewIsConstructionCrew_AndCBFlagIsDirect_WONumberShouldStartWithC} then
Redim Preserve RulesBroken[UBound(RulesBroken) + 1]; //extends the array to be able to hold one more item than it does currently
RulesBroken[UBound(RulesBroken)] := "02"; //adds the new string into the array

//03
if not {@Assert_03_IfCrewIsDesign_AndCBFlagIsDirect_WONumberShouldStartWithD} then
Redim Preserve RulesBroken[UBound(RulesBroken) + 1]; //extends the array to be able to hold one more item than it does currently
RulesBroken[UBound(RulesBroken)] := "03"; //adds the new string into the array

Есть идеи?

  • Есть ли в Crystal Reports функция If / then / end if?
  • Если нет, то есть ли в Crystal Reports обходной путь для подобных вещей? мне нужно создать несколько формул для каждой и убедиться, что они размещены после другой или что-то в этом роде?

Заранее спасибо за любую помощь!

7
задан SeanKilleen 19 April 2012 в 01:40
поделиться