1. 程式人生 > 其它 >外向交貨單新增行

外向交貨單新增行

需求:根據外圍系統需求緊急發貨,需要在原先DN上新增行

實現:

由於實踐在網上找到的幾個與DN相關BAPI之後,並未生效,想通過交貨單增強處理的BADI進行實施

BADI: LE_SHP_DELIVERY_PROC

        IF_EX_LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE

 

BAPI/SPE/OUTB_DLV_CHG_ITEMS_INSERT or BAPI_DELIVERYPROCESSING_EXEC

嘗試後能觸發該BADI的實現(搜到相關帖子該BAPI能實現DN新增行,自己嘗試後並未實現,且失敗無返回訊息)

1.新建FM:ZSD_OUTB_DLV_ITEM_CTEATE

並建立全域性變數 DATA:g_xlips TYPE LINE OF shp_lips_t.用於DN行資料傳輸

FUNCTION zsd_outb_dlv_item_cteate.
*"----------------------------------------------------------------------
*"*"本地介面:
*"  IMPORTING
*"     VALUE(I_DN_ITEM) TYPE  ZSD_DNITEM_ADD_API
*"  EXPORTING
*"     VALUE(O_MSGTY) TYPE  BAPI_MTYPE
*"     VALUE(O_MSG) TYPE  BAPI_MSG
*"---------------------------------------------------------------------- DATA: ls_vbkok TYPE vbkok, ls_delivery_head TYPE likpvb, l_brgew LIKE marm-brgew, lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE. " Record posnr before inserting new item
SELECT SINGLE MAX( posnr ) FROM lips INTO @DATA(lv_posnr) WHERE vbeln = @i_dn_item-vbeln AND uecha = ''. ADD 10 TO lv_posnr. "Material SELECT SINGLE mtart,matkl,meins,maktx FROM mara INNER JOIN makt ON mara~matnr = makt~matnr AND spras = @sy-langu INTO ( @g_xlips-mtart,@g_xlips-matkl,@i_dn_item-meins,@g_xlips-arktx ) WHERE mara~matnr = @i_dn_item-matnr. "BRGEW 毛重 SELECT SINGLE brgew,gewei FROM marm INTO ( @l_brgew,@g_xlips-gewei ) WHERE matnr = @i_dn_item-matnr AND meinh = @i_dn_item-meins. g_xlips-mandt = sy-mandt. g_xlips-vbeln = i_dn_item-vbeln. g_xlips-posnr = lv_posnr. g_xlips-pstyv = i_dn_item-pstyv. g_xlips-ernam = sy-uname. g_xlips-erzet = sy-uzeit. g_xlips-erdat = sy-datum. g_xlips-matnr = i_dn_item-matnr. g_xlips-werks = i_dn_item-werks. g_xlips-lgort = i_dn_item-lgort. g_xlips-charg = i_dn_item-charg. "批次 g_xlips-lfimg = i_dn_item-lfimg. "交貨數量 g_xlips-meins = i_dn_item-meins. g_xlips-vrkme = i_dn_item-meins. "i_dn_item-vrkme. Default g_xlips-umvkz = 1. g_xlips-umvkn = 1. g_xlips-brgew = l_brgew * i_dn_item-lfimg. "毛重 g_xlips-lgmng = i_dn_item-lfimg. "實際交貨數 g_xlips-mbdat = sy-datum. "備料/可用性日期 g_xlips-fkrel = 'J'. "開票相關 g_xlips-xchpf = 'X'. g_xlips-xchar = 'X'. g_xlips-lfimg_flo = i_dn_item-lfimg. g_xlips-ormng = i_dn_item-lfimg. CALL FUNCTION '/SPE/OUTB_DLV_CHG_ITEMS_INSERT' EXPORTING if_delivery_number = i_dn_item-vbeln is_vbkok = ls_vbkok is_delivery_head = ls_delivery_head TABLES * it_new_items = lt_new_items et_return = lt_return. READ TABLE lt_return WITH KEY type = 'E'. IF sy-subrc NE 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. " Get new item number in delivery SELECT SINGLE COUNT(*) FROM lips WHERE vbeln = @i_dn_item-vbeln AND posnr = @lv_posnr. IF sy-subrc = 0. o_msgty = 'S'. ELSE. o_msgty = 'E'. ENDIF. ENDFUNCTION.

2.BADI: LE_SHP_DELIVERY_PROC 實施

全域性變數g_xlips 中有部分與後續交貨過賬相關引數 通過直接賦值

METHOD if_ex_le_shp_delivery_proc~save_document_prepare.
    DATA:wa_xlips LIKE LINE OF ct_xlips,
         wa_xlikp LIKE LINE OF ct_xlikp,
         g_xlips  TYPE char40 VALUE '(SAPLZFG_SD001)G_XLIPS'.
    FIELD-SYMBOLS <fs_xlips> TYPE lipsvb.

    READ TABLE ct_xlikp INTO wa_xlikp INDEX 1.
    IF wa_xlikp-updkz = 'U'.
      ASSIGN (g_xlips) TO <fs_xlips>.
      IF <fs_xlips> IS ASSIGNED.
        READ TABLE ct_xlips INTO wa_xlips INDEX 1.
        CHECK sy-subrc = 0.
        <fs_xlips>-updkz    = 'I'.
        <fs_xlips>-bwart    = wa_xlips-bwart.
        <fs_xlips>-sumbd    = wa_xlips-sumbd .
        <fs_xlips>-mtvfp    = wa_xlips-mtvfp .
        <fs_xlips>-vtweg    = wa_xlips-vtweg .
        <fs_xlips>-spart    = wa_xlips-spart .
        <fs_xlips>-prctr    = wa_xlips-prctr .
        <fs_xlips>-bedar_lf = wa_xlips-bedar_lf .
        <fs_xlips>-kzbew    = wa_xlips-kzbew .
        <fs_xlips>-berid    = wa_xlips-berid .
        <fs_xlips>-akmng    = wa_xlips-akmng .
        <fs_xlips>-gmcontrol = wa_xlips-gmcontrol.
        <fs_xlips>-posting_change = wa_xlips-posting_change.
        <fs_xlips>-gbsta    = wa_xlips-gbsta.
        <fs_xlips>-uvall    = wa_xlips-uvall .
        <fs_xlips>-uvfak    = wa_xlips-uvfak .
        <fs_xlips>-uvpak    = wa_xlips-uvpak .
        <fs_xlips>-uvpik    = wa_xlips-uvpik .
        <fs_xlips>-uvvlk    = wa_xlips-uvvlk .
        <fs_xlips>-uvwak    = wa_xlips-uvwak .
        <fs_xlips>-wbsta    = wa_xlips-wbsta .
        <fs_xlips>-lfdez    = wa_xlips-lfdez .
        APPEND <fs_xlips> TO ct_xlips.
      ENDIF.

    ENDIF.
  ENDMETHOD.

 

搜尋

複製