SAP BOM批量反查代码分享

本文分享了在SAP系统中批量反查物料BOM的代码,旨在提高查询效率,支持查询到顶层BOM。当系统版本为HANA2021及以上,可使用CS15M事务代码进行批量反查。文章提供了代码示例和ALV界面截图,同时提及系统已有标准功能的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SAP中经常会用到的一个功能就是需要反查BOM,通常我们都会让用户使用CS15去反查BOM,但是CS15只能单个物料的查询,查询的效率非常的低,这个时候就需要有程序可以批量支持物料的BOM反查,并且还有查询到顶层。

首先是筛选界面
在这里插入图片描述
代码分享

REPORT ZPPR075.

TABLES: mara,
        stpo,
        stko,
        stpu,
        mast,
      
### 查找ABAP中通过BOM反查顶层物料的方法 在SAP ABAP环境中,为了实现从底层物料反查至顶层物料的功能,通常采用递归方法。具体来说,先将目标底层或中间层物料放入内表`gt_mast`,随后调用`CS_WHERE_USED_MAT`函数模块来查找上一层级的物料[^3]。 由于每次调用仅能返回直接上级的信息,因此需要构建一个循环机制直到达到最高层级为止。当检测到某次查询的结果指向的是成品或是已经到达最顶级时,则设置特定标记位为'X'。此过程持续执行直至所有记录都被标记完毕,最后依据需求筛选并去除冗余数据项完成整个流程。 下面是一段用于演示如何利用递归来遍历整条产品结构链路直至找到根节点(即顶层物料)的示例代码: ```abap DATA: lt_materials TYPE TABLE OF mara, ls_material TYPE mara. FIELD-SYMBOLS: <fs_mat> LIKE LINE OF lt_materials. PARAMETERS: p_matnr TYPE matnr OBLIGATORY. START-OF-SELECTION. " 初始化:加载初始材料列表 SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE lt_materials WHERE matnr = @p_matnr. PERFORM find_top_level USING lt_materials CHANGING lt_materials. END-OF-SELECTION. LOOP AT lt_materials ASSIGNING FIELD-SYMBOL(<fs_mat>). WRITE:/ 'Top Level Material:', |{ <fs_mat>-matnr }|. ENDLOOP. FORM find_top_level USING it_input TYPE TABLE OF mara CHANGING ct_output TYPE TABLE OF mara. DATA: lv_found_all TYPE c VALUE space, lt_used_list TYPE TABLE OF cs_where_used_item OCCURS 0 WITH HEADER LINE. CLEAR: lv_found_all, lt_used_list[]. CALL FUNCTION 'CS_WHERE_USED_MAT' EXPORTING material = 'MATNR' plant = 'PLANT' * OTHER PARAMETER... TABLES whereusedlist= lt_used_list[] EXCEPTIONS NOT_FOUND = 1 OTHERS = 2. IF sy-subrc EQ 0 AND lines( lt_used_list ) GT 0. DELETE ADJACENT DUPLICATES FROM lt_used_list COMPARING matnr. APPEND LINES OF lt_used_list TO ct_output. MODIFY ct_output TRANSPORTING NO FIELDS WHERE top_flag NE 'X'. READ TABLE ct_output INDEX 1 ASSIGNING FIELD-SYMBOL(<top>). WHILE ASSIGNED( <top> ). CHECK <top>-top_flag IS INITIAL. REFRESH lt_used_list. CALL FUNCTION 'CS_WHERE_USED_MAT' EXPORTING material = <top>-matnr ... TABLES whereusedlist= lt_used_list[] EXCEPTIONS NOT_FOUND = 1 OTHERS = 2. IF sy-subrc EQ 0 AND lines( lt_used_list ) GT 0. INSERT LINES OF lt_used_list INTO TABLE ct_output. MODIFY ct_output TRANSPORTING NO FIELDS WHERE top_flag NE 'X'. ELSE. MODIFY ct_output SETTING <top>-top_flag = 'X'. ENDIF. READ TABLE ct_output INDEX 1 ASSIGNING (top>. ENDWHILE. ENDIF. ENDFORM. ``` 这段程序展示了基本逻辑框架,实际开发过程中可能还需要考虑更多细节如异常处理、性能优化等问题。此外,对于大型企业系统而言,建议充分测试以确保算法稳定性和准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我小时候很黑

你的打赏是对我的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值