2012-12-06 187 views
1

我有2个十进制字段:GrossSalary和扣除。在报告中,我创建了一个名为NetSalary一个公式字段,它是:Crystal Report公式计算错误

If Not IsNull({SalaryDetails.GrossAmount}) Then 
{SalaryDetails.GrossAmount} - {SalaryDetails.Deduction} 

当数据可用报告运行正常,但如果没有,我得到以下错误

A number, currency amount,date,time, or date-time is required here. 
Details:errorKind 
Error in File tempxxxxxxxxx.rpt: 
Error in formula NetAmount: 
'If Not IsNull({SalaryDetails.GrossAmount}) Then 
' 
A number,currency amount,date,time, or date-time is required here. 
Details:errorKind 

如何解决这个?

+1

是值NULL还是空字符串?如果不是IsNull({SalaryDetails.GrossAmount})AND {SalaryDetails.GrossAmount} <>“”然后...我还会检查您的数据库以确保没有任何字母字符,因为这也会导致该消息。 – Andrew

+0

我还包括空支票。但是,如果我直接使用,我得到错误。所以我用如果不是IsNull({SalaryDetails.GrossAmount})和CSTR({SalaryDetails.GrossAmount})<>“”然后..但同样的问题 – Akhil

+1

你可以尝试在你的小数字段周围使用CDBL()吗?你确定数据库中没有字母字符吗? – Andrew

回答

1

如果Crystal Reports认为它使用的值不是数字,则会抛出此错误。 Crystal有许多转换功能,如CDBL,CSTR等,还有数据检查功能(IsNull,IsNumeric等),您可以使用它们。

在您的特定情况下,将所述值与DBL(CDBL({字段})晶体检查空值或空白后解决您的问题

0

的CDBL或IsNumeric函数是优良的工作例如:

{@Total}/100 * CDBL({tblinvdetail.disc})。在这个公式中,disc是tblinvdetail表的折扣列,我们假设disc列也接受空值,为了避免这个错误,CDBL或IsNumeric函数将null转换为0值,您应该在晶体报表中的任何公式中谨慎应用cdbl或IsNumeric函数以避免此类错误;如果输出的值没有浮点,则使用IsNumeric函数呃明智的CDBL功能。您还可以使用IsNull函数来判断空值,例如:

如果ISNULL({} tblinvdetail.disc),然后 “0” 其他 {} @Total/100 * {} tblinvdetail.disc

= ================================================== ================== Munawar Shah AFridi (MCSD.net)