ABAP EWM 库存状态变更

仓库间调拨,更改目标仓位目标库存地点,用fm:/SCWM/STOCK_CHANGE,前台tcode:/n/scwm/post

FUNCTION zewm_change_stock.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_LGNUM) TYPE  /SCWM/LGNUM
*"     REFERENCE(IT_INPUT) TYPE  ZEWM_T_001
*"  EXPORTING
*"     REFERENCE(ET_OUTPUT) TYPE  BAPIRET2_TAB
*"----------------------------------------------------------------------

  DATA:
    lr_huident  TYPE rseloption,
    lt_huitm    TYPE /scwm/tt_stock_select,
    lt_huhdr    TYPE /scwm/tt_huhdr,
    ls_header   TYPE /scwm/s_gmheader,
    lt_item     TYPE /scwm/tt_spitem,
    ls_item     TYPE /scwm/s_spitem,
    lt_ltap_vb  TYPE /scwm/tt_ltap_vb,
    lt_bapiret  TYPE bapiret2_tab,
    lt_bapiret2 TYPE bapiret2_tab,
    lv_severity TYPE bapi_mtype,
    lv_id       TYPE /lime/line_item_id.

  CLEAR:lt_bapiret.

  LOOP AT it_input INTO DATA(ls_input).

    CLEAR:lv_severity.

    /scwm/cl_tm=>cleanup( ).
    /scwm/cl_tm=>set_lgnum( iv_lgnum ).

    lr_huident = VALUE #( ( sign = 'I' option = 'EQ' low = ls_input-huident ) ).
    CLEAR: lt_huitm, lt_huhdr.
    CALL FUNCTION '/SCWM/SELECT_STOCK'
      EXPORTING
        iv_lgnum   = iv_lgnum
        ir_huident = lr_huident
      IMPORTING
        et_huitm   = lt_huitm
        et_huhdr   = lt_huhdr
      EXCEPTIONS
        error      = 1.

    IF lt_huitm[] IS INITIAL.
      lv_severity = 'E'.
      APPEND VALUE #( id = '00' type = 'E' number = '398' message = '未查询到HU:' && ls_input-huident ) TO lt_bapiret.
      CONTINUE.
    ENDIF.
    READ TABLE lt_huitm INTO DATA(ls_huitm) INDEX 1.

    CLEAR ls_header.
    ls_header-lgnum = iv_lgnum.
    ls_header-created_by = sy-uname.
    ls_header-post  = abap_false.
    ls_header-compl = abap_true.
    ls_header-code = '/SCWM/POST'.

    CLEAR:lv_id,lt_item,ls_item,ls_item-t_quan.
    ADD 1 TO lv_id.
    ls_item-id                     = lv_id.
    ls_item-id_group               = '2'.
    ls_item-direction              = 'T'.
    ls_item-procty                 = ls_input-procty.
    ls_item-guid_hu                = ls_input-guid_hu.
    ls_item-huident                = ls_input-huident.
