2008-12-19 98 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