SAP ABAP常用BAPI函数50之10-[BAPI_GOODSMVT_CREATE]

人生短短几个秋,啊~不醉不罢休。

青春才5年,新冠疫情就近4年了。几十年后再回头来看今年,也许会嘲笑吧~

函数BAPI_GOODSMVT_CREATE是前台事务代码根据采购订单或者生产订单创建物料凭证。(货物移动)操作的时候用你的。

对应的在ECC里的类型分别有:MB01采购订单收货、MB31生产订单收货、MB1A货物发出、MB1B转移过帐、MB1C其他货物收据、MB11货物流动逆转、
MB04分包订单的后续调整。

导入参数:

参数名称 关联类型   缺省值 可选的 值传递 说明
GOODSMVT_HEADER BAPI2017_GM_HEAD_01 必选 抬头数据
GOODSMVT_CODE BAPI2017_GM_CODE 必选 为货物移动分配事务码
TESTRUN BAPI2017_GM_GEN-TESTRUN SPACE 可选
GOODSMVT_PRINT_CTRL BAPI2017_GM_PRINT 可选

 

GOODSMVT_HEADER常用输入参数字段:过账日期,凭证日期

组件 类型 简短描述
PSTNG_DATE BUDAT 过账日期
DOC_DATE BLDAT 凭证日期

GOODSMVT_CODE-GM_CODE的值

事务码 简短描述
01 MB01 采购订单收货
02 MB31 生产订单收货
03 MB1A 货物发出
04 MB1B 转移过帐
05 MB1C 其他货物收据
06 MB11 货物流动逆转
07 MB04 分包订单的后续调整

 

导出返回的参数为:

参数名称 关联类型 值传递 说明
GOODSMVT_HEADRET BAPI2017_GM_HEAD_RET
MATERIALDOCUMENT BAPI2017_GM_HEAD_RET-MAT_DOC 货物移动凭证号
MATDOCUMENTYEAR BAPI2017_GM_HEAD_RET-DOC_YEAR

特别注意事项:

GOODSMVT_ITEM字段MVT_IND说明
简短说明 对应GM_CODE
B 表示采购订单收货 对应货物移动分配事务码GM_CODE是01
F 表示生产订单收货 对应货物移动分配事务码GM_CODE是02
表示除去01,02 剩余其他货物移动分配事务代码的情况

