SAP_常用BAPI_货物移动案例(BAPI_GOODSMVT_CREATE)

本文详细介绍了如何使用BAPI_GOODSMVT_CREATE功能进行货物移动,包括MB*事务代码的相关参数和使用示例。通过设置不同的参数值,可以实现不同类型的货物移动操作,如创建物料凭证、生产订单收退料等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BAPI_GOODSMVT_CREATE的功能是用于货物移动,其主要可以实现MB*事务代码的一些功能,其中该BAPI的参数GOODSMVT_CODE就控制了对应哪个事务代码的功能,下面给出该参数的值和对应的事务码:
01 MB01
02 MB31
03 MB1A
04 MB1B
05 MB1C
06 MB11
07 MB04
这些值存储在表T158G中

MKPF存的是物料凭证表头信息,MSEG存的是物料凭证行项目信息。

例子:

FUNCTION ybapi_goodsmvt_create.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IS_GOODSMVT_HEADER) LIKE  BAPI2017_GM_HEAD_01 STRUCTURE
*"        BAPI2017_GM_HEAD_01
*"  EXPORTING
*"     VALUE(O_MBLNR) TYPE  MKPF-MBLNR
*"     VALUE(O_MJAHR) TYPE  MKPF-MJAHR
*"     VALUE(O_MSG) TYPE  STRING
*"  TABLES
*"      T_GOODSMVT_ITEM STRUCTURE  BAPI2017_GM_ITEM_CREATE
*"----------------------------------------------------------------------
  DATAlt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.

  CLEARis_goodsmvt_header.
  REFRESHt_goodsmvt_item.

**--TEST
  "---header
  is_goodsmvt_header-pstng_date sy-datum.
  is_goodsmvt_header-doc_date sy-datum.
  is_goodsmvt_header-pr_uname sy-uname.
  is_goodsmvt_header-header_txt 'HEADER short text'.

  "---item
  t_goodsmvt_item-material '000000600000009999'.
  t_goodsmvt_item-plant '3000'.
  t_goodsmvt_item-stge_loc 'PK02'.
  t_goodsmvt_item-move_type '101'.
  t_goodsmvt_item-entry_qnt '9'.
  t_goodsmvt_item-entry_uom 'EA'.
  t_goodsmvt_item-po_number '4500000097'.
  t_goodsmvt_item-po_item '00010'.
  t_goodsmvt_item-mvt_ind 'B'.
  t_goodsmvt_item-move_mat '3000000098'.
  t_goodsmvt_item-move_plant '3000'.
  t_goodsmvt_item-move_plant 'PK03'.
  t_goodsmvt_item-nb_slips '2'.
  APPEND t_goodsmvt_item.
  CLEAR t_goodsmvt_item.


  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  is_goodsmvt_header
      goodsmvt_code    '02'
      testrun          'X'
    IMPORTING
      materialdocument o_mblnr
      matdocumentyear  o_mjahr
    TABLES
      goodsmvt_item    t_goodsmvt_item
      return           lt_return.

  LOOP AT lt_return WHERE type EQ 'A' OR type EQ 'E'.
    IF sy-tabix EQ 1.
      o_msg '创建失败:'.
    ENDIF.
    CONCATENATE o_msg lt_return-message INTO o_msg.
  ENDLOOP.

  IF NOT o_msg IS INITIAL.
    EXIT.
  ELSE.
    REFRESHlt_return.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        goodsmvt_header  is_goodsmvt_header
        goodsmvt_code    '02'
      IMPORTING
        materialdocument o_mblnr
        matdocumentyear  o_mjahr
      TABLES
        goodsmvt_item    t_goodsmvt_item
        return           lt_return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait 'X'.
    CONCATENATE '物料凭证:' o_mblnr '在年度' o_mjahr '已成功创建!' INTO o_msg.
  ENDIF.

**--生产订单收退料
  CLEARis_goodsmvt_header.
  REFRESHt_goodsmvt_item.

**--TEST
  "---header
  is_goodsmvt_header-pstng_date sy-datum.
  is_goodsmvt_header-doc_date sy-datum.
  is_goodsmvt_header-pr_uname sy-uname.
  is_goodsmvt_header-header_txt 'HEADER short text'.

  "---item
  t_goodsmvt_item-material '000000003102000245'.
  t_goodsmvt_item-plant '1201'.
  t_goodsmvt_item-stge_loc '1006'.
  t_goodsmvt_item-move_type '261'.  "库存管理
  t_goodsmvt_item-entry_qnt '9'.
  t_goodsmvt_item-entry_uom 'EA'.
  t_goodsmvt_item-orderid '000010003579'"MO号
  t_goodsmvt_item-reserv_no '0000107118'"预留编号
  t_goodsmvt_item-res_item '0019'.        "预留项目
  APPEND t_goodsmvt_item.
  CLEAR t_goodsmvt_item.


  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  is_goodsmvt_header
      goodsmvt_code    '03'
      testrun          'X'
    IMPORTING
      materialdocument o_mblnr
      matdocumentyear  o_mjahr
    TABLES
      goodsmvt_item    t_goodsmvt_item
      return           lt_return.

  LOOP AT lt_return WHERE type EQ 'A' OR type EQ 'E'.
    IF sy-tabix EQ 1.
      o_msg '创建失败:'.
    ENDIF.
    CONCATENATE o_msg lt_return-message INTO o_msg.
  ENDLOOP.

  IF NOT o_msg IS INITIAL.
    EXIT.
  ELSE.
    REFRESHlt_return.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        goodsmvt_header  is_goodsmvt_header
        goodsmvt_code    '03'
      IMPORTING
        materialdocument o_mblnr
        matdocumentyear  o_mjahr
      TABLES
        goodsmvt_item    t_goodsmvt_item
        return           lt_return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait 'X'.
    CONCATENATE o_mblnr '在年度' o_mjahr '已成功创建!' INTO o_msg.
  ENDIF.
