0记录时未使用子报表参数

时间:2013-04-25 15:47:35

标签: crystal-reports subreports

我在水晶报表中有一个子报表,但是返回了0条记录,但是子报表坚持拉动所有输入的订单备注,但仍显示0条备注。

这很奇怪,它说“读取记录0的150000”并且不断增加。

仅报告子报告的选项标准是公司代码,客户代码和订单号。他们都被传递了“{?PM -...”的事情。

我打开了一个空白子报表的预览版,SQL甚至没有提到选择标准。单独运行的查询确实会显示每条评论。

关于如何发生这种情况的任何想法?

子报告公式:

({E_ORD_H.COMP_CODE} = {?Pm-E_ORD_H.COMP_CODE})
and
({E_ORD_H.CUST_CODE} = {?Pm-E_ORD_H.CUST_CODE})
and
({E_ORD_H.ORD_NUM} = {?Pm-E_ORD_H.ORD_NUM})

1 个答案:

答案 0 :(得分:0)

当Crystal Report的行为与此类似,这意味着在DB服务器上有一些无法完成的逻辑,因此必须在本地完成。通常这是由于在记录选择公式中使用CR函数而导致的,该函数不会转换为DB的语言。

在这种情况下,我相信当参数为空时会导致它(例如,语句{E_ORD_H.COMP_CODE}=<null> 并不意味着 CR将能够预测到这种情况并在子报表的查询中替换{E_ORD_H.COMP_CODE} is null。相反,您需要显式检查那些空值参数:

not(isnull({?Pm-E_ORD_H.COMP_CODE})) 
and {E_ORD_H.COMP_CODE} = {?Pm-E_ORD_H.COMP_CODE}
and not(isnull({?Pm-E_ORD_H.CUST_CODE})) 
and {E_ORD_H.CUST_CODE} = {?Pm-E_ORD_H.CUST_CODE}
and not(isnull({?Pm-E_ORD_H.ORD_NUM}))
and {E_ORD_H.ORD_NUM} = {?Pm-E_ORD_H.ORD_NUM}