如果在脚本中设置,具有聚合函数的表达式将不起作用

问题描述 投票:0回答:1

我想在我的报告的 ReportSummary 部分的备注字段中打印此总和

[ SUM( <DETAILDATASET."IntegerField">, DetailData1)] 

如果我将此代码直接放入备注字段的文本中,效果很好。但是,如果我使用“OnBeforePrint”处理程序设置代码

procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);
begin  
  Memo1.Text  := '[ SUM( <DETAILDATASET."IntegerField">, DetailData1)]';
end;

什么也没有显示。该表达式的计算结果为

NULL

这似乎是聚合函数的一些问题,因为其他表达式(例如

[date]
[1 + 1]
)在“OnBeforePrint”处理程序中设置时可以工作。

快速报告文档没有提及在报告脚本中使用聚合函数的任何限制。

是否可以通过脚本使用聚合函数?我是否缺少一些设置来使其工作?

我正在使用 FastReport 版本 2024.2.8 和 Delphi 10.4.2。

fastreport
1个回答
0
投票

问题确实是由于专门处理聚合函数而引起的。如果它们直接输入到备注字段的文本中,则会将它们添加到报表引擎的聚合列表 (

Engine.Aggregate
) 中。打印报告时,仅计算此列表中包含的聚合。如果您使用报告脚本设置聚合函数,它不会自动添加到该列表中。

因此,解决方案是手动将聚合函数添加到报告脚本中的聚合列表中:

procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);
begin  
  Memo1.Text  := '[ SUM( <DETAILDATASET."IntegerField">, DetailData1)]';  
  
  TFrxMyEngine( Engine).GetAggregates.AddItems( Page1);
end;

由于所需的函数(

TFrxMyEngine.GetAggregates
TfrxCustomAggregateList.AddItems
)在开箱即用的报告脚本中不可用,因此首先必须将它们作为自定义方法提供给报告。我遵循了官方快速报告文档。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.