调用BAPI_REQUISITION_DELETE删除采购申请时报错的问题求助
排查BAPI_REQUISITION_DELETE报错“No purchase requisitions satisfying these selection criteria exist”的方案
针对你调用BAPI删除采购申请时遇到的报错,结合代码给出以下排查方向:
1. 采购申请/行项目的格式匹配问题
系统中采购申请编号(EBAN-BANFN)是10位字符型,行项目(EBAN-BNFPO)是5位字符型,如果内表gt_final中存储的是不带前导零的数字类型,直接赋值给BAPI参数会导致系统无法匹配到对应单据:
- 修复方式:给
ls_item_to_delete赋值时,使用转换出口函数补全前导零:" 处理采购申请编号 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <lfs_final>-banfn IMPORTING output = ls_item_to_delete-preq_no. " 处理行项目编号 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = <lfs_final>-bnfpo IMPORTING output = ls_item_to_delete-preq_item.
2. 行项目的有效性校验逻辑问题
代码中对PR状态的判断( <lfs_final>-statu <> 'N' AND <lfs_final>-statu <> space )可能存在遗漏:
- 检查
gt_final中的statu字段是否和系统表EBAN的STATU完全一致,部分已释放(状态'R')但无后续单据的PR仍可删除; - 确认
loekz字段是否正确映射了EBAN-LOEKZ(删除标识),避免误过滤可删除的行项目。
3. BAPI参数传递的准确性
- 检查
lt_items_per_pr的结构是否与BAPI的REQUISITION_ITEMS_TO_DELETE表结构完全匹配,确保preq_no、preq_item、delete_ind字段的类型和长度正确; - 调用BAPI时,
number参数传入的lv_banfn同样需要确保是10位带前导零的字符格式,避免因格式不匹配导致BAPI找不到单据。
4. 权限与单据状态限制
- 用事务码SU53检查当前用户是否拥有M_BANF_DEL权限对象的授权(采购申请删除权限);
- 确认目标PR未生成后续采购订单(EBAN-BSTYP为空),未被完全收货/发票校验,且符合系统配置的删除规则。
5. 扩展返回信息排查
修改代码中对BAPI返回表lt_return_delete的处理逻辑,输出所有返回信息(不仅是错误类型'E'),可以获取更详细的报错原因:
LOOP AT lt_return_delete INTO ls_return_delete. CASE ls_return_delete-type. WHEN 'E' OR 'W' OR 'I'. MESSAGE ls_return_delete-message TYPE ls_return_delete-type. ENDCASE. ENDLOOP.
内容的提问来源于stack exchange,提问作者darth-coder
相关产品推荐
相关产品推荐

