2008-12-19 96 views
0

在Crystal報表中,您可以爲報表參數定義默認值。Crystal Reports - 默認參數

例如,我可能有一個日期範圍,並將默認開始日期設置爲12/01/2008,默認結束日期爲12/31/2008。

是否可以在運行時修改這些默認值?例如:

1 - 默認爲當月的第一天和最後一天?

2 - 默認爲專有公司財務日曆的第一天和最後一天? (即查看它在數據庫中)

3 - 第一個&10今年的最後幾天?

你明白了。這可能嗎?如果有人知道如何做到這一點,我甚至可以開放一個解決方案,涉及運行外部應用程序以接觸報告並修改它們。

編輯:

要回答由Philippe Grondier提出的問題,大多數的這些報告從一個應用程序內運行。我希望有一些比在運行時操作水晶物體更簡單的東西;我現在已經搞清楚了API的其他部分。不過,我可能會看看未來。

+0

我找到了關於代碼示例的評論。我將它們添加到我的答案中。 – 2009-01-09 12:35:44

回答

1

您打算從水晶報表界面運行水晶報表還是作爲嵌入在其他程序中的插件(例如,您可以使用Crystal Reports ActiveX Designer運行時支持 - craxdrt.dll - 在VB代碼中)?在最後一種情況下,可以在啓動報表之前操作報表的每個對象。然後根據您的需要更新參數等對象。

作爲這種運行時更新的簡單示例,我的報告打印例程將全程檢查報告中是否存在名爲「printedBy」的字段。如果找到該字段,它的值將被解析爲請求報告的用戶的域名並將被打印出來。

在更高層次上,您甚至可以重塑報表SQL字符串以添加可從您的代碼繼承的特定過濾器。這樣,你甚至不需要再參數:讓你的代碼添加「對飛」

編輯過濾值:一些代碼示例:

(m_rapport是CRAXDRT.report對象,ActiveSession是我現在的會話對象)

If m_rapport.ParameterFields.Count > 0 Then 
    For i = 1 To m_rapport.ParameterFields.Count 
     If m_rapport.ParameterFields(i).Name = "{?PUB_DateDebutPeriode}" Then 
      m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateDebutPeriode)) 
     End If 
     If m_rapport.ParameterFields(i).Name = "{?PUB_DateFinPeriode}" Then 
      m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateFinPeriode)) 
     End If 
     If m_rapport.ParameterFields(i).Name = "{?PUB_id_Personne}" Then 
      m_rapport.ParameterFields(i).AddCurrentValue StringFromGUID(clientActif.id_Personne) 
     End If 
    Next i 
Endif 

我也有另一種功能,改變報告的數據源在運行時,這樣的報表可以在不同的服務器/位置來執行。

+0

您可以給出一個代碼示例,您可以在其中測試報告中的特定字段值? – JosephStyons 2008-12-23 20:48:04