SAP-ABAP-BAPI_GOODSMVT_CREATE创建物料凭证bapi的各种情况如何赋值

前言,对于BAPI_GOODSMVT_CREATE来说,赋值难的地方基本只有两个地方不明确,第一个地方就是import中的GOODSMVT_CODE字段,针对不同的事务代码输入不同的code,具体如下。

01 - MB01 - Goods Receipts for Purchase Order

02 - MB31 - Goods Receipts for Prod Order

03 - MB1A - Goods Issue

04 - MB1B - Transfer Posting

05 - MB1C - Enter Other Goods Receipt

06 - MB11

07 - MB04

要是实在这7个都用不了,或者自己懒,不想换,那其实也可以在表T158G中加个08-MIGO,然后这个GOODSMVT_CODE字段全部赋值08就行了。

第二个赋值难的地方是表goodsmvt_item-MVT_IND,这个具体应该如何赋值如下

下面举例各种业务场景如何调用这个BAPI

定义就参考MSEG表就行了

1.采购订单101入库到非限制库存


  DATA LV_PEINH TYPE EKPO-PEINH .
  CLEAR:GS_GOODS_MVT_T.
  READ TABLE GT_GOODS_MVT INDEX 1 INTO GS_GOODS_MVT_T .
** BAPI HEADER
  CLEAR gw_gmhead.
  gw_gmhead-pstng_date = GS_GOODS_MVT_T-VERAB.
  gw_gmhead-doc_date   = sy-datum.
  gw_gmhead-REF_DOC_NO = sy-datum.
  gs_code-gm_code      =  '01' . "01 - MB01 - Goods Receipts for Purchase Order

** BAPI ITEM
  CLEAR: gt_gmitem[],gt_gmitem.
  LOOP AT GT_GOODS_MVT INTO  GS_GOODS_MVT.
    CLEAR gt_gmitem.
    gt_gmitem-material          = GS_GOODS_MVT-matnr.
    gt_gmitem-material_external = GS_GOODS_MVT-matnr.
    gt_gmitem-stge_loc          = GS_GOODS_MVT-lgort.
    gt_gmitem-batch             = GS_GOODS_MVT-charg.
    gt_gmitem-plant             = GS_GOODS_MVT-werks.
    gt_gmitem-move_mat          = GS_GOODS_MVT-matnr.
    gt_gmitem-move_mat_external = GS_GOODS_MVT-matnr.
    gt_gmitem-move_plant        = GS_GOODS_MVT-werks.
    gt_gmitem-move_stloc        = GS_GOODS_MVT-lgort.
    gt_gmitem-move_batch        = GS_GOODS_MVT-charg.
    gt_gmitem-PO_NUMBER         = GS_GOODS_MVT-EBELN.
    gt_gmitem-PO_ITEM           = GS_GOODS_MVT-EBELP.
    gt_gmitem-MVT_IND           = 'B'. "B - Goods movement for purchase order
    gt_gmitem-move_type         = '101'."移动类型101
    SELECT SINGLE EKPO~PEINH FROM EKPO INTO LV_PEINH WHERE EKPO~EBELN = GS_GOODS_MVT-EBELN AND EKPO~EBELP = GS_GOODS_MVT-EBELP .
      IF LV_PEINH <> 0.
         GS_GOODS_MVT-MENGE     = GS_GOODS_MVT-MENGE / LV_PEINH .
      ENDIF.
    gt_gmitem-entry_qnt         = GS_GOODS_MVT-MENGE .
    Gt_gmitem-entry_uom         = GS_GOODS_MVT-meins.
*    gt_gmitem-reserv_no        = GS_GOODS_MVT-rsnum.  "预留
*    gt_gmitem-res_item         = GS_GOODS_MVT-rspos.   "预留行项目
    gt_gmitem-ref_doc           = GS_GOODS_MVT-mblnr.
    gt_gmitem-ref_doc_yr        = GS_GOODS_MVT-mjahr.
    gt_gmitem-ref_doc_it        = GS_GOODS_MVT-zeile.
