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

Crystal reports 0记录时未使用子报表参数,crystal-reports,subreports,Crystal Reports,Subreports,我在crystal报表中有一个子报表,但返回了0条记录,但子报表坚持提取所有输入的订单备注,但仍然显示0条备注 这很奇怪,上面写着“阅读记录为15万人中的0人”,而且还在不断增加 subreports only选择标准是公司代码、客户代码和订单号。他们都通过了“{?PM-…”这件事 我打开了一个空白子报表的预览,SQL甚至没有提到选择条件。单独运行的查询确实会显示每个备注 你有什么想法吗 子报表公式: ({E_ORD_H.COMP_CODE} = {?Pm-E_ORD_H.COMP_CODE})

我在crystal报表中有一个子报表,但返回了0条记录,但子报表坚持提取所有输入的订单备注,但仍然显示0条备注

这很奇怪,上面写着“阅读记录为15万人中的0人”,而且还在不断增加

subreports only选择标准是公司代码、客户代码和订单号。他们都通过了“{?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})

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

在这种情况下,我认为是当参数为null时导致它(例如,语句
{E_ORD_H.COMP_code}=
并不意味着CR将能够预测这种情况并替换
{E_ORD_H.COMP_code}在子报表查询中的位置为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}

这可能不是最好的方法,但我通过创建一个公式字段修复了它,让它调用IsNull if语句中的参数,并输出一个0,因为从来没有一个订单号叫做0,所以如果主报告行为null,它将返回0