BAPI创建MIGO

* Program Name :   ZGER_BAPI_17                                    *
* describe:                                                  *
* Created by   :                                             *
* Created on   :                                             *
*                                                            *
*------------------------------------------------------------*
REPORT zger_bapi_17.


TABLES:mseg, mkpf, rm07m, t158b,t001l, msegk.
"凭证段:物料 抬头:物料凭证 输入输出字段:模块存储SAPMM07M
"检查表: 业务处理码的移动类型 仓储地点 物料部分的帐户分配字段

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.                            "为 BAPI 货物移动分配事务代码
    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.


SELECTION-SCREEN BEGIN OF BLOCK block WITH FRAME.
PARAMETERS: p_01 TYPE ebeln."采购订单
PARAMETERS: p_02 TYPE t001l-lgort."库存地点
PARAMETERS: p_03 TYPE erfmg."录入数量
SELECTION-SCREEN  END OF BLOCK block.

INITIALIZATION.
  t001l-lgort '3000'.  "仓储地点-库存地点
  mseg-lgort '3000'.  "库存地点
  mseg-werks '2010'.   "工厂
  t158b-bwart '101'.   "移动类型(库存管理)
  rm07m-werks '2010'.  "工厂
  rm07m-lgort '3000'"库存地点
  mseg-erfme 'ST'.     "条目单位
  gmcode-gm_code '05'"为 BAPI 货物移动分配事务代码

  gmhead-pstng_date = sy-datum."mkpf-bldat.
  gmhead-doc_date = sy-datum."mkpf-budat.
  gmhead-pr_uname = sy-uname.

  itab-material '000000000000001217'."物料编号
  itab-plant '2010'."工厂
  itab-stge_loc '3000'."仓储
  itab-move_type '101'."移动类型(库存管理)
  "ITAB-SPEC_STOCK = 'BG01'.
  itab-entry_qnt '5'."以录入项单位表示的数量
  itab-entry_uom 'ST'."条目单位
  itab-po_number = p_01."采购订单号
  itab-po_item '00001'.
  itab-mvt_ind 'B'.
  "itab-move_mat = '3000000098'.  "收货/发货物料
  "itab-move_plant = '3000'.      "
  "itab-move_stloc = 'BG01'.      "收货/发货库存地点
  "itab-nb_slips = 1.
  itab-vendor '0000000183'."供应商账号
  itab-orderpr_un_iso '101'."采购组
  APPEND itab.

START-OF-SELECTION.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = gmhead
      goodsmvt_code    = gmcode
*     TESTRUN          = ' '
*     GOODSMVT_REF_EWM =
    IMPORTING
      goodsmvt_headret = mthead
      materialdocument = mat_doc
*     MATDOCUMENTYEAR  =
    TABLES
      goodsmvt_item    = itab
*     GOODSMVT_SERIALNUMBER         =
      return           = errmsg
*     GOODSMVT_SERV_PART_DATA       =
*     EXTENSIONIN      =
    .
 BREAK-POINT.

  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(znyj13WITH 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'
*   IMPORTING
*     RETURN        =
    .

原文地址:https://www.cnblogs.com/lvdong18847870057/p/12431361.html