ENDFUNCTION.

<think>好的,我需要帮用户解决在SAP中使用BAPI_GOODSMVT_CREATE进行采购订单收货冲销的问题。用户需要示例和参数说明,所以我得先回顾一下这个BAPI的用法。 首先,BAPI_GOODSMVT_CREATE常用于创建物料凭证,比如收货、发货等。冲销的话,通常有两种方法:一种是使用冲销凭证,另一种是直接调用冲销的BAPI,比如BAPI_GOODSMVT_CANCEL。不过用户特别提到要用BAPI_GOODSMVT_CREATE,可能他们想通过移动类型直接冲销,比如用102冲销101的收货。 接下来,我需要确认这个BAPI的参数结构。查阅之前的引用资料,用户提到的BAPI_GOODSMVT_CREATE的参数包括GOODSMVT_HEADER、GOODSMVT_CODE、GOODSMVT_ITEM等。冲销时需要设置移动类型为102,并且参考原始凭证的年份、物料凭证和行项目。 然后,示例代码部分需要展示如何填充这些参数。比如,GOODSMVT_CODE设置为'R'表示冲销,移动类型设为102。同时,必须正确引用原始凭证的物料凭证编号、会计年度和行项目号。还要注意事务提交后的错误检查,使用BAPI_TRANSACTION_COMMIT提交,并在有错误时回滚。 可能用户会遇到的问题包括参数填写错误、未正确引用原凭证,或者忘记提交事务。所以在注意事项里要强调这些点。此外,引用用户提供的资料中的BAPI_GOODSMVT_CANCEL作为另一种方法,但根据用户要求,重点放在CREATE上。 最后,生成相关问题,帮助用户进一步了解其他相关BAPI的使用和错误处理。确保回答结构清晰,步骤明确,参数说明详细,代码示例正确,并且参考了用户提供的引用内容中的正确BAPI名称和用法。</think>### SAP中使用BAPI_GOODSMVT_CREATE进行采购订单收货冲销的解决方案 #### 1. BAPI_GOODSMVT_CREATE功能说明 该BAPI用于创建物料凭证(如收货、发货、转移过账等)。冲销操作需通过指定移动类型(如`102`冲销`101`的收货)实现,并关联原始凭证编号[^1]。 #### 2. 关键参数说明 - **`GOODSMVT_CODE`**:操作类型标识符,冲销时需设置为`'R'`(Reverse)[^1]。 - **`GOODSMVT_HEADER`**:凭证头信息,需包含过账日期、凭证日期等。 - **`GOODSMVT_ITEM`**:行项目明细,需指定移动类型、数量、库存地点等。 - **`MATERIALDOCUMENT`**:冲销成功后返回的新物料凭证号。 - **`MATDOCUMENTYEAR`**:凭证年度。 #### 3. 冲销操作示例代码 ```abap DATA: lt_goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create, ls_goodsmvt_item LIKE LINE OF lt_goodsmvt_item, ls_goodsmvt_header TYPE bapi2017_gm_head_01, ls_goodsmvt_code TYPE bapi2017_gm_code, lv_matdoc TYPE bapi2017_gm_head_ret-mat_doc, lv_year TYPE bapi2017_gm_head_ret-doc_year, lt_return TYPE TABLE OF bapiret2. " 设置冲销参数 ls_goodsmvt_code-gm_code = 'R'. " 标识冲销操作 " 设置凭证头信息 ls_goodsmvt_header-pstng_date = sy-datum. " 过账日期 ls_goodsmvt_header-doc_date = sy-datum. " 凭证日期 " 设置冲销行项目(假设原始凭证号为5000000123,行项目号为0001) ls_goodsmvt_item-material = 'MAT001'. " 物料号 ls_goodsmvt_item-plant = '1000'. " 工厂 ls_goodsmvt_item-stge_loc = '0001'. " 库存地点 ls_goodsmvt_item-move_type = '102'. " 冲销移动类型(原101收货) ls_goodsmvt_item-entry_qnt = 10. " 冲销数量 ls_goodsmvt_item-po_number = '4500000123'. " 采购订单号 ls_goodsmvt_item-po_item = '0001'. " 采购订单行号 ls_goodsmvt_item-ref_doc = '5000000123'. " 原始物料凭证号 ls_goodsmvt_item-ref_doc_year = '2023'. " 原始凭证年度 ls_goodsmvt_item-ref_doc_it = '0001'. " 原始凭证行项目 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. " 调用BAPI冲销 CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_goodsmvt_header goodsmvt_code = ls_goodsmvt_code IMPORTING materialdocument = lv_matdoc matdocumentyear = lv_year TABLES goodsmvt_item = lt_goodsmvt_item return = lt_return. " 检查结果 IF lv_matdoc IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. WRITE: '冲销成功,新物料凭证号:', lv_matdoc. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. WRITE: '冲销失败,错误信息:', lt_return[ 1 ]-message. ENDIF. ``` #### 4. 注意事项 - **移动类型匹配**:冲销必须与原操作移动类型对应(如101收货对应102冲销)。 - **凭证关联性**:需准确填写原始凭证号(`ref_doc`)、年度(`ref_doc_year`)和行号(`ref_doc_it`)。 - **事务提交**:操作成功后需调用`BAPI_TRANSACTION_COMMIT`提交事务[^2]。 - **错误处理**:通过`RETURN`表检查错误码(如`E`或`A`类型消息)。 #### 5. 替代方案 若需直接冲销凭证,可使用`BAPI_GOODSMVT_CANCEL`,通过指定原物料凭证号执行冲销[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值