*    ls_item-squant_set             = 'X'.
    ls_item-loc-lgnum              = ls_huitm-lgnum.
    ls_item-loc-lgtyp              = ls_huitm-lgtyp.
    ls_item-loc-lgpla              = ls_huitm-lgpla.
    " 源
    ls_item-source_s-idx_stock     = ls_huitm-idx_stock.
    ls_item-source_s-guid_stock    = ls_huitm-guid_stock.
    ls_item-source_s-matid         = ls_huitm-matid.
    ls_item-source_s-batchid       = ls_huitm-batchid.
    ls_item-source_s-cat           = ls_huitm-cat.
    ls_item-source_s-stock_doccat  = ls_huitm-stock_doccat.
    ls_item-source_s-stock_docno   = ls_huitm-stock_docno.
    ls_item-source_s-stock_itmno   = ls_huitm-stock_itmno.
    ls_item-source_s-stock_usage   = ls_huitm-stock_usage.
    ls_item-source_s-owner         = ls_huitm-owner.
    ls_item-source_s-owner_role    = ls_huitm-owner_role.
    ls_item-source_s-entitled      = ls_huitm-entitled.
    ls_item-source_s-entitled_role = ls_huitm-entitled_role.
    ls_item-source_s-stock_cnt     = ls_huitm-stock_cnt.
    ls_item-source_s-qdoccat       = ls_huitm-qdoccat.
    ls_item-source_s-qdocid        = ls_huitm-qdocid.
    ls_item-source_s-qitmid        = ls_huitm-qitmid.
    " 目标
    ls_item-dest_s-matid           = ls_huitm-matid.
    ls_item-dest_s-batchid         = ls_input-batchid.
    ls_item-dest_s-cat             = ls_input-to_cat.   " Cat
    ls_item-dest_s-stock_doccat    = ls_huitm-stock_doccat.
    ls_item-dest_s-stock_docno     = ls_huitm-stock_docno.
    ls_item-dest_s-stock_itmno     = ls_huitm-stock_itmno.
    ls_item-dest_s-stock_usage     = ls_huitm-stock_usage.
    ls_item-dest_s-owner           = ls_input-owner.
    ls_item-dest_s-owner_role      = ls_huitm-owner_role.
    ls_item-dest_s-entitled        = ls_input-entitled.
    ls_item-dest_s-entitled_role   = ls_huitm-entitled_role.
    ls_item-dest_s-stock_cnt       = ls_huitm-stock_cnt.
    ls_item-dest_s-qdoccat         = ls_huitm-qdoccat.
    ls_item-dest_s-qdocid          = ls_huitm-qdocid.
    ls_item-dest_s-qitmid          = ls_huitm-qitmid.
    ls_item-dest_loc-lgnum         = ls_huitm-lgnum.
    ls_item-dest_loc-lgtyp         = ls_input-nltyp.    " 目标存储类型
    ls_item-dest_loc-lgpla         = ls_input-nlpla.    " 目标仓位

    APPEND VALUE #( quan = ls_huitm-quan unit = ls_huitm-meins ) TO ls_item-t_quan.
    APPEND ls_item TO lt_item.

    IF lt_item IS NOT INITIAL.
      CLEAR: lt_ltap_vb, lt_bapiret2, lv_severity.
      CALL FUNCTION '/SCWM/STOCK_CHANGE'
        EXPORTING
          is_header   = ls_header
          it_item     = lt_item
        IMPORTING
          et_ltap_vb  = lt_ltap_vb
          et_bapiret  = lt_bapiret2
          ev_severity = lv_severity
        EXCEPTIONS
          wrong_input = 1
          OTHERS      = 2.

      IF sy-subrc <> 0.
        lv_severity = 'E'.
      ELSE.
        LOOP AT lt_bapiret2 TRANSPORTING NO FIELDS WHERE type CA 'EAX'.
          lv_severity = 'E'.
          EXIT.
        ENDLOOP.
      ENDIF.

      IF lv_severity <> 'E'.
        CLEAR: lt_bapiret2, lv_severity.
        CALL FUNCTION '/SCWM/GM_POST'
          IMPORTING
            et_bapiret  = lt_bapiret2
            ev_severity = lv_severity.
        LOOP AT lt_bapiret2 TRANSPORTING NO FIELDS WHERE type CA 'EAX'.
          lv_severity = 'E'.
          EXIT.
        ENDLOOP.
      ENDIF.

      IF lv_severity <> 'E'.
        COMMIT WORK AND WAIT.
        APPEND VALUE #( id = '00' type = 'S' number = '398' message = ls_input-huident && '修改成功' ) TO lt_bapiret.
      ELSE.
        APPEND LINES OF lt_bapiret2 TO lt_bapiret.
        APPEND VALUE #( id = '00' type = 'E' number = '398' message = ls_input-huident && '修改失败' ) TO lt_bapiret.
        ROLLBACK WORK.
      ENDIF.

      /scwm/cl_tm=>cleanup( iv_reason = /scmb/if_sp_transaction=>sc_cleanup_commit ).

    ENDIF.

  ENDLOOP.

  IF lt_bapiret IS NOT INITIAL.

    et_output[] = lt_bapiret[].

  ENDIF.


ENDFUNCTION.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值