在交叉表公式中除以零

时间:2011-01-20 06:13:53

标签: crystal-reports crystal-reports-2008 crystal-reports-xi

我有一个带有公式字段的交叉表。查询返回类似

的内容
 CategoryID   Company       MarketValue   PaymentMode
  1            ABC             1000         H
  1            xyz             2000         H
  3            efg             9800         H

付款方式是每年半年由'H'表示 我制作了一个公式字段来评估付款方式

WhileReadingRecords;
numberVar mode;  
         if({PaymentMode}='H') then mode:=2 else mode:=12

然后我做了另一个公式字段

WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result

然而它返回除零错误。为什么我的付款模式公式没有正确评估。我尝试将支付模式公式放在报表头中,交叉表是第二个标题,但它仍然会抛出相同的错误。

2 个答案:

答案 0 :(得分:2)

两个问题。

第一个语法错误 - 或者更确切地说是拼写错误,最后'e'丢失了:)

numberVar result:={MarketValue}/mode;

第二 - 您需要按指定的顺序评估形式。假设你的第一个公式名为'calc_mode',那么第二个公式应该以next语句开头:

EvaluateAfter({@calc_mode});

答案 1 :(得分:2)

我很高兴您已经找到了Arvo的答案,但我有一些简化代码的建议:

  1. 模式是一个buit-in Crystal函数(请参阅Crystal的帮助文件)。因此,当我看到你使用该词作为自定义变量的名称时,我的大脑做了一个后空翻。如何将其称为“numPayPeriods”呢?

  2. 由于您的示例公式包含字段值,因此Crystal默认实现 WhileReadingRecords (再次参见Crystal的帮助文件)。因此,在这种情况下添加它是多余的。你可以完全理解。

  3. 您的示例中不需要2个单独的公式。此外,Crystal语法中不需要结果变量。你可以将整个事情简化为1个公式:

    if({PaymentMode}='H') then
    {MarketValue}/2
    else
    {MarketValue}/12;