ADSUBCON创建交货单时,扩充库存地点增强

业务背景:ADSUBCON创建交货单时,由于库存地点没有扩充,导致系统报错,用户希望再创建交货单时,系统自动扩充库存地点。

解决办法:找到合适的隐式增强点,先将库存地点扩充,然后进行交货单创建。

风险:由于扩充库存地点BAPI需要用到COMMIT,可能会导致单据流不一致的情况。请大家各自评估。

增强位置:DI_SUBCON_1_I041

*&--- ADSUBCON创建交货单时,扩充库存地点
  DATA IT_KOMDLGN TYPE STANDARD TABLE OF KOMDLGN.

  IT_KOMDLGN =  CORRESPONDING #( XKOMDLGN[] ).

  CALL FUNCTION 'ZFM_MM_EN_ADSUBCON'
    TABLES
      IT_KOMDLGN = IT_KOMDLGN.

FUNCTION ZFM_MM_EN_ADSUBCON.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_KOMDLGN STRUCTURE  KOMDLGN
*"----------------------------------------------------------------------
  DATA: LS_HEAD   TYPE BAPIMATHEAD,
        LS_STLD   TYPE BAPI_MARD,
        LS_STLDX  TYPE BAPI_MARDX,
        LS_RETURN TYPE BAPIRET2.


  LOOP AT IT_KOMDLGN INTO DATA(IS_KOMDLGN).

    SELECT COUNT(*) FROM MARD WHERE WERKS = IS_KOMDLGN-WERKS AND MATNR = IS_KOMDLGN-MATNR AND LGORT = IS_KOMDLGN-LGORT.

    IF SY-SUBRC <> 0.

      CLEAR:LS_HEAD,LS_STLD,LS_STLDX.

      LS_HEAD-MATERIAL     = IS_KOMDLGN-MATNR. " 物料编号
      LS_HEAD-STORAGE_VIEW = 'X'.              " 存储视图
      "
      LS_STLD-PLANT    = IS_KOMDLGN-WERKS.     " 工厂
      LS_STLD-STGE_LOC = IS_KOMDLGN-LGORT.     " 存储地点

      LS_STLDX-PLANT    = IS_KOMDLGN-WERKS.    " 工厂
      LS_STLDX-STGE_LOC = IS_KOMDLGN-LGORT.    " 存储地点

      CLEAR LS_RETURN.
      CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
        EXPORTING
          HEADDATA             = LS_HEAD       " 物料
          STORAGELOCATIONDATA  = LS_STLD       " 工厂&存储地点
          STORAGELOCATIONDATAX = LS_STLDX      " 工厂&存储地点
        IMPORTING
          RETURN               = LS_RETURN.

      IF LS_RETURN-TYPE CA 'AEX'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.
      ENDIF.

    ENDIF.

  ENDLOOP.

ENDFUNCTION.

 

posted @ 2025-03-18 09:34  艾靑  阅读(26)  评论(0)    收藏  举报