MFBF对应的bapi:BAPI_REPMANCONF1_CREATE_MTS
示例代码如下
TYPES: BEGIN OF TY_DATA,
BOX TYPE CHAR01,
ICON TYPE CHAR6,
MSG TYPE STRING,
MBLNR TYPE MBLNR,
BUDAT TYPE BUDAT,
MATNR1 TYPE MATNR, "收货物料
MAKTX1 TYPE MAKTX, "物料描述
MEINS1 TYPE MEINS,
MATNR2 TYPE MATNR, "反冲物料
MAKTX2 TYPE MAKTX, "物料描述
MEINS2 TYPE MEINS, "单位
MENGE TYPE MENGE_D, "数量
WERKS TYPE WERKS_D, "生产工厂
LGORT TYPE LGORT_D, "反冲库位
LGOBE TYPE LGOBE, "反冲库位
FLAG TYPE CHAR01, "是否冲销
END OF TY_DATA.
DATA: GT_DATA TYPE STANDARD TABLE OF TY_DATA.
DATA: GS_DATA TYPE TY_DATA.
DATA: LS_BFLUSHFLAGS TYPE BAPI_RM_FLG,
LS_BFLUSHDATAGEN TYPE BAPI_RM_DATGEN,
LT_GOODSMOVEMENTS TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
LS_GOODSMOVEMENTS TYPE BAPI2017_GM_ITEM_CREATE,
LS_BFLUSHDATAMTS TYPE BAPI_RM_DATSTOCK,
LS_RETURN TYPE BAPIRET2,
LV_CONFIRMATION TYPE BAPI_RM_DATKEY-CONFIRMATION.
DATA: LT_TEMP TYPE STANDARD TABLE OF TY_DATA.
DATA: LS_TEMP TYPE TY_DATA.
DATA: LV_MBLNR TYPE MBLNR.
LT_TEMP = GT_DATA.
DELETE LT_TEMP WHERE BOX IS INITIAL .
CHECK LT_TEMP IS NOT INITIAL .
SORT LT_TEMP BY BUDAT MATNR1 FLAG.
DELETE ADJACENT DUPLICATES FROM LT_TEMP COMPARING BUDAT MATNR1 FLAG.
LOOP AT LT_TEMP INTO LS_TEMP .
CLEAR:LS_BFLUSHFLAGS,LS_BFLUSHDATAGEN,LV_CONFIRMATION,LS_RETURN,LT_GOODSMOVEMENTS.
*抬头的赋值:
LS_BFLUSHFLAGS-BCKFLTYPE = '11'. "11:个别组件消耗反冲 01:最后反冲 02:报告点反冲 10:个别作业反冲
LS_BFLUSHDATAGEN-MATERIALNR = LS_TEMP-MATNR1. "物料
LS_BFLUSHDATAGEN-PRODPLANT = LS_TEMP-WERKS. "工厂
LS_BFLUSHDATAGEN-PLANPLANT = LS_TEMP-WERKS. "工厂
LS_BFLUSHDATAGEN-STORAGELOC = LS_TEMP-LGORT. "库存地点
SELECT SINGLE VERID INTO
LS_BFLUSHDATAGEN-PRODVERSION "生产版本
FROM MKAL
WHERE MATNR = LS_TEMP-MATNR1
AND WERKS = LS_TEMP-WERKS .
LS_BFLUSHDATAGEN-POSTDATE = LS_TEMP-BUDAT. "过账日期
LS_BFLUSHDATAGEN-DOCDATE = LS_TEMP-BUDAT. "凭证日期
LS_BFLUSHDATAGEN-BACKFLQUANT = '1'.
LS_BFLUSHDATAGEN-UNITOFMEASURE = LS_TEMP-MEINS1. "单位
LS_BFLUSHDATAGEN-ORDERCOSTS = 'X'. "标识: 订单成本的过帐.
* LS_BFLUSHDATAMTS-REPPOINT = lv_REPPOINT.
* ls_bflushflags-components_type = COMPONENTS_TYPE. 不需要报告点反冲
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL
AND BUDAT = LS_TEMP-BUDAT
AND MATNR1 = LS_TEMP-MATNR1
AND FLAG = LS_TEMP-FLAG
.
CLEAR:LS_GOODSMOVEMENTS.
LS_GOODSMOVEMENTS-STGE_LOC = GS_DATA-LGORT. "库存地点来源前台
LS_GOODSMOVEMENTS-MATERIAL = GS_DATA-MATNR2. "组件物料编码
LS_GOODSMOVEMENTS-ENTRY_UOM = GS_DATA-MEINS2. "单位
LS_GOODSMOVEMENTS-PLANT = GS_DATA-WERKS. "工厂
LS_GOODSMOVEMENTS-ENTRY_QNT = GS_DATA-MENGE. "实际过账数量
LS_GOODSMOVEMENTS-PROD_DATE = GS_DATA-BUDAT. "生产日期
IF GS_DATA-FLAG IS NOT INITIAL .
LS_GOODSMOVEMENTS-MOVE_TYPE = '262'."IT_SMVT-MOVE_TYPE'. "移动类型
ELSE.
LS_GOODSMOVEMENTS-MOVE_TYPE = '261'."IT_SMVT-MOVE_TYPE'. "移动类型
ENDIF.
APPEND LS_GOODSMOVEMENTS TO LT_GOODSMOVEMENTS.
ENDLOOP.
CALL FUNCTION 'BAPI_REPMANCONF1_CREATE_MTS'
EXPORTING
BFLUSHFLAGS = LS_BFLUSHFLAGS
BFLUSHDATAGEN = LS_BFLUSHDATAGEN
* BFLUSHDATAMTS = LS_BFLUSHDATAMTS
IMPORTING
CONFIRMATION = LV_CONFIRMATION
RETURN = LS_RETURN
TABLES
GOODSMOVEMENTS = LT_GOODSMOVEMENTS.
IF LV_CONFIRMATION IS NOT INITIAL. "冲销成功
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CLEAR: LV_MBLNR.
* “取物料凭证号
SELECT SINGLE BELNR INTO LV_MBLNR FROM BLPP WHERE PRTNR = LV_CONFIRMATION .
IF LV_MBLNR IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL
AND BUDAT = LS_TEMP-BUDAT
AND MATNR1 = LS_TEMP-MATNR1
AND FLAG = LS_TEMP-FLAG.
GS_DATA-ICON = ICON_RED_LIGHT.
GS_DATA-MBLNR = LV_MBLNR.
GS_DATA-MSG = LS_RETURN-MESSAGE.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ELSE.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL
AND BUDAT = LS_TEMP-BUDAT
AND MATNR1 = LS_TEMP-MATNR1
AND FLAG = LS_TEMP-FLAG.
GS_DATA-ICON = ICON_GREEN_LIGHT.
GS_DATA-MBLNR = LV_MBLNR.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL
AND BUDAT = LS_TEMP-BUDAT
AND MATNR1 = LS_TEMP-MATNR1
AND FLAG = LS_TEMP-FLAG.
GS_DATA-ICON = ICON_RED_LIGHT.
GS_DATA-MBLNR = LV_MBLNR.
GS_DATA-MSG = LS_RETURN-MESSAGE.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
ENDIF.
ENDLOOP.