ABAP 创建/修改内向交货单 BAPI GN_DELIVERY_CREATE/BAPI_INB_DELIVERY_CHANGE

记录一下开发内容,方便以后查看

  DATA:ls_vbsk     LIKE  vbsk,
       es_vbsk     LIKE  vbsk,
       lt_spe_vbfs TYPE TABLE OF  /spe/vbfs,
       ls_spe_vbfs TYPE /spe/vbfs,
       lt_komdlgn  TYPE TABLE OF komdlgn,
       ls_komdlgn  TYPE komdlgn,
       lt_vbfs     TYPE TABLE OF vbfs,
       lt_vbls     TYPE TABLE OF vbls,
       lt_lips     TYPE TABLE OF lips.
  DATA:l_nrnr      TYPE inri-nrrangenr.

  DATA:ls_head          TYPE bapiibdlvhdrchg,
       ls_headx         TYPE bapiibdlvhdrctrlchg,
       ls_techn_control TYPE bapidlvcontrol,
       ls_del           TYPE bapiibdlvhdrchg-deliv_numb,
       ls_dn_item       TYPE bapiibdlvitemchg,
       lt_dn_item       TYPE TABLE OF bapiibdlvitemchg,
       ls_dn_itemx      TYPE bapiibdlvitemctrlchg,
       lt_dn_itemx      TYPE TABLE OF bapiibdlvitemctrlchg,
       lt_return        TYPE TABLE OF bapiret2.


”创建内向交货单
          ls_komdlgn-lfart        = 'EL'.
          ls_komdlgn-vgtyp        = 'V'.
          ls_komdlgn-kzazu        = 'X'.  "这个是订单组合标识,生成一个内部交货单
          ls_komdlgn-lfdat        = <fs_head>-lfdat."交货时间
          ls_komdlgn-wadat        = <fs_head>-lfdat.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              input  = <fs_head>-lifnr
            IMPORTING
              output = ls_komdlgn-lifnr. "供应商编号
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              input  = <fs_head>-bstnr
            IMPORTING
              output = ls_komdlgn-vgbel.
          ls_komdlgn-vgpos = <fs_item>-posnr.
          CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
            EXPORTING
              input        = <fs_item>-matnr
            IMPORTING
              output       = ls_komdlgn-matnr
            EXCEPTIONS
              length_error = 1
              OTHERS       = 2.
          IF sy-subrc <> 0.
* Implement suitable error handling here
          ENDIF.
          ls_komdlgn-lfimg = <fs_item>-lfimg.
          ls_komdlgn-vrkme = 'EA'.
          ls_komdlgn-meins = 'EA'.
          ls_komdlgn-werks = <fs_item>-werks.
          ls_komdlgn-lgort = <fs_item>-lgort.
          ls_komdlgn-lichn = <fs_item>-lichn.
          ls_komdlgn-lifex        = <fs_head>-bstnr.
          ls_komdlgn-lifexpos     = <fs_item>-posnr.
          APPEND ls_komdlgn TO lt_komdlgn.
          CLEAR:ls_komdlgn.
          ls_vbsk-mandt = sy-mandt.
          ls_vbsk-ernam = sy-uname.
          ls_vbsk-erdat = sy-datum.
          ls_vbsk-uzeit = sy-uzeit.
          ls_vbsk-smart = 'L'.


     CALL FUNCTION 'GN_DELIVERY_CREATE'
        EXPORTING
          vbsk_i      = ls_vbsk
        IMPORTING
          vbsk_e      = es_vbsk
        TABLES
          xvbfs       = lt_vbfs
          xvbls       = lt_vbls
          xkomdlgn    = lt_komdlgn
          xxlips      = lt_lips
          et_spe_vbfs = lt_spe_vbfs.

      LOOP AT lt_spe_vbfs  INTO ls_spe_vbfs WHERE msgty CA  'EAX'."创建失败
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        output-mt_mm098_indelivery_order_sap-status = 'E'.
        output-mt_mm098_indelivery_order_sap-message = TEXT-m03.
        READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
        fs_ret-zsrmid = <fs_head>-zsrmid.
        APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
        "日志数据
        ls_log-zsrmid  = <fs_head>-zsrmid.
        ls_log-type    = 'E'.
        ls_log-message = TEXT-m03.
        ls_log-aedat1  = sy-datum.
        ls_log-aedat2  = sy-uzeit.
        ls_log-aedat3  = sy-datum.
        ls_log-aedat4  = sy-uzeit.
        MODIFY zshmm_023_log FROM ls_log.
        IF sy-subrc = 0.
          COMMIT WORK AND WAIT.
        ELSE.
          ROLLBACK WORK.
        ENDIF.
      ENDLOOP.

      IF sy-subrc NE 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        output-mt_mm098_indelivery_order_sap-status = 'S'.
        output-mt_mm098_indelivery_order_sap-message = TEXT-m04.
        READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
        fs_ret-zsrmid = <fs_head>-zsrmid.
        READ TABLE lt_lips INTO DATA(ls_lips) INDEX 1.
        fs_ret-vbeln  = ls_lips-vbeln.
        APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
        "日志数据
        ls_log-zsrmid  = <fs_head>-zsrmid.
        ls_log-type    = 'S'.
        ls_log-vbeln   = ls_lips-vbeln.
        ls_log-message = TEXT-m04.
        ls_log-aedat1  = sy-datum.
        ls_log-aedat2  = sy-uzeit.
        ls_log-aedat3  = sy-datum.
        ls_log-aedat4  = sy-uzeit.
        MODIFY zshmm_023_log FROM ls_log.
        IF sy-subrc = 0.
          COMMIT WORK AND WAIT.
        ELSE.
          ROLLBACK WORK.
        ENDIF.
        CLEAR:ls_vbsk,
              es_vbsk,
              lt_vbfs,
              lt_vbls,
              lt_komdlgn,
              lt_lips,
              lt_spe_vbfs.

      ENDIF.
    ENDLOOP.


