2012-11-29 41 views
1

假設我正在編寫一個報告,名爲someTable.someColumn。我需要的是在ReportHeader中包含所有的值。我知道我創建了一個子報表,將它傳遞給這個列並在詳細信息中進行迭代,但是我想知道是否可以在沒有子報表的情況下執行此操作。Crystal Reports:創建數組或從列中獲取值

如果我用下面,我得到正確的結果,這在我的情況是9:

COUNT(someTable.someColumn) 

我也試過以下,但它不工作 - 只需要9個之一隨機值。

Local NumberVar i := 0; 
Local StringVar Array items := {someTable.someColumn}; 
Local StringVar output := ""; 
while (i < count(items)) do (
    i := i+1; 
    output := output + items[i]; 
); 

output; 

是否可以遍歷列以獲取值?

回答

2

您不能在報告標題中執行此操作。您必須使用詳細信息部分來讀取每個值。

想到的唯一解決方案是使用子報表。雖然你不會pass them this column and iterate it in the details。因爲它只會傳遞列中的第一個值。您可以使用報告參數將報告參數傳遞給主報告,以便從數據庫中獲取列值。

0

我還沒有找到一種方法,在報表頁眉要做到這一點,但你可以把它放在你的報告頁腳用下面的公式:

global StringVar output; 
output := output + {someTable.someColumn} + ","; 

這將每次someTable.someColumn變化在執行生成報告的過程,並將其附加到全局變量。不幸的是,它並沒有保持它的所有實例都是最新的 - 例如,如果您將它包含在某個報告的詳細信息中,則可以在報告的過程中看到output的變化。在標題中,它只會顯示第一個值。

注意:您不想在此公式中設置output := "",因爲每次都會重置該值。看起來,雖然Crystal在創建時會自動初始化變量,並且我沒有遇到任何只有上述公式的錯誤(即,我不需要創建第二個公式來初始化output)。我還包括一個分隔符(+ ","),以幫助分離每個值,但您可以輕鬆刪除它們。

+0

謝謝,但它是無用的......無論你想用這個變量做什麼,你只能在報告結尾使用它。 – Emaborsa

+0

確實,這是我規定的限制。不幸的是,我不認爲有一種方法可以修改它以在標題中工作(報告的開頭部分)。 – Hannele