CSAP_ORD_BOM_MAINTAIN 销售订单BOM

@ [TOC]

1 BAPI:CSAP_ORD_BOM_MAINTAIN

2 Detail

2.1 Deleted line

STPO_API03-FLDELETE = ‘X’

2 .2 Modified Line
2.21 Please specify below lines .

STPO_API03-ITEM_NODE = STPO-STLKN.
STPO_API03-ITEM_COUNT = STOP-STPOZ.

2.22 Example.
  CONSTANTS : C(1) VALUE '.'.
  DATA: LT_OUT LIKE GT_OUT,
        LS_OUT LIKE GS_OUT.

  DATA: LWA_STKO TYPE STKO_API01,
        LWA_STPO TYPE STPO_API03,
        LIT_STPO TYPE TABLE OF STPO_API03 WITH HEADER LINE.

  DATA : LT_STPO LIKE TABLE OF STPO,
         LW_STPO LIKE LINE OF  LT_STPO.
  DATA:L_FORM TYPE CSAP_KBOM-DATUV.
  DATA:L_DATE TYPE SY-DATUM.
  DATA:U_DATE TYPE SY-DATUM.
  DATA:HEARDER LIKE CSAP_KBOM .
  DATA: LT_ZPPT018 LIKE TABLE OF ZPPT018,
        LS_ZPPT018 LIKE LINE OF LT_ZPPT018.

  DATA: LT_CDHDR LIKE TABLE OF CDHDR,
        LS_CDHDR LIKE LINE OF LT_CDHDR.
  DATA:L_INDEX  LIKE SY-TABIX.



  "触发数据变更
  CALL METHOD GCL_ALV_GRID->CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = DATA(LV_VALID).
  IF LV_VALID IS NOT INITIAL.

    CASE S_UCOMM.
      WHEN '&IC1'.
*     READ TABLE GT_OUT INTO GS_OUT INDEX RE_SELFIELD-TABINDEX.
*     SET PARAMETER ID 'MAT' FIELD GS_OUT-MATNR.
*     CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

      WHEN '&ZMODIFY' .   "  修改BOM


        LOOP AT GT_OUT  INTO GS_OUT  WHERE SEL = 'X'.

          MOVE-CORRESPONDING GS_OUT TO LS_OUT.
          APPEND LS_OUT TO LT_OUT.
          CLEAR:GS_OUT , LS_OUT.

        ENDLOOP.

        IF LT_OUT  IS NOT INITIAL.

          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_STPO FROM STPO
            FOR ALL ENTRIES IN LT_OUT
            WHERE STLNR =  LT_OUT-STLNR AND STLKN =  LT_OUT-STLKN AND  STPOZ =  LT_OUT-STPOZ
            AND DATUV = LT_OUT-DATUV .

        ENDIF.



        READ TABLE LT_OUT INTO LS_OUT   INDEX 1.
        HEARDER-VBELN =  LS_OUT-VBELN.
        HEARDER-VBPOS =  LS_OUT-VBPOS.
        HEARDER-MATNR =  LS_OUT-MATNR.
        HEARDER-WERKS =  LS_OUT-WERKS.
        HEARDER-STLAN =  LS_OUT-STLAN.

        CONCATENATE LS_OUT-DATUV+0(4)  LS_OUT-DATUV+4(2)  LS_OUT-DATUV+6(2) INTO L_FORM SEPARATED BY C.


*        SELECT *  INTO CORRESPONDING FIELDS OF TABLE LT_STPO FROM STPO  WHERE  STLNR = '00000004'  AND STLKN = '00000002'  AND STPOZ = '00000004'  .


        LOOP AT  LT_STPO  INTO Lw_STPO .
          IF p_MENGE IS NOT INITIAL.
            Lw_STPO-MENGE   =  p_MENGE .
          ENDIF.
          IF p_POTX12 IS NOT INITIAL.
            Lw_STPO-POTX1 = p_POTX11   .
          ENDIF.
          IF p_IDNRK IS NOT INITIAL.
            Lw_STPO-IDNRK   =   p_IDNRK  .
          ENDIF.
          LWA_STPO-ITEM_TEXT1  =     Lw_STPO-POTX1 .
          LWA_STPO-COMP_QTY   =      Lw_STPO-MENGE  .
          LWA_STPO-ITEM_NO    =    Lw_STPO-POSNR  .
          LWA_STPO-ITEM_CATEG  =    Lw_STPO-POSTP  .
          LWA_STPO-COMPONENT   =   Lw_STPO-IDNRK  .
          LWA_STPO-ITEM_COUNT  =   Lw_STPO-STPOZ.
          LWA_STPO-ITEM_NODE   =   Lw_STPO-STLKN .
          LWA_STPO-BOM_NO    =   Lw_STPO-STLNR  .
          APPEND LWA_STPO  TO LIT_STPO.
          CLEAR:Lw_STPO,LWA_STPO.
        ENDLOOP.

        IF SY-SUBRC <> 0.