修改数量
       SELECT SINGLE * FROM lips INTO @ls_lips WHERE vgbel = @<fs_head>-vbeln.
              "抬头
              ls_head-deliv_numb = <fs_head>-vbeln.
              ls_headx-deliv_numb = <fs_head>-vbeln.
              ls_techn_control-upd_ind      = 'U'.
              LOOP AT <fs_head>-item ASSIGNING FIELD-SYMBOL(<fs_item1>).
                "行项目
                ls_dn_item-deliv_numb = <fs_head>-vbeln.
                ls_dn_item-deliv_item = ls_lips-posnr.
                ls_dn_item-dlv_qty = <fs_item1>-lfimg. "数量
                ls_dn_item-sales_unit = ls_lips-vrkme."单位
                ls_dn_item-material = ls_lips-matnr."物料
                ls_dn_item-batch = ls_lips-charg.      "批次
                SELECT SINGLE umrez umren
                INTO (ls_dn_item-fact_unit_nom,ls_dn_item-fact_unit_denom)
                FROM marm
                WHERE matnr = ls_lips-matnr "销售单位一定要先在主数据维护
                AND   meinh = ls_dn_item-sales_unit.
                APPEND ls_dn_item TO lt_dn_item.
                ls_dn_itemx-deliv_numb = <fs_head>-vbeln.
                ls_dn_itemx-deliv_item = ls_lips-posnr.
                ls_dn_itemx-chg_delqty = 'X'."修改交货数量
                APPEND ls_dn_itemx TO lt_dn_itemx.
              ENDLOOP.



       CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'
          EXPORTING
            header_data    = ls_head
            header_control = ls_headx
            delivery       = ls_head-deliv_numb
            techn_control  = ls_techn_control
          TABLES
            item_data      = lt_dn_item
            item_control   = lt_dn_itemx
            return         = lt_return.
        LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE type CA 'EAX'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          output-mt_mm098_indelivery_order_sap-status = 'E'.
          output-mt_mm098_indelivery_order_sap-message = TEXT-m07.
          READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
          fs_ret-zsrmid = <fs_head>-zsrmid.
          APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
          "日志数据
          ls_log-zsrmid  = <fs_head>-zsrmid.
          ls_log-type    = 'E'.
          ls_log-message = TEXT-m07.
          ls_log-aedat1  = sy-datum.
          ls_log-aedat2  = sy-uzeit.
          ls_log-aedat3  = sy-datum.
          ls_log-aedat4  = sy-uzeit.
          MODIFY zshmm_023_log FROM ls_log.
          IF sy-subrc = 0.
            COMMIT WORK AND WAIT.
          ELSE.
            ROLLBACK WORK.
          ENDIF.
        ENDLOOP.

        IF sy-subrc NE 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          output-mt_mm098_indelivery_order_sap-status = 'S'.
          output-mt_mm098_indelivery_order_sap-message = TEXT-m06.
          READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
          fs_ret-zsrmid = <fs_head>-zsrmid.
          READ TABLE lt_lips INTO ls_lips INDEX 1.
          fs_ret-vbeln  = ls_lips-vbeln.
          APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
          "日志数据
          ls_log-zsrmid  = <fs_head>-zsrmid.
          ls_log-type    = 'S'.
          ls_log-vbeln   = ls_lips-vbeln.
          ls_log-message = TEXT-m06.
          ls_log-aedat1  = sy-datum.
          ls_log-aedat2  = sy-uzeit.
          ls_log-aedat3  = sy-datum.
          ls_log-aedat4  = sy-uzeit.
          MODIFY zshmm_023_log FROM ls_log.
          IF sy-subrc = 0.
            COMMIT WORK AND WAIT.
          ELSE.
            ROLLBACK WORK.
          ENDIF.
          CLEAR:ls_vbsk,
                es_vbsk,
                lt_vbfs,
                lt_vbls,
                lt_komdlgn,
                lt_lips,
                lt_spe_vbfs.
        ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值