BAPI_GOODSMVT_CREATE(調撥 收貨 發貨 入庫 退貨)


code-gm_code取值:

01 MB01 按采購訂單的貨物移動
02 MB31 按生產訂單的貨物移動
03 MB1A 貨物提取(工單退料
04 MB1B 轉移過帳
05 MB1C 其他收貨
06 MB11 貨物移動
07 MB04 "物料供應"消耗的事后調整

itab-mvt_ind = 'B'. "移動標識
 無參考的貨物移動(空)
B 按采購訂單的貨物移動
F 有關生產單的貨物移動 
L 有關交貨通知的貨物移動
K 看板需求的貨物移動(WM-僅限內部)
O "提供物料"消耗的后續調整
W 比例的后續調整/產品單位物料

 

下 面  代 碼 都 已 封 裝 為 RFC

調撥單(貨物移動)

FUNCTION zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_TORDER_REQ_I STRUCTURE  ZMES_TORDER_REQ_I
*"----------------------------------------------------------------------
*輸入表數據:ZMES_TORDER_REQ_I(表結構)  
*  PSTNG_DATE type    BUDAT        憑證中的過帳日期
*  MATERIAL    MATNR            物料號 
*  PLANT    WERKS_D    CHAR      工廠
*  MOVE_PLANT    UMWRK          收貨/發貨工廠
*  STGE_LOC    LGORT_D          庫存地點
*  MOVE_STLOC    UMLGO          收貨/發貨庫存地點
*  ENTRY_QNT    ERFMG            以輸入單位計的數量 
*  BATCH    CHARG_D                批號
*"----------------------------------------------------------------------

  DATA:goodsmvt_header  LIKE  bapi2017_gm_head_01,
        itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
        return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
        mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
        req_i TYPE zmes_torder_req_i.


  CLEAR:goodsmvt_header.
  goodsmvt_header-doc_date = sy-datum.    "憑證中的憑證日期
  goodsmvt_header-pr_uname = sy-datum.    "用戶名

  LOOP AT zmes_torder_req_i INTO req_i.
    MOVE-CORRESPONDING req_i TO itab.
    goodsmvt_header-pstng_date = req_i-pstng_date.  "憑證中的過帳日期
    IF req_i-plant = req_i-move_plant.
      itab-move_type = '311'.                         "移動類型(庫儲存地點<->庫存地點)
    ELSE.
*      itab-move_type = '301'.                         "移動類型(工廠<->工廠)
    ENDIF.
    APPEND itab.
    CLEAR itab.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = goodsmvt_header
      goodsmvt_code    = '04'
    IMPORTING
      materialdocument = mat_doc
    TABLES
      goodsmvt_item    = itab
      return           = return.
  READ TABLE return WITH KEY type = 'E'.
  IF  sy-subrc = 0.
    rstype = 'E'.
    LOOP AT return WHERE type = 'E' .
      CONCATENATE rsmesg return-message '' INTO rsmesg.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  ENDIF.
ENDFUNCTION.

工單發料

function zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_ORD_REQ_I STRUCTURE  ZMES_ORD_REQ_I
*"----------------------------------------------------------------------
*輸入表:ZMES_ORD_REQ_I(表結構)
*  PLANT     WERKS_D      工廠
*  ORDERID    AUFNR        訂單號 
*  MATERIAL    MATNR      物料號 
*  ENTRY_QNT    ERFMG      以輸入單位計的數量 
*  STGE_LOC    LGORT_D    庫存地點
*"----------------------------------------------------------------------
  data:goodsmvt_header  like  bapi2017_gm_head_01,
        itab  type table of bapi2017_gm_item_create with header line,
        return  like table of bapiret2 with header line,
        mat_doc like  bapi2017_gm_head_ret-mat_doc,
        req_i type zmes_ord_req_i.


  clear:goodsmvt_header.
  goodsmvt_header-doc_date = sy-datum.    "憑證中的憑證日期
  goodsmvt_header-pstng_date = sy-datum.  "憑證中的過帳日期
  goodsmvt_header-pr_uname = sy-datum.    "用戶名

  loop at zmes_ord_req_i into req_i.
    move-CORRESPONDING req_i to itab.
    itab-move_type = '261'. "移動類型(庫存管理)
    append itab.
    clear itab.
  endloop.

  call function 'BAPI_GOODSMVT_CREATE'
  exporting
    goodsmvt_header  = goodsmvt_header
    goodsmvt_code    = '03'
  importing
    materialdocument = mat_doc
  tables
    goodsmvt_item    = itab
    return           = return.
  read table return with key type = 'E'.
  if  sy-subrc = 0.
    rstype = 'E'.
    loop at return where type = 'E' .
      concatenate rsmesg return-message '' into rsmesg.
    endloop.
    call function 'BAPI_TRANSACTION_ROLLBACK' .
  else.
    call function 'BAPI_TRANSACTION_COMMIT'
    exporting
      wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  endif.
endfunction.

工單退料

function zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_RT_ORDER_I STRUCTURE  ZMES_RT_ORDER_I
*"----------------------------------------------------------------------
*輸入表:ZMES_RT_ORDER_I(表結構)
*  PLANT    WERKS_D         工廠
*  ORDERID    AUFNR         訂單號 
*  MATERIAL    MATNR          物料號 
*  RESERV_NO    RSNUM             預留/相關需求的編號
*  RES_ITEM    RSPOS             預留/相關需求的項目編號
*  ENTRY_QNT    ERFMG             以輸入單位計的數量 
*  MOVE_REAS    MB_GRBEW      移動原因
*  STGE_LOC    LGORT_D           庫存地點
*  BATCH    CHARG_D               批號
*"----------------------------------------------------------------------
  data:goodsmvt_header  like  bapi2017_gm_head_01,
        itab  type table of bapi2017_gm_item_create with header line,
        return  like table of bapiret2 with header line,
        mat_doc like  bapi2017_gm_head_ret-mat_doc,
        order_i type zmes_rt_order_i.

  clear:goodsmvt_header.
  goodsmvt_header-doc_date = sy-datum.    "憑證中的憑證日期
  goodsmvt_header-pstng_date = sy-datum.  "憑證中的過帳日期
  goodsmvt_header-pr_uname = sy-datum.    "用戶名

  loop at zmes_rt_order_i into order_i.
    move-corresponding order_i to itab.
    itab-move_type = '262'. "移動類型(庫存管理)
    append itab.
    clear itab.
  endloop.

  call function 'BAPI_GOODSMVT_CREATE'
  exporting
    goodsmvt_header  = goodsmvt_header
    goodsmvt_code    = '03'
  importing
    materialdocument = mat_doc
  tables
    goodsmvt_item    = itab
    return           = return.
  read table return with key type = 'E'.
  if  sy-subrc = 0.
    rstype = 'E'.
    loop at return where type = 'E' .
      concatenate rsmesg return-message '' into rsmesg.
    endloop.
    call function 'BAPI_TRANSACTION_ROLLBACK' .
  else.
    call function 'BAPI_TRANSACTION_COMMIT'
    exporting
      wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  endif.
endfunction.

工單入庫

FUNCTION zfunction.
  FUNCTION zmes_order_in.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_ORDER_IN_I STRUCTURE  ZMES_ORDER_IN_I
*"----------------------------------------------------------------------
*輸入表:ZMES_ORDER_IN_I(表結構)
*    PLANT  WERKS_D       工廠
*    ORDERID  AUFNR       訂單號
*    ENTRY_QNT  ERFMG     以輸入單位計的數量
*    STGE_LOC    LGORT_D      庫存地點
*    BATCH  CHARG_D       批號
*"----------------------------------------------------------------------
    DATA:header  LIKE  bapi2017_gm_head_01,
          code LIKE  bapi2017_gm_code,
          itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
          return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
          mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
          goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber,
          order_in TYPE zmes_order_in_i.

    CLEAR:header,code.
    header-doc_date = sy-datum.    "憑證中的憑證日期
    header-pstng_date = sy-datum.  "憑證中的過帳日期
    header-pr_uname = sy-datum.    "用戶名

    code-gm_code = '01'.

    LOOP AT zmes_order_in_i INTO order_in.
      MOVE-CORRESPONDING order_in TO itab.
      itab-move_type = '101'.             "移動類型
      itab-mvt_ind = 'F'.                 "移動標識
      APPEND itab.
      CLEAR itab.
    ENDLOOP.

    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        goodsmvt_header       = header
        goodsmvt_code         = code
      IMPORTING
        materialdocument      = mat_doc
      TABLES
        goodsmvt_item         = itab
        goodsmvt_serialnumber = goodsmvt_serialnumber
        return                = return.
    READ TABLE return WITH KEY type = 'E'.
    IF  sy-subrc = 0.
      rstype = 'E'.
      LOOP AT return WHERE type = 'E' .
        CONCATENATE rsmesg return-message '' INTO rsmesg.
      ENDLOOP.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      rstype = 'S'.
      o_mblnr = mat_doc.
    ENDIF.
  ENDFUNCTION.
ENDFUNCTION.

PO退貨

FUNCTION zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_PO_STOCK_I STRUCTURE  ZMES_PO_STOCK_I
*"----------------------------------------------------------------------
*輸入表:ZMES_PO_STOCK_I(表結構)
*  MOVE_TYPE  BWART   移動類型(庫存管理)
*  PO_NUMBER  BSTNR   采購訂單編號
*  PO_ITEM  EBELP     采購憑證的項目編號
*  PLANT  WERKS_D     工廠
*  MATERIAL    MATNR      物料號
*  ENTRY_QNT  ERFMG   以輸入單位計的數量
*  STGE_LOC LGORT_D       庫存地點
*  MOVE_REAS  MB_GRBEW      移動原因
*  REF_DOC  MBLNR           物料憑證編號
*  REF_DOC_IT LFPOS       參考憑證項目
*"----------------------------------------------------------------------
  DATA:header  LIKE  bapi2017_gm_head_01,
        itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
        return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
        mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
        stock_i TYPE zmes_po_stock_i.

  CLEAR:header.
  header-doc_date = sy-datum.    "憑證中的憑證日期
  header-pstng_date = sy-datum.  "憑證中的過帳日期
  header-pr_uname = sy-datum.    "用戶名

  LOOP AT zmes_po_stock_i INTO stock_i.
    MOVE-CORRESPONDING stock_i TO itab.
    itab-mvt_ind = 'B'.                 "移動標識
    CASE stock_i-move_type.
      WHEN '102'.
        itab-move_reas = ''.            "移動原因
      WHEN '122'.
      WHEN '161'.
        itab-move_type = '101'.        "移動類型
        itab-ref_doc = ''.             "物料憑證
        itab-ref_doc_it = ''.          "物料憑證項目
        itab-move_reas = ''.           "移動原因
    ENDCASE.
    APPEND itab.
    CLEAR itab.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = header
      goodsmvt_code    = '01'          "MB01 按采購訂單的貨物移動
    IMPORTING
      materialdocument = mat_doc
    TABLES
      goodsmvt_item    = itab
      return           = return.
  READ TABLE return WITH KEY type = 'E'.
  IF  sy-subrc = 0.
    rstype = 'E'.
    LOOP AT return WHERE type = 'E' .
      CONCATENATE rsmesg return-message '' INTO rsmesg.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  ENDIF.
ENDFUNCTION.

收貨

FUNCTION zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_PO_IN STRUCTURE  ZMES_PO_IN
*"----------------------------------------------------------------------
*輸入表:ZMES_PO_IN(表結構)
*  REF_DOC_NO    XBLNR      參考憑證編號
*  PLANT  WERKS_D       工廠
*  PO_NUMBER  EBELN     采購憑證號
*  PO_ITEM  EBELP       采購憑證的項目編號
*  ETENS  EETEN         交貨計划行計數器
*  MATERIAL MATNR     物料號
*  STGE_LOC    LGORT_D      庫存地點
*  ENTRY_QNT  ERFMG     以輸入單位計的數量
*  VENDOR    ELIFN          供應商帳戶號
*  BATCH  CHARG_D       批號

*"----------------------------------------------------------------------
  DATA:header  LIKE  bapi2017_gm_head_01,
        code LIKE  bapi2017_gm_code,
        itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
        return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
        mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
        po_in TYPE zmes_po_in.

  CLEAR:header,code.
  header-doc_date = sy-datum.    "憑證中的憑證日期
  header-pstng_date = sy-datum.  "憑證中的過帳日期
  header-pr_uname = sy-datum.    "用戶名
  header-ref_doc_no =  zmes_po_in-ref_doc_no.    "外向交貨單

  code-gm_code = '01'. "為 BAPI 貨物移動分配事務代碼  4500090063

  LOOP AT zmes_po_in INTO po_in.
    MOVE-CORRESPONDING po_in TO itab.
    itab-move_type = '101'.             "移動類型
    itab-mvt_ind = 'B'.                 "移動標識
    APPEND itab.
    CLEAR itab.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = header
      goodsmvt_code    = code
    IMPORTING
      materialdocument = mat_doc
    TABLES
      goodsmvt_item    = itab
      return           = return.
  READ TABLE return WITH KEY type = 'E'.
  IF  sy-subrc = 0.
    rstype = 'E'.
    LOOP AT return WHERE type = 'E' .
      CONCATENATE rsmesg return-message '' INTO rsmesg.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  ENDIF.
ENDFUNCTION.

IQC入庫

FUNCTION zfunction.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(RSTYPE) TYPE  XFELD
*"     VALUE(RSMESG) TYPE  STRING
*"     VALUE(O_MBLNR) TYPE  MBLNR
*"  TABLES
*"      ZMES_PO_IQC_I STRUCTURE  ZMES_PO_IQC_I
*"----------------------------------------------------------------------
*輸入表:ZMES_PO_IQC_I(表結構)
*  PLANT  WERKS_D       工廠
*  MATERIAL    MATNR        物料號
*  ENTRY_QNT  ERFMG     以輸入單位計的數量
*  STGE_LOC    LGORT_D      庫存地點
*  BATCH  CHARG_D       批號
*"----------------------------------------------------------------------
  DATA:header  LIKE  bapi2017_gm_head_01,
        itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
        return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
        mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
        goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber,
        iqc_in TYPE zmes_po_iqc_i.

  CLEAR:header.
  header-doc_date = sy-datum.    "憑證中的憑證日期
  header-pstng_date = sy-datum.  "憑證中的過帳日期
  header-pr_uname = sy-datum.    "用戶名

  LOOP AT zmes_po_iqc_i INTO iqc_in.
    MOVE-CORRESPONDING iqc_in TO itab.
    itab-move_type = '321'.             "移動類型
    APPEND itab.
    CLEAR itab.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header       = header
      goodsmvt_code         = '04'     "為BAPI貨物移動分配事務代碼(MB1B 轉移過帳)
    IMPORTING
      materialdocument      = mat_doc
    TABLES
      goodsmvt_item         = itab
      goodsmvt_serialnumber = goodsmvt_serialnumber
      return                = return.
  READ TABLE return WITH KEY type = 'E'.
  IF  sy-subrc = 0.
    rstype = 'E'.
    LOOP AT return WHERE type = 'E' .
      CONCATENATE rsmesg return-message '' INTO rsmesg.
    ENDLOOP.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    rstype = 'S'.
    o_mblnr = mat_doc.
  ENDIF.
ENDFUNCTION.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM