使用RFC函数INST_EXECUTE_REPORT时,如何通过.Tables("PARA")使用通配符?
解决VBA调用SAP INST_EXECUTE_REPORT时通配符模糊查询失效问题
问题根源
你当前的代码仅使用PARA表传递参数,但PARA仅适用于单值输入参数(SAP中的PARAMETERS类型)。而支持通配符模糊查询的描述字段,属于SAP报表中的选择选项(SELECT-OPTIONS类型),这类参数需要通过SEL_TAB表传递条件,而非PARA。
解决方案
1. 理解SEL_TAB表结构
INST_EXECUTE_REPORT的SEL_TAB表用于定义选择选项条件,核心字段说明:
SEL_NAME:选择选项的屏幕名称(对应SAP报表中的选择参数名)SIGN:条件逻辑,I表示包含(Include),E表示排除(Exclude)OPTION:匹配规则,CP表示包含通配符(对应SAP界面的模糊匹配),EQ表示精确匹配,BT表示范围匹配LOW:条件下限值(模糊查询时填*CODE40*这类带通配符的值)HIGH:条件上限值(仅范围匹配时需要)
2. 修改VBA代码
在现有代码基础上,添加SEL_TAB的处理逻辑,针对需要模糊查询的参数插入条件行:
Set ObjR3_EXECUTE_REPORT = ObjR3.Add("INST_EXECUTE_REPORT") With ObjR3_EXECUTE_REPORT Set ObjR3_EXECUTE_REPORT_Name = .Exports("PROGRAM") Set ObjR3_EXECUTE_REPORT_Para = .Tables("PARA") Set ObjR3_EXECUTE_REPORT_Result = .Tables("RESULT_TAB") Set ObjR3_EXECUTE_REPORT_Output = .Tables("OUTPUT_TAB") ' 新增:定义选择选项表 Set ObjR3_EXECUTE_REPORT_Sel = .Tables("SEL_TAB") End With ObjR3_EXECUTE_REPORT_Name.Value = ReportName ' 处理参数:区分单值参数和选择选项 f = 1 For a = LBound(aParameters) To UBound(aParameters) aParameterPair = aParameters(a) aParameterInput = aParameterPair(UBound(aParameterPair)) sParameterName = aParameterPair(LBound(aParameterPair)) ' 示例:判断是否为需要模糊查询的选择选项(比如描述参数名为"KTEXT") If sParameterName = "KTEXT" Then ' 插入模糊查询条件 ObjR3_EXECUTE_REPORT_Sel.AppendRow With ObjR3_EXECUTE_REPORT_Sel(ObjR3_EXECUTE_REPORT_Sel.RowCount) .Fields("SEL_NAME").Value = sParameterName .Fields("SIGN").Value = "I" .Fields("OPTION").Value = "CP" .Fields("LOW").Value = aParameterInput(0) ' 传入带通配符的值,如"*CODE40*" End With Debug.Print "选择选项:" & sParameterName & " " & aParameterInput(0) Else ' 原单值参数处理逻辑 For c = LBound(aParameterInput) To UBound(aParameterInput) sParameterInput = aParameterInput(c) ObjR3_EXECUTE_REPORT_Para.AppendRow ObjR3_EXECUTE_REPORT_Para(f, "PARA_NAME") = sParameterName ObjR3_EXECUTE_REPORT_Para(f, "PARA_VALUE") = sParameterInput Debug.Print sParameterName & " " & sParameterInput f = f + 1 Next c End If Next a ' 执行RFC调用(补充原代码缺失的执行步骤) ObjR3_EXECUTE_REPORT.Call
3. 关键注意事项
- 确认参数类型:通过SAP SE38查看报表的选择屏幕,确认目标参数是
SELECT-OPTIONS还是PARAMETERS,选择选项必须用SEL_TAB传递。 - 通配符格式:直接传入
*CODE40*即可,SAP支持*作为任意字符通配符。 OPTION值:CP是通用的模糊匹配规则,前缀匹配可用PP,后缀匹配可用NP,按需调整。
内容的提问来源于stack exchange,提问作者Tyro
相关产品推荐
相关产品推荐

