物料转移过账BAPI_GOODSMVT_CREATE

物料转移过账BAPI_GOODSMVT_CREATE
REPORT  zppmm_mb1b.
TABLES:mseg,
       mkpf,
       rm07m,
       t158b,
       t001l,
       msegk.


DATA: mat_doc LIKE bapi2017_gm_head_ret-mat_doc.

DATA:save_code LIKE sy-ucomm,
     ok_code LIKE sy-ucomm,
     loc_msg(50),
     gmnga LIKE afru-gmnga,
     mtsnr LIKE  rm07m-mtsnr,
     errflag..

DATA:BEGIN OF gt_afpo OCCURS 0.
        INCLUDE STRUCTURE afpo.
DATA:END OF gt_afpo.

DATA:gmhead LIKE bapi2017_gm_head_01.

DATABEGIN OF gmcode.
        INCLUDE STRUCTURE bapi2017_gm_code.
DATAEND OF gmcode.

DATABEGIN OF mthead.
        INCLUDE STRUCTURE bapi2017_gm_head_ret.
DATAEND OF mthead.

DATABEGIN OF itab OCCURS 100.
        INCLUDE STRUCTURE bapi2017_gm_item_create.
DATAEND OF itab.

DATABEGIN OF errmsg OCCURS 10.
        INCLUDE STRUCTURE bapiret2.
DATAEND OF errmsg.

INITIALIZATION.
  t001l-lgort = '1051'.
  mseg-lgort = '1050'.
  mseg-werks = '1000'.
  mkpf-bldat = sy-datum.
  mkpf-budat = sy-datum.
  t158b-bwart = '311'.
  rm07m-sobkz = 'E'.
  rm07m-werks = '1000'.
  rm07m-lgort = '1050'.
  mseg-erfme = 'PC'.
  gmcode-gm_code = '04'.                                    "MB1B
  CALL SCREEN 100.

*&----------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&-----------------------------------------------------*
*       text
*--------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'FOR0100'.
  SET TITLEBAR '100'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&--------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&----------------------------------------------------*
*       text
*-----------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'SAVE'.
      PERFORM form_save.
    WHEN 'EXIT' OR 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN  'CLOSE' .
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&-----------------------------------------------------*
*&      Form  FORM_SAVE
*&-------------------------------------------------*
*       text
*---------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*---------------------------------------------------*
FORM form_save .
  IF mkpf-bldat = ''
  OR mkpf-budat = ''
  OR rm07m-mtsnr = ''
  OR mseg-matnr = ''
  OR mseg-lgort = ''
  OR mseg-erfmg = ''
  OR mseg-erfme = ''
  OR t001l-lgort = ''
  OR msegk-mat_kdauf = ''
  OR msegk-mat_kdpos = ''.
    MESSAGE i000(znyj13) WITH '信息不完整'.
    RETURN.
  ENDIF.
  IF gmnga < mseg-erfmg.
    MESSAGE i000(znyj13) WITH '移动数量应小于确认数量'.
    mseg-erfmg = ''.
    RETURN.
  ENDIF.
  gmhead-pstng_date = sy-datum."mkpf-bldat.
  gmhead-doc_date = sy-datum."mkpf-budat.
  gmhead-ref_doc_no = rm07m-mtsnr.
  gmhead-pr_uname = sy-uname.
  gmhead-header_txt = mkpf-bktxt.
*  APPEND gmhead.


  itab-material = mseg-matnr .
  itab-plant = '1000'.
  itab-stge_loc = mseg-lgort.
  itab-move_type = t158b-bwart."rm07m-bwartwa.
  itab-spec_stock = rm07m-sobkz.
  itab-entry_qnt = mseg-erfmg.
  itab-entry_uom = mseg-erfme.
*  itab-batch = mseg-charg.
*  itab-orderid = rm07m-mtsnr.
*  itab-order_itno = msegk-mat_kdpos.
  itab-move_mat = mseg-matnr.
  itab-move_plant = '1000'.
  itab-move_stloc = t001l-lgort .
  itab-val_sales_ord = msegk-mat_kdauf.
  itab-val_s_ord_item = msegk-mat_kdpos.
  itab-nb_slips = 1.

  APPEND itab.
  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = gmhead
      goodsmvt_code    = gmcode
    IMPORTING
      goodsmvt_headret = mthead
      materialdocument = mat_doc
    TABLES
      goodsmvt_item    = itab
      return           = errmsg.

  LOOP AT errmsg.
    CLEAR loc_msg.
    CONCATENATE '过帐成功!' errmsg-message INTO loc_msg.
    IF errmsg-type EQ 'E'.

      MESSAGE errmsg-message TYPE 'E'.
      errflag = 'X'.
    ELSE.
      MESSAGE loc_msg TYPE 'S'.
    ENDIF.
  ENDLOOP.


  IF errflag IS INITIAL.
    COMMIT WORK AND WAIT.
    CLEAR loc_msg.
    IF sy-subrc NE 0.

      MESSAGE '过帐操作出现错误,请稍后重试!' TYPE 'E'.
      EXIT.
    ELSE.

      CONCATENATE '物料凭证:' mat_doc '已成功创建!' INTO loc_msg.
      MESSAGE i000(znyj13) WITH loc_msg.

      gmhead-ref_doc_no = ''.
      gmhead-header_txt = ''.
      mseg-matnr = ''.
      msegk-mat_kdauf = ''.
      msegk-mat_kdpos = ''.
      mseg-erfmg = ''.
      rm07m-mtsnr = ''.
      gmnga = ''.
      mkpf-bktxt = ''.
    ENDIF.
  ELSE.
    MESSAGE '这不是正确的发料单或者已经创建凭证!' TYPE 'E'.
  ENDIF.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.

ENDFORM.                    " FORM_SAVE
*&-----------------------------------------------*
*&      Module  RM07M-MTSNR  INPUT
*&----------------------------------------------*
*       text
*------------------------------------------------*
MODULE rm07m-mtsnr INPUT.
  CONCATENATE '0000' rm07m-mtsnr INTO mtsnr.
*  SELECT SINGLE gmnga INTO gmnga FROM afru WHERE aufnr = rm07m-mtsnr.
  IF sy-subrc = 0.
    SELECT  * INTO CORRESPONDING FIELDS OF TABLE gt_afpo
      FROM afpo
      WHERE aufnr = mtsnr.
    IF sy-subrc = 0.
      READ TABLE gt_afpo INDEX 1.
      msegk-mat_kdauf = gt_afpo-kdauf.
      msegk-mat_kdpos = gt_afpo-kdpos.
      mseg-matnr = gt_afpo-matnr.
      gmnga = gt_afpo-wemng.
    ENDIF.
  ELSE.
    CONCATENATE '订单: ' rm07m-mtsnr ' 不存在!' INTO loc_msg.
    MESSAGE i000(znyj13) WITH loc_msg.

    RETURN.
  ENDIF.
ENDMODULE.                 " RM07M-MTSNR  INPUT   
 
  PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.
FIELD RM07M-MTSNR MODULE RM07M-MTSNR ON REQUEST.
 
* BAPI TO Upload Inventory Data
*
* GMCODE Table T158G - 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
*
* Domain: KZBEW - Movement Indicator
*      Goods movement w/o reference
*  B - Goods movement for purchase order
*  F - Goods movement for production order
*  L - Goods movement for delivery note
*  K - Goods movement for kanban requirement (WM - internal only)
*  O - Subsequent adjustment of "material-provided" consumption
*  W - Subsequent adjustment of proportion/product unit material

 

 

GMCODE Table T158G - 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

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.youkuaiyun.com/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、付费专栏及课程。

余额充值