*    gt_gmitem-costcenter       = GS_GOODS_MVT-costcenter. "Cost Center
    gt_gmitem-prod_date         = g_post_date.  "Date of Manufacture 生产日期
    APPEND gt_gmitem.
  ENDLOOP.

如果想入到质检库存需要添加赋值

STCK_TYPE = 'X' .

2.344非限制库存转为冻结库存


  DATA LV_PEINH TYPE EKPO-PEINH .
  CLEAR:GS_GOODS_MVT_T.
  READ TABLE GT_GOODS_MVT INDEX 1 INTO GS_GOODS_MVT_T .
** BAPI HEADER
  CLEAR gw_gmhead.
  gw_gmhead-pstng_date = GS_GOODS_MVT_T-VERAB.
  gw_gmhead-doc_date   = sy-datum.
  gw_gmhead-REF_DOC_NO = sy-datum.
  gs_code-gm_code      =  '04' . "04 - MB1B - Transfer Posting

** BAPI ITEM
  CLEAR: gt_gmitem[],gt_gmitem.
  LOOP AT GT_GOODS_MVT INTO  GS_GOODS_MVT.
    CLEAR gt_gmitem.
    gt_gmitem-material          = GS_GOODS_MVT-matnr.
    gt_gmitem-material_external = GS_GOODS_MVT-matnr.
    gt_gmitem-stge_loc          = GS_GOODS_MVT-lgort.
    gt_gmitem-batch             = GS_GOODS_MVT-charg.
    gt_gmitem-plant             = GS_GOODS_MVT-werks.
    gt_gmitem-move_mat          = GS_GOODS_MVT-matnr.
    gt_gmitem-move_mat_external = GS_GOODS_MVT-matnr.
    gt_gmitem-move_plant        = GS_GOODS_MVT-werks.
    gt_gmitem-move_stloc        = GS_GOODS_MVT-lgort.
    gt_gmitem-move_batch        = GS_GOODS_MVT-charg.
    gt_gmitem-PO_NUMBER         = GS_GOODS_MVT-EBELN.
    gt_gmitem-PO_ITEM           = GS_GOODS_MVT-EBELP.
    gt_gmitem-MVT_IND           = ''. "B - Goods movement for purchase order
    gt_gmitem-move_type         = '344'."移动类型101
    SELECT SINGLE EKPO~PEINH FROM EKPO INTO LV_PEINH WHERE EKPO~EBELN = GS_GOODS_MVT-EBELN AND EKPO~EBELP = GS_GOODS_MVT-EBELP .
      IF LV_PEINH <> 0.
         GS_GOODS_MVT-MENGE     = GS_GOODS_MVT-MENGE / LV_PEINH .
      ENDIF.
    gt_gmitem-entry_qnt         = GS_GOODS_MVT-MENGE .
    Gt_gmitem-entry_uom         = GS_GOODS_MVT-meins.
*    gt_gmitem-reserv_no        = GS_GOODS_MVT-rsnum.  "预留
*    gt_gmitem-res_item         = GS_GOODS_MVT-rspos.   "预留行项目
    gt_gmitem-ref_doc           = GS_GOODS_MVT-mblnr.
    gt_gmitem-ref_doc_yr        = GS_GOODS_MVT-mjahr.
    gt_gmitem-ref_doc_it        = GS_GOODS_MVT-zeile.
*    gt_gmitem-costcenter       = GS_GOODS_MVT-costcenter. "Cost Center
    gt_gmitem-prod_date         = g_post_date.  "Date of Manufacture 生产日期
    APPEND gt_gmitem.
  ENDLOOP.

3.343冻结库存转为非限制库存


  DATA LV_PEINH TYPE EKPO-PEINH .
  CLEAR:GS_GOODS_MVT_T.
  READ TABLE GT_GOODS_MVT INDEX 1 INTO GS_GOODS_MVT_T .
