我有一个带有公式字段的交叉表。查询返回类似
的内容 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
然而它返回除零错误。为什么我的付款模式公式没有正确评估。我尝试将支付模式公式放在报表头中,交叉表是第二个标题,但它仍然会抛出相同的错误。
答案 0 :(得分:2)
两个问题。
第一个语法错误 - 或者更确切地说是拼写错误,最后'e'丢失了:)
numberVar result:={MarketValue}/mode;
第二 - 您需要按指定的顺序评估形式。假设你的第一个公式名为'calc_mode',那么第二个公式应该以next语句开头:
EvaluateAfter({@calc_mode});
答案 1 :(得分:2)
我很高兴您已经找到了Arvo的答案,但我有一些简化代码的建议:
模式是一个buit-in Crystal函数(请参阅Crystal的帮助文件)。因此,当我看到你使用该词作为自定义变量的名称时,我的大脑做了一个后空翻。如何将其称为“numPayPeriods”呢?
由于您的示例公式包含字段值,因此Crystal默认实现 WhileReadingRecords (再次参见Crystal的帮助文件)。因此,在这种情况下添加它是多余的。你可以完全理解。
您的示例中不需要2个单独的公式。此外,Crystal语法中不需要结果变量。你可以将整个事情简化为1个公式:
if({PaymentMode}='H') then
{MarketValue}/2
else
{MarketValue}/12;