2012-12-06 150 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)