** BAPI HEADER
  CLEAR gw_gmhead.
  gw_gmhead-pstng_date = GS_GOODS_MVT_T-VERAB.
  gw_gmhead-doc_date   = sy-datum.
  gw_gmhead-REF_DOC_NO = sy-datum.
  gs_code-gm_code      = '04' . "04 - MB1B - Transfer Posting

** BAPI ITEM
  CLEAR: gt_gmitem[],gt_gmitem.
  LOOP AT GT_GOODS_MVT INTO  GS_GOODS_MVT.
    CLEAR gt_gmitem.
    gt_gmitem-material          = GS_GOODS_MVT-matnr.
    gt_gmitem-material_external = GS_GOODS_MVT-matnr.
    gt_gmitem-stge_loc          = GS_GOODS_MVT-lgort.
    gt_gmitem-batch             = GS_GOODS_MVT-charg.
    gt_gmitem-plant             = GS_GOODS_MVT-werks.
    gt_gmitem-move_mat          = GS_GOODS_MVT-matnr.
    gt_gmitem-move_mat_external = GS_GOODS_MVT-matnr.
    gt_gmitem-move_plant        = GS_GOODS_MVT-werks.
    gt_gmitem-move_stloc        = GS_GOODS_MVT-lgort.
    gt_gmitem-move_batch        = GS_GOODS_MVT-charg.
    gt_gmitem-PO_NUMBER         = GS_GOODS_MVT-EBELN.
    gt_gmitem-PO_ITEM           = GS_GOODS_MVT-EBELP.
    gt_gmitem-MVT_IND           = ''. "B - Goods movement for purchase order
    gt_gmitem-move_type         = '343'."移动类型101
    SELECT SINGLE EKPO~PEINH FROM EKPO INTO LV_PEINH WHERE EKPO~EBELN = GS_GOODS_MVT-EBELN AND EKPO~EBELP = GS_GOODS_MVT-EBELP .
      IF LV_PEINH <> 0.
         GS_GOODS_MVT-MENGE     = GS_GOODS_MVT-MENGE / LV_PEINH .
      ENDIF.
    gt_gmitem-entry_qnt         = GS_GOODS_MVT-MENGE .
    Gt_gmitem-entry_uom         = GS_GOODS_MVT-meins.
*    gt_gmitem-reserv_no        = GS_GOODS_MVT-rsnum.  "预留
*    gt_gmitem-res_item         = GS_GOODS_MVT-rspos.   "预留行项目
    gt_gmitem-ref_doc           = GS_GOODS_MVT-mblnr.
    gt_gmitem-ref_doc_yr        = GS_GOODS_MVT-mjahr.
    gt_gmitem-ref_doc_it        = GS_GOODS_MVT-zeile.
*    gt_gmitem-costcenter       = GS_GOODS_MVT-costcenter. "Cost Center
    gt_gmitem-prod_date         = g_post_date.  "Date of Manufacture 生产日期
    APPEND gt_gmitem.
  ENDLOOP.

4.261工单投料


  DATA LV_PEINH TYPE EKPO-PEINH .
  CLEAR:GS_GOODS_MVT_T.
  READ TABLE GT_GOODS_MVT INDEX 1 INTO GS_GOODS_MVT_T .
** BAPI HEADER
  CLEAR gw_gmhead.
  gw_gmhead-pstng_date = GS_GOODS_MVT_T-VERAB.
  gw_gmhead-doc_date   = sy-datum.
  gw_gmhead-REF_DOC_NO = sy-datum.
  gs_code-gm_code      =  '03' . ""03 - MB1A - Goods Issue.

** BAPI ITEM
  CLEAR: gt_gmitem[].
  LOOP AT GT_GOODS_MVT INTO  GS_GOODS_MVT.
    CLEAR gt_gmitem.
    gt_gmitem-material          = GS_GOODS_MVT-matnr.
    gt_gmitem-material_external = GS_GOODS_MVT-matnr.
    gt_gmitem-stge_loc          = GS_GOODS_MVT-lgort.
    gt_gmitem-batch             = GS_GOODS_MVT-charg.
    gt_gmitem-plant             = GS_GOODS_MVT-werks.
    gt_gmitem-move_mat          = GS_GOODS_MVT-matnr.
    gt_gmitem-move_mat_external = GS_GOODS_MVT-matnr.
    gt_gmitem-move_plant        = GS_GOODS_MVT-werks.
    gt_gmitem-move_stloc        = GS_GOODS_MVT-lgort.
    gt_gmitem-move_batch        = GS_GOODS_MVT-charg.
    gt_gmitem-ORDERID           = GS_GOODS_MVT-AUFNR.
