SAP BOM反查(可追溯值至顶级)

该功能可查询物料的顶级BOM,适用于最多7层BOM的情况。随着BOM层数可能的增长,可通过扩展查询逻辑来适应。

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

功能介绍:BOM层数在7层以内的(含7层)的物料,执行后都可以查询到顶级的BOM,逻辑很简单,后期如BOM层数增加,可自行增加查询逻辑。

*&---------------------------------------------------------------------*
*& Report ZBOM_CHECK
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbom_check.


TYPES : BEGIN OF ltype_bommat,
          matnr TYPE mara-matnr,
          werks TYPE marc-werks,
        END OF ltype_bommat.

DATA : lt_bommat TYPE TABLE OF ltype_bommat,
       ls_bommat LIKE LINE OF lt_bommat.

DATA: it_wultb   LIKE stpov OCCURS 0 WITH HEADER LINE,
      it_wultb2  LIKE stpov OCCURS 0 WITH HEA
### ABAP BOM 反查函数实现 在 SAP 系统中,对于物料清单 (Bill of Material, BOM) 的反向查找通常涉及递归算法来追踪物料的使用情况。具体来说,在ABAP环境中可以通过调用`CS_WHERE_USED_MAT`函数模块并结合自定义逻辑完成这一操作。 当执行BOM反查时,程序会先收集底层或中间层物料至内部表`gt_mast`[^1]。之后通过调用`CS_WHERE_USED_MAT`函数模块尝试定位这些物料在其上级组件中的位置;然而需要注意的是此函数仅能处理单级追溯任务,因此为了全面覆盖整个产品结构树,则需采用递归方式重复上述过程直至达到顶层成品或是无法再找到更高级别的父项为止。 在此过程中,每当成功识别出某物料属于最高级别(即不存在更高层次的应用场景),则设置特定标志位为`X`以标记该记录已完成分析。随后遍历所有未被标记过的条目继续进行下一轮迭代直到全部节点均被打上结束标签。最后一步是对所得结果集实施去重处理从而获得精简后的有效信息集合。 下面是一个简单的伪代码示例用于说明如何构建这样一个递归式的BOM反查功能: ```abap DATA: lt_materials TYPE TABLE OF mara, ls_material LIKE LINE OF lt_materials. FIELD-SYMBOLS: <fs_mat> LIKE LINE OF lt_materials. * 假设lt_materials已经包含了初始要查询的一批物料编号... LOOP AT lt_materials ASSIGNING FIELD-SYMBOL(<fs_mat>). PERFORM check_where_used USING <fs_mat>-matnr. ENDLOOP. FORM check_where_used USING iv_material. DATA: lv_top_flag TYPE char1 VALUE space, lt_superiors TYPE TABLE OF rsdms_stru. * 调用标准FM CS_WHERE_USED_MAT 来获取当前物料的直接上级们 CALL FUNCTION 'CS_WHERE_USED_MAT' EXPORTING matnr = iv_material IMPORTING top_level = lv_top_flag TABLES superiors = lt_superiors EXCEPTIONS OTHERS = 1. IF sy-subrc EQ 0 AND lv_top_flag NE 'X'. LOOP AT lt_superiors INTO DATA(ls_superior). APPEND ls_superior TO gt_all_results. "假设这是全局变量用来存储所有的发现 * 对每一个新发现的上级再次发起同样的检查流程 PERFORM check_where_used USING ls_superior-matnr. DELETE FROM gt_all_results WHERE NOT top_mark = 'X'. "清理掉那些已经被确认不是顶级成员的数据行 ENDLOOP. ELSEIF lv_top_flag = 'X'. MODIFY gt_all_results SETTING top_mark = 'X' WHERE matnr = iv_material. ENDIF. ENDFORM. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP扫地僧

你的鼓励将是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值