2009-07-26 164 views
1

在我的水晶報表公式下面一行是給錯誤:水晶報表總和錯誤:「缺少)」

NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

錯誤:

"The) is missing" 

該報告使用Crystal創建報告11.

當我在Crystal Reports中運行它時,報告運行正常。

但是,當我從利用Visual Studio .NET 2008的Crystal Reports Basic(2008年5月更新)(在http://resources.businessobjects.com/support/additional_downloads/runtime.asp#09處提供)的ASP.NET Web應用程序運行報表時,這是我收到錯誤的時候。

我猜測用更新版本的Crystal Reports進行求和時會發生一些變化,但我一直無法找到關於這個特定問題的任何文檔。

我已經驗證在我的測試用例中沒有產生錯誤的空值。

生成錯誤的行是公式的第一行。

預先感謝您的時間

編輯:這裏是整個公式

*NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); NumberVar sales0304 := Sum ({sp_YES_AccountSnapshot;1.ST0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + Sum ({sp_YES_AccountSnapshot;1.DR0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}); if sales0304 = 0 then ToText ("Increase in Sales: N/A") else if(sales0405 < sales0304) then ToText ("") else "Increase in Sales: " + Replace (ToText (Int(RoundUp ((((sales0405 - sales0304)/sales0304) * 100)))), ".00", "") + "%"*

事實證明,這是造成問題的最後一行。任何想法爲什麼?我通過從中刪除Replace,Int和Roundup函數來修復它(刪除了過程中的一些括號。)

注意:對於該代碼格式不佳的抱歉,我無法讓代碼標記放置好與

回答

1

剛剛有這個問題,這個帖子導致我的問題是功能RoundUp()

該功能是在Crystal Reports XI中引入的,您說您創建了報告。如果您使用較舊的客戶端庫(我正在撰寫的一個軟件是使用版本9),則該功能不存在並且發生了您報告的錯誤。

"The) is missing" 

我認爲,如果你創建一個自定義函數來代替RoundUp(),叫做任何你喜歡的,_RoundUp()例如:

Function (NumberVar num, Optional NumberVar places := 0) (
    -int(-num * (10^places))/(10^places) 
) 

這工作,因爲int()功能實際上是floor(),並且向下取整爲最近的整數。因此,取整數的負數,將其鋪底並消除負數將導致四捨五入功能(通過地板的天花板)。

通過對比例因子進行預乘並進行除法後反轉縮放,可以滿足places參數。

2

從晶體中的多行復制粘貼我會:

  1. 定義在細節部分的基團爲{sp_YES_AccountSnapshot;1.Cust}
  2. 更新的功能類似於:

    NumberVar sales0405 := SUM({sp_YES_AccountSnapshot;1.ST0405_Ext}) + SUM({sp_YES_AccountSnapshot;1.DR0405_Ext});

  3. 在組

  4. 禁止該組頭

您可能需要使用疊加部分下面的選項(參見節專家)的頁腳中的函數來得到你想要的佈局。

+0

自從我上一次在Crystal中進行速成課程已經過去了大約8個月。讓我看看我是否正確理解你。步驟1的目的是爲每個「客戶」(客戶)創建一些類別的部分。然後,我們不需要在公式中添加客戶標識符,因爲公式將在這些「客戶部分」的頁腳內使用。然後,我們要顯示的是頁腳..所以我們將隱藏標題並做其他必要的事情。我離現實有多近?謝謝對不起,無奈:) – 2009-07-26 08:38:00

+0

你是對的。 – 2009-07-26 16:52:42

+0

關於我上面編輯rexem的任何想法?謝謝。 – 2009-07-27 07:59:11

2

多return語句是不是一個好主意:

NumberVar sales0405 := Sum ({sp_YES_AccountSnapshot;1.ST0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + 
         Sum ({sp_YES_AccountSnapshot;1.DR0405_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

NumberVar sales0304 := Sum ({sp_YES_AccountSnapshot;1.ST0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}) + 
         Sum ({sp_YES_AccountSnapshot;1.DR0304_Ext}, {sp_YES_AccountSnapshot;1.Cust}); 

Stringvar output; 

IF sales0304 = 0 THEN 
    output := ToText ("Increase in Sales: N/A") 
ELSE IF(sales0405 < sales0304) THEN 
    output := ToText ("") 
ELSE 
    output := "Increase in Sales: " + Replace (ToText (Int(RoundUp ((((sales0405 - sales0304)/sales0304) * 100)))), ".00", "") + "%"; 

輸出;

最後一行,聲明「輸出」變量是必需的,以便Crystal知道要打印什麼。這也確保了數據類型始終相同。