*    gt_gmitem-PO_NUMBER        = GS_GOODS_MVT-EBELN. "采购订单
*    gt_gmitem-PO_ITEM          = GS_GOODS_MVT-EBELP.
    gt_gmitem-MVT_IND           = ''. "
    gt_gmitem-move_type         = '261'."移动类型261
    gt_gmitem-entry_qnt         = GS_GOODS_MVT-MENGE .
    Gt_gmitem-entry_uom         = GS_GOODS_MVT-meins.
*    gt_gmitem-reserv_no        = GS_GOODS_MVT-rsnum.  "预留
*    gt_gmitem-res_item         = GS_GOODS_MVT-rspos.   "预留行项目
    gt_gmitem-ref_doc           = GS_GOODS_MVT-mblnr.
    gt_gmitem-ref_doc_yr        = GS_GOODS_MVT-mjahr.
    gt_gmitem-ref_doc_it        = GS_GOODS_MVT-zeile.
*    gt_gmitem-costcenter       = GS_GOODS_MVT-costcenter. "Cost Center
    gt_gmitem-prod_date         = g_post_date.  "Date of Manufacture 生产日期
    APPEND gt_gmitem.
  ENDLOOP.

5.551报废

6.201成本中心发料

bapi调用及返回消息处理,注意不要用sy-subrc做判断,要判断返回消息是不是空


  DATA: lt_retn LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

  CLEAR: lt_retn[], lt_retn.
  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = gw_gmhead
      goodsmvt_code    = gs_code
    IMPORTING
      materialdocument = g_mblnr
      matdocumentyear  = g_mjahr
    TABLES
      goodsmvt_item    = gt_gmitem
      return           = lt_retn.
  IF lt_retn IS NOT  INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT lt_retn.
      GS_RETURN-MESSA = GS_RETURN-MESSA && lt_retn-MESSAGE && '.' .
    ENDLOOP.
    GS_RETURN-MTYPE = 'E' .
  ELSE .
      CLEAR: lt_retn[], lt_retn.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = lt_retn.
      LOOP AT lt_retn WHERE type = 'E' OR type = 'A'.
        GS_RETURN-MESSA = GS_RETURN-MESSA && lt_retn-MESSAGE && '.' .
        GS_RETURN-MTYPE = 'E' .
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ENDLOOP.
      IF sy-subrc NE 0.
        GS_RETURN-MESSA = 'SUCCESS' .
        GS_RETURN-MTYPE = 'S' .
        DO 5 TIMES.
          SELECT * FROM MSEG INTO TABLE GT_MSEG WHERE  MBLNR = g_mblnr AND MJAHR = g_mjahr .
          IF GT_MSEG[] IS NOT INITIAL.
            EXIT .
          ELSE .
            WAIT UP TO 1 SECONDS .
          ENDIF.
        ENDDO.
        LOOP AT GT_GOODS_MVT ASSIGNING <FS_GOODS>.
          READ TABLE GT_MSEG INTO GS_MSEG INDEX SY-TABIX .
          <FS_GOODS>-MTYPE = GS_RETURN-MTYPE .
          <FS_GOODS>-MESSAGE = GS_RETURN-MESSA .
          <FS_GOODS>-MBLNR = GS_MSEG-MBLNR .
          <FS_GOODS>-MJAHR = GS_MSEG-MJAHR .
          <FS_GOODS>-ZEILE = GS_MSEG-ZEILE .
          <FS_GOODS>-CHARG = GS_MSEG-CHARG .
        ENDLOOP.


      ENDIF.
  ENDIF.

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值