当GM_CODE = 01 时,分四种情况:

  1. 已知采购订单
    字段名 类型 是否必填 简短描述
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    PO_NUMBER BSTNR 必填 采购订单号
    PO_ITEM EBELP 必填 采购凭证的项目编号
    MVT_IND KZBEW 必填 移动标识
    STGE_LOC LGORT_D 可能需要 库存地点
    BATCH CHARG_D 可能需要 批号
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    STCK_TYPE MB_INSMK 可选 库存类型
    ITEM_TEXT SGTXT 可选 项目文本
    UNLOAD_PT ABLAD 可选 卸货点
    MOVE_MAT UMMAT18 不可填 接收/发出物料
    MOVE_PLANT UMWRK 不可填 收货工厂/发货工厂
    MOVE_STLOC UMLGO 不可填 收货/发货库存地点
  2. 采购订单未知,已知发货通知
    字段名 类型 是否必填 简短描述
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    DELIV_NUMB_TO_SEARCH VBELN_VL 必填 交货
    DELIV_ITEM_TO_SEARCH POSNR_VL 必填 交货项目

     

  3. 采购订单未知,将自动创建采购订单
    字段名 类型 是否必填 简短描述
    MATERIAL MATNR18 必填 物料编号(18个字符)
    PLANT WERKS_D 必填 工厂
    STGE_LOC LGORT_D 必填 库存地点
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    VENDOR ELIFN 必填 供应商帐户号
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    MVT_IND KZBEW 必填 移动标识
    BATCH CHARG_D 可能需要 批号
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    SPEC_STOCK SOBKZ 可选 特殊库存标识
    ITEM_TEXT SGTXT 可选 项目文本
    GR_RCPT WEMPF 可选 收货方
    UNLOAD_PT ABLAD 可选 卸货点
    MOVE_MAT UMMAT18 不可填 接收/发出物料
    MOVE_PLANT UMWRK 不可填 收货工厂/发货工厂
    MOVE_STLOC UMLGO 不可填 收货/发货库存地点
    MOVE_BATCH UMCHA 不可填 收货/发货批量
  4. 基于收货的发票验证中的附加字段
    字段名 类型 是否必填 简短描述
    REF_DOC_YR LFBJA 必填 参考凭证会计年度
    REF_DOC LFBNR 必填 参考凭证的凭证号
    REF_DOC_IT LFPOS 必填 参考凭证项目

    当GM_CODE = 02 时

    字段名 类型 是否必填 简短描述
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    ORDERID AUFNR 必填 订单号
    MVT_IND KZBEW 必填 移动标识
    STGE_LOC LGORT_D 可能需要 库存地点
    BATCH CHARG_D 可能需要 批号
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    STCK_TYPE MB_INSMK 可选 库存类型
    NO_MORE_GR ELIKZ 可选 “交货已完成”标识
    ITEM_TEXT SGTXT 可选 项目文本
    UNLOAD_PT ABLAD 可选 卸货点
    MOVE_MAT UMMAT18 不可填 接收/发出物料
    MOVE_PLANT UMWRK 不可填 收货工厂/发货工厂
    MOVE_STLOC UMLGO 不可填 收货/发货库存地点
    MOVE_BATCH UMCHA 不可填 收货/发货批量

    当GM_CODE = 03 时,分两种情况

    未经预约发货
    字段名 类型 是否必填 简短描述
    MATERIAL MATNR18 必填 物料编号(18个字符)
    PLANT WERKS_D 必填 工厂
    STGE_LOC LGORT_D 必填 库存地点
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    MVT_IND KZBEW 必填 移动标识
    BATCH CHARG_D 可能需要 批号
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    SPEC_STOCK SOBKZ 可选 特殊库存标识
    ITEM_TEXT SGTXT 可选 项目文本
    UNLOAD_PT ABLAD 可选 卸货点
    GR_RCPT WEMPF 可选 收货方
    MOVE_MAT UMMAT18 不可填 接收/发出物料
    MOVE_PLANT UMWRK 不可填 收货工厂/发货工厂
    MOVE_STLOC UMLGO 不可填 收货/发货库存地点
    MOVE_BATCH UMCHA 不可填 收货/发货批量
    与预定有关的货物问题
    字段名 类型 是否必填 简短描述
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    RESERV_NO RSNUM 必填 预留/相关需求的编号
    RES_ITEM RSPOS 必填 预留/相关需求的项目编号
    RES_TYPE RSART 必填 记录类型
    MVT_IND KZBEW 必填 移动标识
    STGE_LOC LGORT_D 可能需要 库存地点
    BATCH CHARG_D 可能需要 批号
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    SPEC_STOCK SOBKZ 可选 特殊库存标识
    ITEM_TEXT SGTXT 可选 项目文本
    UNLOAD_PT ABLAD 可选 卸货点
    GR_RCPT WEMPF 可选 收货方
    MATERIAL MATNR18 不可填 物料编号(18 个字符)
    PLANT WERKS_D 不可填 工厂
    MOVE_TYPE BWART 不可填 移动类型(库存管理)

    当GM_CODE = 04 时

    字段名 类型 是否必填 简短描述
    MATERIAL MATNR18 必填 物料编号(18个字符)
    PLANT WERKS_D 必填 工厂
    STGE_LOC LGORT_D 必填 库存地点
    MOVE_TYPE BWART 必填 移动类型(库存管理)
    ENTRY_QNT ERFMG 必填 以录入项单位表示的数量
    ENTRY_UOM ERFME 必填 条目单位
    MVT_IND KZBEW 必填 移动标识
    BATCH CHARG_D 可能需要 批号
    MOVE_MAT UMMAT18 可能需要 接收/发出物料
    MOVE_PLANT UMWRK 可能需要 收货工厂/发货工厂
    MOVE_STLOC UMLGO 可能需要 收货/发货库存地点
    MOVE_BATCH UMCHA 可能需要 收货/发货批量
    MOVE_REAS MB_GRBEW 可能需要 移动原因
    SPEC_STOCK SOBKZ 可选 特殊库存标识
    ITEM_TEXT SGTXT 可选 项目文本

    总结了那么多知识点,如果您发现S4HANA系统的新语法和ECC系统或者R3系统有点差异,可以留言告诉我。对于初级SAP ABAP顾问来说,是不容易的。作者曾经也是SAP ABAP beginners ,到处去找Tutorial for Constant。需要自学很久,没人给咱免费培训。

    写个测试代码DEMO举例子。下面是代码。

    1.1. 示例代码1

    1.1.1. 采购订单示例代码

    *抬头
    GS_HEAD-PSTNG_DATE = SY-DATUM.     “凭证中的过帐日期
    GS_HEAD-DOC_DATE = SY-DATUM.       “凭证中的凭证日期
    GOODSMVT_CODE-GM_CODE = ’01’.      “为 BAPI 货物移动分配事务代码LOOP AT GT_PCCF INTO GS_PCCF WHERE CHECKBOX = ‘X’.

    CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
    EXPORTING
    INPUT  = GS_PCCF-MATNR
    IMPORTING
    OUTPUT = GS_PCCF-MATNR.

    *行项目
    GS_ITEM-MATERIAL = GS_PCCF-MATNR.        “物料号
    GS_ITEM-PLANT = GS_PCCF-WERKS.           “工厂
    GS_ITEM-BATCH = GS_PCCF-CHARG.           “批号
    GS_ITEM-MOVE_TYPE = GS_PCCF-BWART.      “移动类型(库存管理)
    GS_ITEM-PO_PR_QNT = GS_PCCF-MENGE.      “采购订单价格单位的数量
    GS_ITEM-QUANTITY = GS_PCCF-MENGE.         “数量

    SELECT SINGLE MEINS
    FROM MARA
    INTO GS_ITEM-ORDERPR_UN      “订单价格单位(采购)
    WHERE MATNR = GS_PCCF-MATNR.

    GS_ITEM-BASE_UOM = GS_ITEM-ORDERPR_UN.   “基本计量单位
    IF GS_PCCF-VBELN_IM IS NOT INITIAL.
    IF GS_HEAD-REF_DOC_NO IS INITIAL.
    GS_HEAD-REF_DOC_NO = GS_PCCF-VBELN_IM.  “参考凭证编号
    ENDIF.
    ENDIF.
    GS_ITEM-DELIV_NUMB_TO_SEARCH = GS_PCCF-VBELN_IM.    “交货
    GS_ITEM-DELIV_ITEM_TO_SEARCH = GS_PCCF-VBELP_IM.    “交货项目
    GS_ITEM-PO_NUMBER = GS_PCCF-EBELN.          “采购订单编号
    GS_ITEM-PO_ITEM = GS_PCCF-EBELP.         “采购凭证的项目编号
    GS_ITEM-MVT_IND = ‘B’.                             “移动标识
    GS_ITEM-STGE_LOC = GS_PCCF-LGORT.                   “库存地点
    GS_ITEM-REF_DOC = GS_PCCF-REF_DOC.        “参考凭证的凭证号
    GS_ITEM-REF_DOC_IT = GS_PCCF-REF_DOC_IT.       “参考凭证项目
    GS_ITEM-ENTRY_QNT = GS_PCCF-ERFMG.        “以输入单位计的数量
    GS_ITEM-ENTRY_UOM = GS_PCCF-ERFME.      “条目单位

    APPEND GS_ITEM TO GT_ITEM.
    CLEAR GS_ITEM.

    ENDLOOP.

    CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
    EXPORTING
    GOODSMVT_HEADER  = GS_HEAD
    GOODSMVT_CODE    = GOODSMVT_CODE
    IMPORTING
    MATERIALDOCUMENT = MATERIALDOCUMENT
    MATDOCUMENTYEAR  = MATDOCUMENTYEAR
    TABLES
    GOODSMVT_ITEM    = GT_ITEM
    RETURN           = GT_RETURN1.

    READ TABLE GT_RETURN1 INTO GS_RETURN1 WITH KEY TYPE = ‘E’.
    IF SY-SUBRC = 0.                                      “失败
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
    MESSAGE GS_RETURN1-MESSAGE TYPE ‘E’.
    STOP.
    ELSE.                                                 “成功
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    WAIT = ‘X’.
    MESSAGE ‘创建成功!’ TYPE ‘S’.
    ENDIF.

    1.1.2. 注意事项

    1.2. 示例代码2

    1.2.1. 生产订单示例代码

    “抬头
    GS_HEAD-PSTNG_DATE = SY-DATUM.            “凭证中的过帐日期
    GS_HEAD-DOC_DATE = SY-DATUM.          “凭证中的凭证日期
    GOODSMVT_CODE-GM_CODE = ’02’.      “为 BAPI 货物移动分配事务代码
    LOOP AT GT_ZMM06 INTO GS_ZMM06 WHERE BOX = ‘X’.CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
    EXPORTING
    INPUT  = GS_ZMM06-MATNR
    IMPORTING
    OUTPUT = GS_ZMM06-MATNR.

    “行项目
    GS_ITEM-MATERIAL    = GS_ZMM06-MATNR.          “物料号
    GS_ITEM-PLANT       =  GS_ZMM06-WERKS.          “工厂
    GS_ITEM-BATCH       =  GS_ZMM06-CHARG.         “批号
    GS_ITEM-ORDERID     = GS_ZMM06-AUFNR.      “生产订单
    GS_ITEM-MOVE_TYPE   = GS_ZMM06-BWART.     “移动类型(库存管理)
    GS_ITEM-ENTRY_QNT   = GS_ZMM06-ERFMG.    “以输入单位计的数量
    GS_ITEM-ENTRY_UOM   = GS_ZMM06-ERFME.   “条目单位
    GS_ITEM-QUANTITY    = GS_ZMM06-SSZS.     “库存数量
    SELECT SINGLE MEINS
    FROM AFPO
    INTO GS_ITEM-BASE_UOM       “基本计量单位
    WHERE AUFNR = GS_ZMM06-AUFNR
    AND MATNR = GS_ZMM06-MATNR.
    GS_ITEM-MVT_IND     = ‘F’.       “移动标识
    GS_ITEM-STGE_LOC    = GS_ZMM06-LGORT.   “库存地点

    APPEND GS_ITEM TO GT_ITEM.
    CLEAR GS_ITEM.
    ENDLOOP.

    CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
    EXPORTING
    GOODSMVT_HEADER  = GS_HEAD
    GOODSMVT_CODE    = GOODSMVT_CODE
    IMPORTING
    MATERIALDOCUMENT = MATERIALDOCUMENT
    MATDOCUMENTYEAR  = MATDOCUMENTYEAR
    TABLES
    GOODSMVT_ITEM    = GT_ITEM
    RETURN           = GT_RETURN1.

    READ TABLE GT_RETURN1 INTO GS_RETURN1 WITH KEY TYPE = ‘E’.
    IF SY-SUBRC = 0.“失败
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
    MESSAGE GS_RETURN1-MESSAGE TYPE ‘E’.
    STOP.
    ELSE.“成功
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    WAIT = ‘X’.
    MESSAGE ‘创建成功!’ TYPE ‘S’.
    ENDIF.

     

    本文链接 http://www.hot583.com/2022/04/02/bapi_goodsmvt_create/

    本文为作者原创,如果这篇文章对您有用,欢迎转载,

    转载请务必注明来源《今日热点在看》http://www.hot583.com/

    我的微信公众号【 hot583 】 或者在这个链接联系我

    微信原文《全文完》