CV顾问

外向交货单新增行

需求:根据外围系统需求紧急发货,需要在原先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.
复制代码

 如有更合适方法请告知,感谢分享。

posted @   Gin^  阅读(640)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示