水晶报告if then语句

问题描述 投票:0回答:1

我正在尝试在 Crystal 中编写以下语句,但它一直说有错误,请任何人帮忙。

If ("CLA_UNIFORM_PAYMENT_ADVICE_REP"."SUPPLIER_TYPE") = "SUB" Then "CLA_UNIFORM_PAYMENT_ADVICE_REP"."INVOICE_NO"
Else
nvl(substr("CLA_UNIFORM_PAYMENT_ADVICE_REP"."INVOICE_NO",3), "CLA_UNIFORM_PAYMENT_ADVICE_REP"."PAYMENT_REFERENCE")
crystal-reports
1个回答
0
投票

不直接支持 NVL() 或 SUBSTR() 函数,但有一些等效函数可以使用。我们可以使用 MID(str, start, length) 函数提取 Crystal 中的子字符串。 NVL() 函数最好等同于 ISNULL(field) 函数。 MID 函数的工作方式类似于子字符串函数,其中“str”是要搜索的字符串,“start”是开始提取值的索引,“length”是要提取的字符数。长度参数在 MID 函数中是可选的。当不使用时,该函数将读取字符串的末尾。不过 ISNULL 函数与 NVL 有点不同。在 Crystal 中,ISNULL 函数返回一个布尔值,当“field”的值不为 null 时,该值为 true。要将 NVL 函数转换为 ISNULL 函数,您需要将其包装在 IF/THEN/ELSE 语句中,例如:

If ISNULL(field) Then
  ... do something when True
Else
  ... do something when False

重要的是要记住数据类型需要匹配。如果“field”仅包含数字数据,则 IF/THEN/ELSE 语句返回的值也需要是数字。

除了这些功能之外,在引用报表上的字段时,您还需要遵循 Crystal 语法的规则。在设计报告时,您应该能够通过使用公式工作室工具将字段添加到公式来快捷地手动输入。但是,如果您想将它们输入公式,语法为

{TABLE_NAME.COLUMN_NAME}
,不需要像 Oracle 中那样使用括号或双引号。

因此,考虑到所有这些,您的公式将在 Crystal Syntax 中表达为如下所示。

IF {CLA_UNIFORM_PAYMENT_ADVICE_REP.SUPPLIER_TYPE} = "SUB" THEN
    {CLA_UNIFORM_PAYMENT_ADVICE_REP.INVOICE_NO}
ELSE
    IF ISNULL(MID({CLA_UNIFORM_PAYMENT_ADVICE_REP.INVOICE_NO},3)) THEN
        {CLA_UNIFORM_PAYMENT_ADVICE_REP.PAYMENT_REFERENCE}
    ELSE
        MID({CLA_UNIFORM_PAYMENT_ADVICE_REP.INVOICE_NO},3)
© www.soinside.com 2019 - 2024. All rights reserved.