* Implement suitable error handling here
        ENDIF.
* 订单BOM维护
        CALL FUNCTION 'CSAP_ORD_BOM_MAINTAIN'
          EXPORTING
            ORDER              = HEARDER-VBELN
            POSITION           = HEARDER-VBPOS
            MATERIAL           = HEARDER-MATNR
            PLANT              = HEARDER-WERKS
            BOM_USAGE          = HEARDER-STLAN
            VALID_FROM         = L_FORM
            I_STKO             = LWA_STKO
            FL_DEFAULT_VALUES  = 'X'
            FL_COMMIT_AND_WAIT = 'X'
          TABLES
            T_STPO             = LIT_STPO
          EXCEPTIONS
            ERROR              = 1
            OTHERS             = 2.


        IF SY-SUBRC = 0.

          COMMIT WORK .

          MESSAGE   '修改成功'  TYPE 'S' .
        ELSE.

          ROLLBACK WORK .
          MESSAGE   '修改失败'  TYPE 'E' .

        ENDIF.

        LOOP AT LT_OUT INTO LS_OUT.
          L_INDEX = SY-TABIX.

          CONCATENATE SY-MANDT  'K' LS_OUT-STLNR INTO     LS_OUT-OBJECTID .
          MODIFY LT_OUT  INDEX L_INDEX FROM LS_OUT TRANSPORTING OBJECTID.
          CLEAR:LS_OUT .

        ENDLOOP.
        CLEAR:L_INDEX .

        IF   LT_OUT[] IS NOT  INITIAL.


          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_CDHDR
            FROM CDHDR
            FOR ALL ENTRIES IN LT_OUT
            WHERE CDHDR~OBJECTCLAS = 'STUE' AND CDHDR~OBJECTID  = LT_OUT-OBJECTID .


          U_DATE = SY-DATUM .
          DELETE LT_CDHDR WHERE UDATE <> U_dATE.

          SORT  LT_CDHDR  BY UDATE  UTIME DESCENDING .

          DELETE ADJACENT DUPLICATES FROM LT_CDHDR COMPARING UDATE .



        ENDIF.

        LOOP AT LT_CDHDR INTO LS_CDHDR .
          LS_ZPPT018-CHANGENR  =  LS_CDHDR-CHANGENR.
          LS_ZPPT018-ZSBH  =  P_ZSBH.
          LS_ZPPT018-ZDATE  =  SY-DATUM.
          LS_ZPPT018-ZTIME  =  SY-UZEIT.
          LS_ZPPT018-ZUSER  =  SY-UNAME .
          APPEND LS_ZPPT018  TO  LT_ZPPT018.

          CLEAR:LS_CDHDR ,LS_ZPPT018.

        ENDLOOP.
        IF LT_ZPPT018  IS NOT   INITIAL.

          MODIFY ZPPT018  FROM TABLE LT_ZPPT018.
          IF SY-SUBRC = 0.
            COMMIT WORK.
          ELSE.
            ROLLBACK WORK .
          ENDIF.

        ENDIF.


        CLEAR: LIT_STPO, L_FORM,HEARDER .

      WHEN '&ZDELETE' .   "  删除BOM



        LOOP AT GT_OUT  INTO GS_OUT  WHERE SEL = 'X'.

          MOVE-CORRESPONDING GS_OUT TO LS_OUT.
          APPEND LS_OUT TO LT_OUT.
          CLEAR:GS_OUT , LS_OUT.

        ENDLOOP.

        IF LT_OUT  IS NOT INITIAL.

          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_STPO FROM STPO
            FOR ALL ENTRIES IN LT_OUT
            WHERE STLNR =  LT_OUT-STLNR AND STLKN =  LT_OUT-STLKN AND  STPOZ =  LT_OUT-STPOZ
            AND DATUV = LT_OUT-DATUV .

        ENDIF.



        READ TABLE LT_OUT INTO LS_OUT   INDEX 1.
        HEARDER-VBELN =  LS_OUT-VBELN.
        HEARDER-VBPOS =  LS_OUT-VBPOS.
        HEARDER-MATNR =  LS_OUT-MATNR.
        HEARDER-WERKS =  LS_OUT-WERKS.
        HEARDER-STLAN =  LS_OUT-STLAN.

        CONCATENATE LS_OUT-DATUV+0(4)  LS_OUT-DATUV+4(2)  LS_OUT-DATUV+6(2) INTO L_FORM SEPARATED BY C.



        LOOP AT  LT_STPO  INTO Lw_STPO .

          LWA_STPO-FLDELETE   =   'X' .
          LWA_STPO-ITEM_COUNT  =   Lw_STPO-STPOZ.
          LWA_STPO-ITEM_NODE   =   Lw_STPO-STLKN .

          APPEND LWA_STPO  TO LIT_STPO.
          CLEAR:Lw_STPO,LWA_STPO.
        ENDLOOP.

        IF SY-SUBRC <> 0.
