【问题标题】:Crystal report "a number is required here"水晶报表“这里需要一个数字”
【发布时间】:2015-03-20 10:58:41
【问题描述】:

我正在水晶报表中编写一些公式。我有一个可能包含数值的字段,在这种情况下我正在对其进行一些计算,或者它可能包含一个字符串值,在这种情况下应该逐字返回。所以我认为这应该可行:如果 Result.entry 包含一个数字,则将该数值放入 Result,否则只返回 Result.entry:

    Local NumberVar Result := 0;
    if NumericText({RESULT.ENTRY}) // may be N.D. or B.L.D.
       then 
           ( Result:=val({RESULT.ENTRY});)
       else  (
            {RESULT.ENTRY} );
     );
    // something more going on here that at last returns some value

但是不...“这里需要一个数字”说 CR 并突出显示 else 后面的块...任何关于疯狂、抱歉 Crystal Reports 在这里想要什么以及为什么这是不可接受的线索?我什至尝试设置一个值并在之后报告(根据Crystal report if then help, how to return a string or variable with formula),但我仍然遇到同样的错误。

else ( 0 );

有效 - 但这绝对不是我想要的。 (这个函数的另一个返回值也是一个字符串)

【问题讨论】:

  • 什么是“else ({RESULT.ENTRY})”?

标签: crystal-reports


【解决方案1】:

您尝试将 if 部分分配为 number 并将 else 部分分配为 String 这不起作用,您要么返回两个数字,要么返回两个字符串。

所以你将数值保存为字符串,在计算中使用时转换为数字

Local StringVar Result;
    if NumericText({RESULT.ENTRY}) // may be N.D. or B.L.D.
       then 
           Result:={RESULT.ENTRY};
       else  (
            {RESULT.ENTRY} );
     );

现在在计算中使用时可以使用ToNumber(Result)

【讨论】:

    【解决方案2】:

    这里要注意的最重要的一点是,如果将某些内容声明为 NumberVar,则要添加的字段必须是数字。如果处理小数,请使用 CurrencyVar,因为您不能将 NumberVar 设置为 0,然后将其添加到十进制值,这将导致在此处获得预期的数字结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多