在这个网站上有这个问题的答案提示,但我问的是一个稍微不同的问题。
Crystal Reports在哪里记录此语法不起作用?
Trim({PatientProfile.First}) + " "
+ Trim(Iif(
IsNull({PatientProfile.Middle})
, Trim({PatientProfile.Middle}) + " "
, " "
)
)
+ Trim({PatientProfile.Last})
我知道解决方案是
If IsNull({PatientProfile.Middle}) Then
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Last})
Else
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Middle})
+ " " + Trim({PatientProfile.Last})
但我们怎么知道我们不能使用第一个版本?
IsNull的文档说
和Iif给出
我想如果你盯着关于“返回值类型”的那一行你可以得到它,但是......
答案 0 :(得分:10)
Crystal Reports在哪里记录此语法不起作用?
我怀疑在整个Universe中有足够大的空间可以记录在Crystal Reports中无效的所有内容......
答案 1 :(得分:5)
我认为CR会评估两个IIF的真假部分。因为那里有“Trim({PatientProfile.Middle})”部分,它将被评估为aganst null值,CR公式评估器似乎只是失败。
答案 2 :(得分:5)
我知道我在这个问题上已经迟了很多年了,但是在试图弄清楚同样的事情的时候,我遇到了这个问题。有趣的是,我甚至无法在Crystal Reports文档中找到答案,而是在link to IBM中找到答案。
通过Baiscally,如果您使用的是Crystal Reports 8.x或10.x,则ISNULL
和IIF
无法一起使用。来自网站:
<强>原因强>
Crystal Reports 8.x和10.x中存在一个缺陷,导致上述公式无法正常工作。 'IIF'和'IsNull'命令不能一起工作,包括尝试使用“Not”来修改IsNull命令;例如,IIF(Not IsNull())。
解决问题
解决方法是使用“If-Then-Else”语句。例如,
If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"
因此,如果你使用的是CR 8.x或10.x(我们是),那你就不走运了。当你将多个字段连接在一起并且其中一个字段可能为NULL时,它会非常有趣。
答案 3 :(得分:-3)
试试这个:
currencyvar tt;
currencyvar dect;
tt :={ship.comm_amount};
dect := tt - Truncate(tt);
tt := truncate(tt);
dect := dect * 100;
if dect = 0 then
UPPERCASE('$ ' + ToWords (tt,0 )) + ' ONLY'
else
UPPERCASE('$ ' + ToWords (tt,0) + ' And ' + ToWords(dect,0)) + ' ONLY ';