* Implement suitable error handling here
        ENDIF.
* 订单BOM维护
        CALL FUNCTION 'CSAP_ORD_BOM_MAINTAIN'
          EXPORTING
            ORDER              = HEARDER-VBELN
            POSITION           = HEARDER-VBPOS
            MATERIAL           = HEARDER-MATNR
            PLANT              = HEARDER-WERKS
            BOM_USAGE          = HEARDER-STLAN
            VALID_FROM         = L_FORM
            I_STKO             = LWA_STKO
            FL_DEFAULT_VALUES  = 'X'
            FL_COMMIT_AND_WAIT = 'X'
          TABLES
            T_STPO             = LIT_STPO
          EXCEPTIONS
            ERROR              = 1
            OTHERS             = 2.


        IF SY-SUBRC = 0.

          COMMIT WORK .
         MESSAGE  '创建成功' TYPE 'S' .

        ELSE.

          ROLLBACK WORK .
          MESSAGE  '删除失败 ' TYPE 'E' .

        ENDIF.

        LOOP AT LT_OUT INTO LS_OUT.
          L_INDEX = SY-TABIX.

          CONCATENATE SY-MANDT 'K'  LS_OUT-STLNR INTO     LS_OUT-OBJECTID .
          MODIFY LT_OUT  INDEX L_INDEX FROM LS_OUT TRANSPORTING OBJECTID.
          CLEAR:LS_OUT .

        ENDLOOP.

        IF   LT_OUT[] IS NOT  INITIAL.


          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_CDHDR
            FROM CDHDR
            FOR ALL ENTRIES IN LT_OUT
            WHERE CDHDR~OBJECTCLAS = 'STUE' AND CDHDR~OBJECTID  = LT_OUT-OBJECTID .


        ENDIF.

        U_DATE = SY-DATUM .
        DELETE LT_CDHDR WHERE UDATE <> U_dATE.

        SORT  LT_CDHDR  BY UDATE  UTIME DESCENDING .

        DELETE ADJACENT DUPLICATES FROM LT_CDHDR COMPARING UDATE .





        LOOP AT LT_CDHDR INTO LS_CDHDR .
          LS_ZPPT018-CHANGENR  =  LS_CDHDR-CHANGENR.
          LS_ZPPT018-ZSBH  =  P_ZSBH1.
          LS_ZPPT018-ZDATE  =  SY-DATUM.
          LS_ZPPT018-ZTIME  =  SY-UZEIT.
          LS_ZPPT018-ZUSER  =  SY-UNAME .
          APPEND LS_ZPPT018  TO  LT_ZPPT018.

          CLEAR:LS_CDHDR ,LS_ZPPT018.

        ENDLOOP.
        IF LT_ZPPT018  IS NOT   INITIAL.

          MODIFY ZPPT018  FROM TABLE LT_ZPPT018.
          IF SY-SUBRC = 0.
            COMMIT WORK.
          ELSE.
            ROLLBACK WORK .
          ENDIF.

        ENDIF.


        CLEAR: LIT_STPO, L_FORM,HEARDER .


      WHEN '&ZADD'   .     " 添加BOM

        LOOP AT GT_OUT  INTO GS_OUT  WHERE SEL = 'X'.

          MOVE-CORRESPONDING GS_OUT TO LS_OUT.
          APPEND LS_OUT TO LT_OUT.
          CLEAR:GS_OUT , LS_OUT.

        ENDLOOP.

        IF LT_OUT  IS NOT INITIAL.

          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_STPO FROM STPO
            FOR ALL ENTRIES IN LT_OUT
            WHERE STLNR =  LT_OUT-STLNR AND STLKN =  LT_OUT-STLKN AND  STPOZ =  LT_OUT-STPOZ
            AND DATUV = LT_OUT-DATUV.

        ENDIF.



        READ TABLE LT_OUT INTO LS_OUT   INDEX 1.
        HEARDER-VBELN =  LS_OUT-VBELN.
        HEARDER-VBPOS =  LS_OUT-VBPOS.
        HEARDER-MATNR =  LS_OUT-MATNR.
        HEARDER-WERKS =  LS_OUT-WERKS.
        HEARDER-STLAN =  LS_OUT-STLAN.

        CONCATENATE LS_OUT-DATUV+0(4) LS_OUT-DATUV+4(2)  LS_OUT-DATUV+6(2) INTO L_FORM SEPARATED BY C.


        CLEAR:Lw_STPO,LT_STPO.

        Lw_STPO-IDNRK    =  p_IDNRK2 .
        Lw_STPO-MENGE  =   p_MENGE2  .
        Lw_STPO-POTX1  = p_POTX14 .
        Lw_STPO-POSNR   = p_POSNR2.
        APPEND Lw_STPO  TO LT_STPO .


        LOOP AT  LT_STPO  INTO Lw_STPO .
           LWA_STPO-ITEM_CATEG   = 'L'.
         LWA_STPO-ITEM_no  =     Lw_STPO-POSNR .
          LWA_STPO-ITEM_TEXT1  =     Lw_STPO-POTX1 .
          LWA_STPO-COMP_QTY   =      Lw_STPO-MENGE  .
          LWA_STPO-COMPONENT   =   Lw_STPO-IDNRK  .
          APPEND LWA_STPO  TO LIT_STPO.
          CLEAR:Lw_STPO,LWA_STPO.
        ENDLOOP.

        IF SY-SUBRC <> 0.
