如何在FastReport VCL 6中的数据组标题中显示总计
FastReport VCL 6中出现的新功能之一是能够在标题栏中显示分组结果。以前,您只能在分组后显示结果。如果数据组足够大,则必须将其向下滚动以查找结果。在数据组标题中打印结果要方便得多。
我们来看看在标题栏中使用总数的特性。最初有关它如何工作的一点理论。
标题中的总数使用延迟处理来实现。在报告输出期间,所有具有非标准处理条件的对象都被放置在特殊列表中。然后,在达到一定条件时,触发对象的处理。
在标题区中成功显示总数必须遵守许多条件:
- 标题栏必须有成对的页脚band。这对确定报告的结构很有必要。或者更好地说,以确定我们将在下面考虑的事件;
- 成对的页脚band必须有一个可以计算总数的字段。相同的字段将被添加到标题band。如果你不需要这个数据组的页脚的结果,那就只是让它看不见。
现在考虑“Text”对象的新属性。Processing属性允许您定义一个事件,通过这个事件将在这个对象中显示一个值。事实上,Processing包含两个属性——GroupLevel和ProcessAt。 GroupLevel允许您设置数据组的嵌套级别。这是在您使用几个嵌套分组的情况下完成的。因此,您可以在每个组的每个标题中显示总计。
ProcessAt包含您可以开始处理该字段的事件列表。以下是可能的值:
- paColumnFinished——列显示结束时;
- paCustom——用户在报告脚本中创建的任意事件;
- paDataFinished——显示所有数据后;
- paDefault——默认值;
- paGroupFinished——在数据组显示结束时;
- paPageFinished——显示页面时;
- paReportFinished——显示报告时;
- paReportPageFinished——显示报告模板页面时。
例如,您选择在数据组结束时生成总数。为了发现这个数据组已经结束,FR要求一个小的数据组隐藏单元格。如果所选事件是paReportFinished,则页面页脚是必需的。
现在让我们在实践中考虑以上所有内容。我们需要创建一个包含两个会话的报告。一个嵌入另一个。从演示数据库中获取销售表。
您可以从模板中看到,我们创建了一个公司名称的数据组。然后我们添加了订单号的组。最后,在“Data” band中,显示了订单中的信息。每组的页脚总数为:
[SUM (< Sales. "Qty"> * < Sales. "List Price">, MasterData1)]
摘要显示在报告汇总区中。
我们的目标是将结果带入标题栏。我们从第一组开始。在右侧添加文本字段:“Total group sum: [SUM (< Sales." Qty "> * < Sales." List Price ">, MasterData1)] $”。在这个文本框的属性中,我们找到Processing并设置paGroupFinished的值:
运行报告:
现在让我们将两个文本字段添加到第二组。我们会把它们一个接一个放在右边。对于第一组,该值为“[SUM (< Sales." Qty "> * < Sales." List Price ">, MasterData1)] $”。对于第二组,是“from [SUM (< Sales." Qty "> * < Sales." List Price ">, MasterData1)] $”。
现在为第一组设置属性:GroupLevel - 0,ProcessAt - paGroupFinished。
对于第二组我们设置相同的属性:GroupLevel - 1,ProcessAt - paGroupFinished。
因此,您将首先推导出当前数据组的结果,然后推导出该级别以上的数据组。我们来看看它的样子:
它仍然显示整个报告的总计。添加一个文本字段到报表头:Total sum: [SUM (< Sales. "Qty"> * < Sales. "List Price">, MasterData1)] $。我们为它设置属性:GroupLevel - 0,ProcessAt - paReportPageFinished。运行报告:
在每种情况下,我们都显示一个具有相同聚合表达式的字段,但我们为数据组和报告标题获得了不同的值。这是关于组建总时间的一切。在某个时间点,聚合函数具有不同的值。这就是为什么正确设置ProcessAt参数很重要。