SAP BAPI_GOODSMVT_CREATE(调拨 收货 发货 入库 退货)

 BAPI_GOODSMVT_CREATE(调拨 收货 发货 入库 退货)

调拨单(货物移动)、工单发料、工单退料、工单入库、PO退货、收货

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 比例的后续调整/产品单位物料

调拨单(货物移动)

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 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.

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
BAPI_GOODSMVT_CREATE是一个用于生成物料凭证的BAPI。它有多个参数需要提供值,其中包括goodsmvt_header、goodsmvt_code和gt_good等。\[2\]在调用该BAPI时,需要将这些参数赋予相应的值。goodsmvt_header用于存储过账日期、操作者和抬头文本等抬头数据,goodsmvt_code用于指定使用的过账事务码。gt_good是一个重要的表,用于存储要进行货物移动的物料、数量等信息。调用BAPI后,可以通过返回参数goodsmvt_headret获取物料凭证编号和年份。\[2\] 以下是一个示例代码,展示了如何使用BAPI_GOODSMVT_CREATE进行物料凭证的生成: ```ABAP DATA: goodsmvt_header TYPE bapi2017_gm_head_01, goodsmvt_code TYPE bapi2017_gm_code, gt_good TYPE TABLE OF bapi2017_gm_item_create, gw_good TYPE bapi2017_gm_item_create, goodsmvt_headret TYPE bapi2017_gm_head_ret, return LIKE TABLE OF bapiret2 WITH HEADER LINE, materialdocument TYPE bapi2017_gm_head_ret-mat_doc, matdocumentyear TYPE bapi2017_gm_head_ret-doc_year, ev_msgty TYPE BAPI_MTYPE, ev_mestx TYPE BAPI_MSG. "设置好goodsmvt_header、goodsmvt_code和gt_good的值 CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = goodsmvt_header goodsmvt_code = goodsmvt_code TABLES goodsmvt_item = gt_good IMPORTING goodsmvt_headret = goodsmvt_headret materialdocument = materialdocument matdocumentyear = matdocumentyear return = return. "处理返回的日志消息 LOOP AT return WHERE type = 'A' OR type = 'E'. ev_msgty = 'E'. ev_mestx = return-message. EXIT. ENDLOOP. ``` 以上是一个示例代码,展示了如何使用BAPI_GOODSMVT_CREATE进行物料凭证的生成。你可以根据自己的需求,设置相应的参数值,并根据返回的日志消息进行处理。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [金色传说:SAP-BAPI-BAPI_GOODSMVT_CREATE创建物料凭证bapi的使用及参数值讲解](https://blog.csdn.net/weixin_43675474/article/details/122258115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值