* Implement suitable error handling here
        ENDIF.
* 订单BOM维护
        CALL FUNCTION 'CSAP_ORD_BOM_MAINTAIN'
          EXPORTING
            ORDER              = HEARDER-VBELN
            POSITION           = HEARDER-VBPOS
            MATERIAL           = HEARDER-MATNR
            PLANT              = HEARDER-WERKS
            BOM_USAGE          = HEARDER-STLAN
            VALID_FROM         = L_FORM
            I_STKO             = LWA_STKO
            FL_DEFAULT_VALUES  = 'X'
            FL_COMMIT_AND_WAIT = 'X'
            FL_NEW_ITEM        = 'X'
          TABLES
            T_STPO             = LIT_STPO
          EXCEPTIONS
            ERROR              = 1
            OTHERS             = 2.

        IF SY-SUBRC = 0.

          COMMIT WORK .
          MESSAGE  '创建成功' TYPE 'S' .

        ELSE.
          ROLLBACK WORK .
          MESSAGE  '创建失败' TYPE 'E' .
        ENDIF.

        LOOP AT LT_OUT INTO LS_OUT.
          L_INDEX = SY-TABIX.

          CONCATENATE SY-MANDT  'K'  LS_OUT-STLNR INTO     LS_OUT-OBJECTID .
          MODIFY LT_OUT  INDEX L_INDEX FROM LS_OUT TRANSPORTING OBJECTID.
          CLEAR:LS_OUT .

        ENDLOOP.

        IF   LT_OUT[] IS NOT  INITIAL.


          SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_CDHDR
            FROM CDHDR
            FOR ALL ENTRIES IN LT_OUT
            WHERE CDHDR~OBJECTCLAS = 'STUE' AND CDHDR~OBJECTID  = LT_OUT-OBJECTID .


        ENDIF.


        U_DATE = SY-DATUM .
        DELETE LT_CDHDR WHERE UDATE <> U_dATE.

        SORT  LT_CDHDR  BY UDATE  UTIME DESCENDING .

        DELETE ADJACENT DUPLICATES FROM LT_CDHDR COMPARING UDATE .





        LOOP AT LT_CDHDR INTO LS_CDHDR .
          LS_ZPPT018-CHANGENR  =  LS_CDHDR-CHANGENR.
          LS_ZPPT018-ZSBH  =  p_ZSBH2.
          LS_ZPPT018-ZDATE  =  SY-DATUM.
          LS_ZPPT018-ZTIME  =  SY-UZEIT.
          LS_ZPPT018-ZUSER  =  SY-UNAME .
          APPEND LS_ZPPT018  TO  LT_ZPPT018.

          CLEAR:LS_CDHDR ,LS_ZPPT018.

        ENDLOOP.
        IF LT_ZPPT018  IS NOT   INITIAL.

          MODIFY ZPPT018  FROM TABLE LT_ZPPT018.
          IF SY-SUBRC = 0.
            COMMIT WORK.
          ELSE.
            ROLLBACK WORK .
          ENDIF.

        ENDIF.


        CLEAR: LIT_STPO, L_FORM,HEARDER .



    ENDCASE.

  ENDIF.
2.23 Experence

We must take care date format ‘2023.07.26’ for calling .

2.3

Please specify normal value .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值