水晶报表:如何评估多种如果一个公式报表?(Crystal Report: How to evalua

2019-07-29 01:03发布

背景

  • 我试图做我的报告的细节排一些好看的验证。
  • 我有几个公式命名为断言语句,如果他们失败的测试和真正的,如果他们传递返回false。

目标

  • 我想创建一个存储“违反规则”数组,然后将它们显示在一个领域在行末,一个叫“破规则”标题下

我一直这样做的远

  • 创建了一个阵列并初始化其作为报告报头中的空字符串数组
  • 创建的公式做评估每个规则的,增量的阵列,且添加破规则号(这是重复的码对于每个规则,没有什么特别的)。 这被添加到我上面的信息显示抑制的细节部分。
  • 创建一个公式,是加入碎阵列规则的元件。 这是与我的详细信息字段一同显示的公式。
  • 创建一个公式来设置错误阵列清空规则。 这正好处于被抑制细节部分后,我的细节显示。

问题

  • 水晶似乎并没有允许“结束时,如果”语句,我可以找到。
  • 因此,看来我只能评价一个如果一个公式中的语句,而不是整数倍。
  • 这意味着我不能做多IFS,每一个规则。

示例代码

所述阵列(一式称为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?
  • 如果没有,是有这样的事情在Crystal Reports解决方法? 我需要为每种多个公式,并确保他们放在其他或类似的东西后?

在此先感谢您的帮助!

Answer 1:

你有被包裹的代码最简单的方法来做到这一点,如果在括号块,用分号分隔开:

//01
(
    if not {@Assert_01_IfCrewIsConstructionCrew_CBFlagShouldBeYesOrDirect} then
        Redim Preserve RulesBroken[UBound(RulesBroken) + 1];
        RulesBroken[UBound(RulesBroken)] := "01"
    else ""
);

//02
(
    if not {@Assert_02_IfCrewIsConstructionCrew_AndCBFlagIsDirect_WONumberShouldStartWithC} then
        Redim Preserve RulesBroken[UBound(RulesBroken) + 1];
        RulesBroken[UBound(RulesBroken)] := "02"
    else ""
);

//03
(
    if not {@Assert_03_IfCrewIsDesign_AndCBFlagIsDirect_WONumberShouldStartWithD} then
        Redim Preserve RulesBroken[UBound(RulesBroken) + 1];
        RulesBroken[UBound(RulesBroken)] := "03"
    else ""
);

我加了缩进指示水晶如何解释块。



文章来源: Crystal Report: How to evaluate multiple IF statements in one formula?