SAP-ABAP-如何根据bom批量获取物料的最顶层料号

思路就是把所有的最底层级算作一个整体for all 取上一层,记录最底层料号和中间料号,然后按照这个逻辑用中间料号for all再找上一层,一层层往上找,最多的只需要for all 层级数,用到的select其实不会很多。查上层的方法就是STPO表输入料号找到BOM单号,MAST根据BOM单号找到上层物料。简单代码DEMO如下

REPORT ZLQT .SELECT MARC~MATNR ,MARC~MATNR AS MIDMA ,MARC~MATNR AS TOPMAFROM MARC INTO TABLE @DATA(LT_MATNR) UP TO 100 ROWS .
SORT LT_MATNR BY  MATNR .LOOP AT LT_MATNR ASSIGNING FIELD-SYMBOL().-MIDMA = -MATNR .-TOPMA = '' .
ENDLOOP.DATA(LT_TOPMATNR) = LT_MATNR[] .
CLEAR LT_TOPMATNR[] .DO  .SELECT  A~MATNR ,MAST~MATNR AS SCMATFROM  @LT_MATNR AS ALEFT  JOIN STPO ON STPO~IDNRK = A~MIDMALEFT  JOIN MAST ON STPO~STLNR = MAST~STLNRINTO  TABLE @DATA(LT_MID) .LOOP AT LT_MID INTO DATA(LS_MID).READ TABLE LT_MATNR ASSIGNING  WITH KEY matnr = LS_MID-MATNR BINARY SEARCH .IF SY-SUBRC = 0.DATA(LV_INDEX) = SY-TABIX .IF LS_MID-SCMAT IS NOT INITIAL. ""找到了上层料号-MIDMA = LS_MID-SCMAT .ELSE .  ""没找到上层了,已经是顶层了-TOPMA = -MIDMA .APPEND  TO LT_TOPMATNR .DELETE LT_MATNR[] INDEX LV_INDEX .ENDIF.ENDIF.ENDLOOP.IF LT_MATNR[] IS INITIAL .EXIT .ENDIF.
ENDDO.

以上代码没考虑工厂问题,每个公司工厂问题可能不同,按照自己公司修改即可


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部