如何将Crystal Reports主报表DocEntry字段传入子报表查询作为筛选条件
Crystal Reports子报表传参优化方案
你当前报表生成耗时过长的核心原因是子报表未做服务端筛选,全量拉取INV1表数据后在Crystal Reports内存层做关联过滤,数据量较大时性能损耗极高。通过将主报表DocEntry字段作为筛选参数传入子报表的查询语句,可实现数据库服务端提前过滤,大幅降低数据拉取量,具体操作步骤如下:
- 步骤1:创建子报表参数
进入子报表编辑界面,打开字段资源管理器,右键「参数字段」选择新建,参数名称设为P_DocEntry,数据类型与主报表的DocEntry字段保持一致(通常为数值型),无需设置默认值。 - 步骤2:修改子报表查询语句
打开子报表的数据库查询编辑器,将原查询调整为:
保存查询设置。SELECT ItemCode, Dscription FROM INV1 WHERE DocEntry = {?P_DocEntry} - 步骤3:配置主-子报表参数传递
回到主报表设计界面,右键点击子报表控件,选择「更改子报表链接」,在弹出的配置窗口中:- 左侧可用字段列表选中主报表的
DocEntry字段,添加到右侧待传递字段列表 - 下方「子报表参数字段」下拉框,选择刚才新建的
P_DocEntry作为接收参数 - 取消勾选「在子报表中使用已选择的字段用于链接数据」(避免重复做内存层关联),确认保存所有设置。
- 左侧可用字段列表选中主报表的

配置完成后重新运行报表,子报表会根据传入的DocEntry值直接从数据库过滤对应行数据,无需全表拉取,报表生成耗时会大幅缩短。
内容的提问来源于stack exchange,提问作者LewoSoft
相关产品推荐
相关产品推荐

