重复制造模式下BOM中油类物料如何进行投料管理
-
背景
汽车零部件如发动机、变速器等的生产常常采用重复制造模式。这些零部件的生产工艺相对成熟和固定,企业根据汽车主机厂的需求计划,在一定时期内大量生产相同规格和型号的零部件,通过稳定的生产流程和质量控制,确保零部件的供应和质量稳定性。
本例中公司A主要生产传动轴与万向节,传动轴在传递动力时需要不断地改变角度,万向节是实现这一功能的关键部件,其内部的滚针轴承、十字轴等零件在运转过程中需要润滑油的润滑。润滑油能够降低摩擦阻力,防止零件磨损,保证传动轴的正常运转和动力传递效率,减少振动和噪音。
该企业将油类物料定义为散装物料,在 BOM中体现其物料结构,但不纳入生产订单的成本统计,也不在生产订单发料时进行数量管理,可以采用成本中心消耗的模式,因为油类物料的价值相对较低,且每次使用量难以精确控制。
<批量修改BOM组件中生产相关标识>Demo
"打开 BOM
REFRESH : LT_STPO[].
CLEAR LV_VALID.
LV_VALID = P_DATUV+0(4)
&& P_DATUV+4(2)
&& P_DATUV+6(2).
CALL FUNCTION 'CSAP_MAT_BOM_OPEN'
EXPORTING
MATERIAL = LW_CONFIRM-MATNR
PLANT = LW_CONFIRM-WERKS
BOM_USAGE = LW_CONFIRM-STLAN
ALTERNATIVE = LW_CONFIRM-VWALT
VALID_FROM = LV_VALID
CHANGE_NO = P_AENNR
* REVISION_LEVEL =
* FL_NO_CHANGE_DOC = ' '
* IMPORTING
* O_STKO =
* FL_WARNING =
TABLES
T_STPO = LT_STPO[]
* T_DEP_DATA =
* T_DEP_DESCR =
* T_DEP_ORDER =
* T_DEP_SOURCE =
* T_DEP_DOC =
EXCEPTIONS
ERROR = 1
.
"修改 BOM
LOOP AT LT_STPO WHERE COMPONENT = LW_CONFIRM-IDNRK.
* CLEAR: LT_MESSAGES, LT_MESSAGES[].
* CALL FUNCTION 'CALO_INIT_API'
* EXCEPTIONS
* LOG_OBJECT_NOT_FOUND = 1
* LOG_SUB_OBJECT_NOT_FOUND = 2
* OTHER_ERROR = 3
* OTHERS = 4.
LT_STPO-CHANGE_NO = P_AENNR.
LT_STPO-REL_PROD = ''.
* I_STPO-VALID_FROM = LW_CONFIRM-DATUV.
CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN'
EXPORTING
I_STPO = LT_STPO
* FL_DEP_ALE_CONFORM = ' '
* IMPORTING
* O_STPO =
* FL_WARNING =
* TABLES
* T_DEP_DATA =
* T_DEP_DESCR =
* T_DEP_ORDER =
* T_DEP_SOURCE =
* T_DEP_DOC =
EXCEPTIONS
ERROR = 1
.
IF SY-SUBRC = 0.
LW_CONFIRM-SANFE = ''.
LW_CONFIRM-AENNR = P_AENNR.
LW_CONFIRM-DATUV = GW_AENR-DATUV.
LW_CONFIRM-ICON = ICON_LED_GREEN.
LW_CONFIRM-MESSAGE = TEXT-002."更新成功
ELSE.
LW_CONFIRM-ICON = ICON_LED_RED.
LW_CONFIRM-MESSAGE = TEXT-007."更新异常
ENDIF.
* CALL FUNCTION 'CALO_LOG_READ_MESSAGES'
* TABLES
* MESSAGES_AND_PARAMETERS = LT_MESSAGES
* EXCEPTIONS
* OTHERS = 1.
*
* CLEAR : GV_ERROR_FLAG.
* LOOP AT LT_MESSAGES WHERE MSG_TYPE = 'E'.
* GV_ERROR_FLAG = GV_ERROR_FLAG + 1.
* LW_CONFIRM-ICON = ICON_LED_RED.
* LW_CONFIRM-MESSAGE = LT_MESSAGES-MSG_TXT.
* ENDLOOP.
* IF GV_ERROR_FLAG IS NOT INITIAL.
* ELSE.
* LW_CONFIRM-SANFE = ''.
* LW_CONFIRM-ICON = ICON_LED_GREEN.
* LW_CONFIRM-MESSAGE = TEXT-002."更新成功
* ENDIF.
ENDLOOP.
" 关闭BOM
CALL FUNCTION 'CSAP_MAT_BOM_CLOSE'
EXPORTING
FL_COMMIT_AND_WAIT = 'X'
* IMPORTING
* FL_WARNING = LT_FL_WARNING
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
公司A目前采用的是在月末生产结束后,根据实际产量以及BOM中油类物料的标准用量进行分摊,一次性投入,即下图所示的程序功能。
-
实现
1、首先在ZGREASE表视图下维护油类物料清单。
2、新建中间仓代码,月间将油类物料移动到该仓库,后续该仓的库存参与投料分配。
*&---------------------------------------------------------------------*
*& Form BAPI_GOODSMVT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BAPI_GOODSMVT .
DATA : LS_HEADER LIKE BAPI2017_GM_HEAD_01,
LS_CODE LIKE BAPI2017_GM_CODE,
LS_HEADRET LIKE BAPI2017_GM_HEAD_RET.
DATA : LT_ITEM LIKE BAPI2017_GM_ITEM_CREATE OCCURS 0 WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA : LT_ZMJMPPT311 LIKE ZMJMPPT311 OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF LT_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
WERKS LIKE MSEG-WERKS,
MATNR LIKE MSEG-MATNR,
ZEILE LIKE MSEG-ZEILE,
CPUDT LIKE MKPF-CPUDT,
CPUTM LIKE MKPF-CPUTM,
BWART LIKE MSEG-BWART,
LGORT LIKE MSEG-LGORT,
UMLGO LIKE MSEG-UMLGO,
CHARG LIKE MSEG-CHARG,
SOBKZ LIKE MSEG-SOBKZ,
PSPNR LIKE MSEG-PS_PSP_PNR,
BLDAT LIKE MKPF-BLDAT,
BUDAT LIKE MKPF-BUDAT,
ERFMG LIKE MSEG-ERFMG,
ERFME LIKE MSEG-ERFME,
USNAM LIKE MKPF-USNAM,
BKTXT LIKE MKPF-BKTXT,
END OF LT_MSEG.
DATA : LV_ANSWER(1).
PERFORM FRM_POPUP_INFO USING TEXT-T08
'Infomation' CHANGING LV_ANSWER.
IF LV_ANSWER <> 'J'.
EXIT.
ENDIF.
LOOP AT GT_MAIN.
IF GT_MAIN-ERFMG IS INITIAL
OR GT_MAIN-ERFMG EQ '0.000'.
CONTINUE.
ENDIF.
CLEAR : LT_ITEM[], LT_ITEM.
LS_HEADER-PSTNG_DATE = GT_MAIN-BUDAT.
LS_HEADER-DOC_DATE = GT_MAIN-BLDAT.
LS_HEADER-HEADER_TXT = GT_MAIN-BKTXT.
LS_CODE-GM_CODE = '04'.
LT_ITEM-MATERIAL = GT_MAIN-MATNR.
LT_ITEM-PLANT = GT_MAIN-WERKS.
LT_ITEM-STGE_LOC = GT_MAIN-LGORT. "库存地点
* LT_ITEM-BATCH = GT_MAIN-CHARG. "批次(不需要)
LT_ITEM-ENTRY_QNT = GT_MAIN-ERFMG. "以输入单位计的数量
LT_ITEM-ENTRY_UOM = GT_MAIN-ERFME. "条目单位
LT_ITEM-MOVE_STLOC = GT_MAIN-UMLGO."收货/发货库存地点 RC19
IF GT_MAIN-SOBKZ EQ 'Q'.
LT_ITEM-MOVE_TYPE = '411'.
LT_ITEM-SPEC_STOCK = GT_MAIN-SOBKZ.
LT_ITEM-VAL_WBS_ELEM = GT_MAIN-POSID.
ELSE.
LT_ITEM-MOVE_TYPE = '311'.
ENDIF.
APPEND LT_ITEM.
CLEAR LT_ITEM.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = LS_HEADER
GOODSMVT_CODE = LS_CODE
IMPORTING
GOODSMVT_HEADRET = LS_HEADRET
TABLES
GOODSMVT_ITEM = LT_ITEM[]
RETURN = LT_RETURN[].
IF LS_HEADRET IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
"获取物料凭证
SELECT MSEG~MBLNR
MSEG~MJAHR
MSEG~WERKS
MSEG~MATNR
MSEG~ZEILE
MKPF~CPUDT
MKPF~CPUTM
MSEG~BWART
MSEG~LGORT
MSEG~UMLGO
MSEG~CHARG
MSEG~SOBKZ
MSEG~PS_PSP_PNR AS PSPNR
MKPF~BLDAT
MKPF~BUDAT
MSEG~ERFMG
MSEG~ERFME
MKPF~USNAM
MKPF~BKTXT
INTO CORRESPONDING FIELDS OF TABLE LT_MSEG
FROM MSEG
JOIN MKPF
ON MSEG~MBLNR EQ MKPF~MBLNR
AND MSEG~MJAHR EQ MKPF~MJAHR
WHERE MSEG~MBLNR EQ LS_HEADRET-MAT_DOC
AND MSEG~MJAHR EQ LS_HEADRET-DOC_YEAR
AND MSEG~SHKZG EQ 'H'.
CLEAR : LT_ZMJMPPT311[], LT_ZMJMPPT311.
LOOP AT LT_MSEG.
LT_ZMJMPPT311-WERKS = LT_MSEG-WERKS.
LT_ZMJMPPT311-MATNR = LT_MSEG-MATNR.
LT_ZMJMPPT311-MBLNR = LT_MSEG-MBLNR.
LT_ZMJMPPT311-MJAHR = LT_MSEG-MJAHR.
LT_ZMJMPPT311-ZEILE = LT_MSEG-ZEILE.
LT_ZMJMPPT311-CPUDT = LT_MSEG-CPUDT.
LT_ZMJMPPT311-CPUTM = LT_MSEG-CPUTM.
LT_ZMJMPPT311-BWART = LT_MSEG-BWART.
LT_ZMJMPPT311-LGORT = LT_MSEG-LGORT.
LT_ZMJMPPT311-UMLGO = LT_MSEG-UMLGO.
LT_ZMJMPPT311-CHARG = LT_MSEG-CHARG.
LT_ZMJMPPT311-SOBKZ = LT_MSEG-SOBKZ.
LT_ZMJMPPT311-POSID = GT_MAIN-POSID.
LT_ZMJMPPT311-BLDAT = LT_MSEG-BLDAT.
LT_ZMJMPPT311-BUDAT = LT_MSEG-BUDAT.
LT_ZMJMPPT311-ERFMG = LT_MSEG-ERFMG.
LT_ZMJMPPT311-ERFME = LT_MSEG-ERFME.
LT_ZMJMPPT311-USNAM = LT_MSEG-USNAM.
LT_ZMJMPPT311-BKTXT = LT_MSEG-BKTXT.
LT_ZMJMPPT311-ERNAM = SY-UNAME.
LT_ZMJMPPT311-ERDAT = SY-DATUM.
LT_ZMJMPPT311-ERZET = SY-UZEIT.
APPEND LT_ZMJMPPT311.
CLEAR LT_ZMJMPPT311.
ENDLOOP.
INSERT ZMJMPPT311 FROM TABLE LT_ZMJMPPT311.
GT_MAIN-MBLNR = LS_HEADRET-MAT_DOC.
GT_MAIN-MJAHR = LS_HEADRET-DOC_YEAR.
GT_MAIN-ZLABSTF = GT_MAIN-ZLABSTF - GT_MAIN-ERFMG.
GT_MAIN-ZLABSTT = GT_MAIN-ZLABSTT + GT_MAIN-ERFMG.
GT_MAIN-ERFMG_M = GT_MAIN-ERFMG_M + GT_MAIN-ERFMG.
CLEAR GT_MAIN-ERFMG.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
READ TABLE LT_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC EQ '0'.
GT_MAIN-ZRSLT = LT_RETURN-MESSAGE.
ENDIF.
ENDIF.
MODIFY GT_MAIN.
CLEAR GT_MAIN.
ENDLOOP.
ENDFORM. " BAPI_GOODSMVT
3、月末生产截至,确认产量,执行分配。
投入数量分配:出库数量合计 × ( 理论投入数量 ÷ 理论投入合计 )
*&---------------------------------------------------------------------*
*& Form EXCUTE_BACKFLUSH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCUTE_BACKFLUSH .
DATA : LT_ROWID TYPE LVC_T_ROID,
LS_ROWID TYPE LVC_S_ROID.
DATA : LS_FLAG LIKE BAPI_RM_FLG,
LS_DATGEN LIKE BAPI_RM_DATGEN.
DATA : LS_RETURN LIKE BAPIRET2,
LS_CONFIRM LIKE BAPI_RM_DATKEY-CONFIRMATION.
DATA : LV_MSG TYPE BAPI_MSG.
DATA : LT_ITEM LIKE BAPI2017_GM_ITEM_CREATE OCCURS 0 WITH HEADER LINE.
DATA : LT_MAIN LIKE GT_MAIN OCCURS 0 WITH HEADER LINE.
DATA : LT_ZMJMPPT261 LIKE ZMJMPPT261 OCCURS 0 WITH HEADER LINE.
DATA : LV_BELNR LIKE BLPP-BELNR,
LV_BUDAT(7),
LV_ERROR.
DATA : BEGIN OF LT_EXCUTE OCCURS 0,
MATNR LIKE GT_MAIN-MATNR,
END OF LT_EXCUTE.
DATA : BEGIN OF LT_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
WERKS LIKE MSEG-WERKS,
MATNR LIKE MSEG-MATNR,
ZEILE LIKE MSEG-ZEILE,
CPUDT LIKE MKPF-CPUDT,
CPUTM LIKE MKPF-CPUTM,
BWART LIKE MSEG-BWART,
LGORT LIKE MSEG-LGORT,
UMLGO LIKE MSEG-UMLGO,
CHARG LIKE MSEG-CHARG,
BLDAT LIKE MKPF-BLDAT,
BUDAT LIKE MKPF-BUDAT,
ERFMG LIKE MSEG-ERFMG,
ERFME LIKE MSEG-ERFME,
USNAM LIKE MKPF-USNAM,
BKTXT LIKE MKPF-BKTXT,
END OF LT_MSEG.
* CALL METHOD GO_ALV->CHECK_CHANGED_DATA.
CALL METHOD GO_ALV->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_ROWID.
CHECK LT_ROWID IS NOT INITIAL.
DATA : LV_ANSWER(1).
PERFORM FRM_POPUP_INFO USING TEXT-T09
'Infomation' CHANGING LV_ANSWER.
IF LV_ANSWER <> 'J'.
EXIT.
ENDIF.
LS_FLAG-BCKFLTYPE = '11'."个别组件消耗反冲
* LS_FLAG-COMPONENTS_TYPE = '1'."反冲所有发货
LOOP AT LT_ROWID INTO LS_ROWID.
READ TABLE GT_MAIN INDEX LS_ROWID-ROW_ID.
IF SY-SUBRC EQ '0' AND GT_MAIN-MBLNR IS INITIAL.
LT_EXCUTE-MATNR = GT_MAIN-MATNR.
APPEND LT_EXCUTE.
CLEAR LT_EXCUTE.
ENDIF.
ENDLOOP.
SORT LT_EXCUTE BY MATNR.
DELETE ADJACENT DUPLICATES FROM LT_EXCUTE COMPARING MATNR.
LOOP AT LT_EXCUTE.
CLEAR LV_ERROR.
LOOP AT GT_MAIN WHERE MATNR EQ LT_EXCUTE-MATNR.
"出库数量 = 投入出库(合计)
IF GT_MAIN-ZGISUM EQ GT_MAIN-ZINGISUM.
CLEAR : LT_ITEM[], LS_DATGEN, LT_ITEM.
LS_DATGEN-MATERIALNR = GT_MAIN-ZMATNR_UP.
LS_DATGEN-PRODPLANT = GT_MAIN-WERKS.
LS_DATGEN-PLANPLANT = GT_MAIN-WERKS.
LS_DATGEN-PRODVERSION = GT_MAIN-VERID.
LS_DATGEN-POSTDATE = GT_MAIN-BUDAT.
LS_DATGEN-DOCDATE = GT_MAIN-BLDAT.
LS_DATGEN-BACKFLQUANT = '1.000'.
LS_DATGEN-DOCHEADERTXT = 'ZMJMPPR7001'.
LT_ITEM-MATERIAL = GT_MAIN-MATNR.
LT_ITEM-PLANT = GT_MAIN-WERKS.
LT_ITEM-STGE_LOC = GT_MAIN-LGORT.
LT_ITEM-MOVE_TYPE = '261'.
LT_ITEM-ENTRY_QNT = GT_MAIN-ZINGIQT.
LT_ITEM-ENTRY_UOM = GT_MAIN-ZMEINS.
APPEND LT_ITEM.
CLEAR LT_ITEM.
CALL FUNCTION 'BAPI_REPMANCONF1_CREATE_MTS'
EXPORTING
BFLUSHFLAGS = LS_FLAG
BFLUSHDATAGEN = LS_DATGEN
IMPORTING
CONFIRMATION = LS_CONFIRM
RETURN = LS_RETURN
TABLES
GOODSMOVEMENTS = LT_ITEM[].
IF LS_CONFIRM IS NOT INITIAL.
GT_MAIN-CONFIRM = LS_CONFIRM.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CLEAR LV_BELNR.
"获取物料凭证
SELECT SINGLE BELNR
INTO LV_BELNR
FROM BLPP
WHERE PRTNR EQ GT_MAIN-CONFIRM.
GT_MAIN-MBLNR = LV_BELNR.
GT_MAIN-MJAHR = GT_MAIN-BUDAT(4).
GT_MAIN-ZEILE = '1'.
"原辅材料已成功投放。
GT_MAIN-ZRSLT = TEXT-S01.
MODIFY GT_MAIN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
GT_MAIN-ZRSLT = LS_RETURN-MESSAGE.
LV_MSG = LS_RETURN-MESSAGE.
LV_ERROR = 'X'.
MODIFY GT_MAIN.
EXIT.
ENDIF.
ELSE.
"投入出库(合计)与出库数量(合计)不符。
GT_MAIN-ZRSLT = TEXT-E04.
LV_MSG = TEXT-E04.
LV_ERROR = 'X'.
MODIFY GT_MAIN.
EXIT.
ENDIF.
ENDLOOP.
IF LV_ERROR IS INITIAL.
LOOP AT GT_MAIN WHERE MATNR EQ LT_EXCUTE-MATNR.
SELECT MSEG~MBLNR
MSEG~MJAHR
MSEG~WERKS
MSEG~MATNR
MSEG~ZEILE
MKPF~CPUDT
MKPF~CPUTM
MSEG~BWART
MSEG~LGORT
MSEG~UMLGO
MSEG~CHARG
MKPF~BLDAT
MKPF~BUDAT
MSEG~ERFMG
MSEG~ERFME
MKPF~USNAM
MKPF~BKTXT
INTO CORRESPONDING FIELDS OF TABLE LT_MSEG
FROM MSEG
JOIN MKPF
ON MSEG~MBLNR EQ MKPF~MBLNR
AND MSEG~MJAHR EQ MKPF~MJAHR
WHERE MSEG~MBLNR EQ GT_MAIN-MBLNR
AND MSEG~MJAHR EQ GT_MAIN-MJAHR.
CLEAR : LT_ZMJMPPT261, LT_ZMJMPPT261[].
LOOP AT LT_MSEG.
LT_ZMJMPPT261-WERKS = LT_MSEG-WERKS.
LT_ZMJMPPT261-MATNR = LT_MSEG-MATNR.
LT_ZMJMPPT261-MBLNR = LT_MSEG-MBLNR.
LT_ZMJMPPT261-MJAHR = LT_MSEG-MJAHR.
LT_ZMJMPPT261-ZEILE = LT_MSEG-ZEILE.
LT_ZMJMPPT261-CPUDT = LT_MSEG-CPUDT.
LT_ZMJMPPT261-CPUTM = LT_MSEG-CPUTM.
LT_ZMJMPPT261-BWART = LT_MSEG-BWART.
LT_ZMJMPPT261-LGORT = LT_MSEG-LGORT.
LT_ZMJMPPT261-CHARG = LT_MSEG-CHARG.
LT_ZMJMPPT261-BLDAT = LT_MSEG-BLDAT.
LT_ZMJMPPT261-BUDAT = LT_MSEG-BUDAT.
LT_ZMJMPPT261-ERFMG = LT_MSEG-ERFMG.
LT_ZMJMPPT261-ERFME = LT_MSEG-ERFME.
LT_ZMJMPPT261-USNAM = LT_MSEG-USNAM.
LT_ZMJMPPT261-BKTXT = LT_MSEG-BKTXT.
LT_ZMJMPPT261-ZITNO = GT_MAIN-ZITNO.
LT_ZMJMPPT261-ZGISUM = GT_MAIN-ZGISUM.
LT_ZMJMPPT261-ZMATNR_UP = GT_MAIN-ZMATNR_UP.
LT_ZMJMPPT261-AUFNR = GT_MAIN-AUFNR.
LT_ZMJMPPT261-PROCNR = GT_MAIN-PROCNR.
LT_ZMJMPPT261-VERID = GT_MAIN-VERID.
LT_ZMJMPPT261-ZPRDQT = GT_MAIN-ZPRDQT.
LT_ZMJMPPT261-ZMENGE = GT_MAIN-ZMENGE.
LT_ZMJMPPT261-ZMEINS = GT_MAIN-ZMEINS.
LT_ZMJMPPT261-ZLGIQT = GT_MAIN-ZLGIQT.
LT_ZMJMPPT261-ZLGISUM = GT_MAIN-ZLGISUM.
LT_ZMJMPPT261-ZLDISQT = GT_MAIN-ZLDISQT.
LT_ZMJMPPT261-ZINGIQT = GT_MAIN-ZINGIQT.
LT_ZMJMPPT261-ZINGISUM = GT_MAIN-ZINGISUM.
LT_ZMJMPPT261-ERNAM = SY-UNAME.
LT_ZMJMPPT261-ERDAT = SY-DATUM.
LT_ZMJMPPT261-ERZET = SY-UZEIT.
APPEND LT_ZMJMPPT261.
CLEAR LT_ZMJMPPT261.
ENDLOOP.
INSERT ZMJMPPT261 FROM TABLE LT_ZMJMPPT261.
ENDLOOP.
UPDATE ZMJMPPT311 SET ZGIID = 'X'
ZACTM = P_BUDAT
AENAM = SY-UNAME
AEDAT = SY-DATUM
AEZET = SY-UZEIT
WHERE WERKS EQ P_WERKS
AND MATNR EQ LT_EXCUTE-MATNR
AND ZCANCID NE 'X'
AND ZGIID NE 'X'.
ELSE.
LS_FLAG-BCKFLTYPE = '31'."个别组件消耗反冲(凭证相关冲销)
LOOP AT GT_MAIN WHERE MATNR EQ LT_EXCUTE-MATNR.
IF GT_MAIN-MBLNR IS NOT INITIAL.
CLEAR : LT_ITEM[], LS_DATGEN, LT_ITEM.
LS_DATGEN-MATERIALNR = GT_MAIN-ZMATNR_UP.
LS_DATGEN-PRODPLANT = GT_MAIN-WERKS.
LS_DATGEN-PLANPLANT = GT_MAIN-WERKS.
LS_DATGEN-PRODVERSION = GT_MAIN-VERID.
LS_DATGEN-POSTDATE = GT_MAIN-BUDAT.
LS_DATGEN-DOCDATE = GT_MAIN-BLDAT.
LS_DATGEN-BACKFLQUANT = '1.000'.
LT_ITEM-MATERIAL = GT_MAIN-MATNR.
LT_ITEM-PLANT = GT_MAIN-WERKS.
LT_ITEM-STGE_LOC = GT_MAIN-LGORT.
LT_ITEM-MOVE_TYPE = '262'.
LT_ITEM-ENTRY_QNT = GT_MAIN-ZINGIQT.
LT_ITEM-ENTRY_UOM = GT_MAIN-ZMEINS.
APPEND LT_ITEM.
CLEAR LT_ITEM.
CALL FUNCTION 'BAPI_REPMANCONF1_CREATE_MTS'
EXPORTING
BFLUSHFLAGS = LS_FLAG
BFLUSHDATAGEN = LS_DATGEN
IMPORTING
CONFIRMATION = LS_CONFIRM
RETURN = LS_RETURN
TABLES
GOODSMOVEMENTS = LT_ITEM[].
IF LS_CONFIRM IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CLEAR : GT_MAIN-MBLNR, GT_MAIN-MJAHR, GT_MAIN-ZEILE.
GT_MAIN-ZRSLT = TEXT-E05.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
GT_MAIN-ZRSLT = LS_RETURN-MESSAGE.
ENDIF.
ELSE.
GT_MAIN-ZRSLT = LV_MSG.
ENDIF.
MODIFY GT_MAIN.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. " EXCUTE_BACKFLUSH