我有一个子报表部分,显示与订单相关的详细信息(订单项)。在这个子报告中,我创建了一个共享变量,用于返回权重字段的总和:
WhilePrintingRecords;
Shared numbervar WeightTotal := Sum ({Report.TotalWeight})
在我的主报告中,我创建了另一个变量来显示子报告的总重量:
WhilePrintingRecords;
shared numbervar WeightTotal;
WeightTotal;
这适用于在报表页脚或页脚中显示总计。但是,我需要在页眉中显示这个数量。
我尝试使用EvaluateAfter()
函数创建另一个报表变量,以尝试将此数据放入标题部分。那没用。
我也尝试按照以下主题在主报告中创建全局变量的建议:Crystal Reports: global variable running total not displaying in header
甚至可以执行这样的任务吗?底层数据由sp生成(两者都在几个不同的报告中共享)。我可以打破一个新的sp来简单地总结这个总数,但我更愿意将其委托给水晶。
答案 0 :(得分:3)
问题在于,虽然在第二个公式中使用WhilePrintingRecords会强制Crystal在最终评估过程中比平时更晚地评估它,但这也是在评估子报表时。这意味着主报表中的所有公式都将 relative 处理到子报表。在您的情况下,即使使用WhilePrintingRecords关键字,也会在详细信息部分中子报表之前评估标题中的公式。这个图非常适合理解不同的传递:Multi-Pass Reporting Process。
您可以尝试使用SQL Expression为每个详细信息部分执行简单的汇总求和。不了解您的数据源或架构,很难给出一个例子,但这是一般的想法。只要返回标量,就可以将任何有效的SQL用于数据源。
select sum(weight)
from table
where table.orderID="table"."orderID"
另一种方法是每个订单使用一个额外的内部分组级别,完全删除子报表,并使用Crystal的sum()函数或全局变量来获得每个内部组的权重。