method IF_EX_MB_DOCUMENT_BADI~MB_DOCUMENT_BEFORE_UPDATE.
DATA: T_MKPF LIKE LINE OF XMKPF.
READ TABLE XMKPF INTO T_MKPF INDEX 1.
DATA: T_ZTCPC01 TYPE ZTCPC01,
T_ZTCPC01_TOT TYPE TABLE OF ZTCPC01,
T_ZTCPC01_OLD TYPE TABLE OF ZTCPC01,
WA_ZTCPC01 TYPE ZTCPC01,
T_MSEG LIKE LINE OF XMSEG,
T_ZTCPC02 TYPE ZTCPC02.
DATA: L_LOOP LIKE SY-TABIX.
DATA: L_US TYPE RMPU_USER_SELCRIT,
L_RA_FAUFNR TYPE RMPU_RA_FAUFNR,
L_RA_FAUFNR_TMP LIKE LINE OF L_RA_FAUFNR,
L_AUFNR TYPE AFKO-AUFNR,
L_MBLNR TYPE MKPF-MBLNR,
L_SMBLN TYPE MSEG-SMBLN.
* IMPORT US TO L_US FROM MEMORY ID RMPU_MEM_ID_USERSEL.
IF T_MKPF-TCODE2 = 'MF60'.
REFRESH:T_ZTCPC01_TOT,T_ZTCPC01_OLD.
READ TABLE XMKPF INTO T_MKPF INDEX 1.
L_AUFNR = T_MKPF-BKTXT.
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
T_ZTCPC01-AUFNR = T_MKPF-BKTXT.
T_ZTCPC01-MATNR = T_MSEG-MATNR.
T_ZTCPC01-WERKS = T_MSEG-WERKS.
T_ZTCPC01-LGORT = T_MSEG-LGORT. "Goods issue from location
T_ZTCPC01-CHARG = T_MSEG-CHARG.
T_ZTCPC01-SOBKZ = T_MSEG-SOBKZ.
T_ZTCPC01-LIFNR = T_MSEG-LIFNR.
T_ZTCPC01-PS_PSP_PNR = T_MSEG-PS_PSP_PNR.
T_ZTCPC01-CLABM = T_MSEG-MENGE.
T_ZTCPC01-MEINS = T_MSEG-MEINS.
T_ZTCPC01-ERSDA = T_MKPF-BUDAT.
T_ZTCPC01-ERNAM = T_MKPF-USNAM.
COLLECT T_ZTCPC01 INTO T_ZTCPC01_TOT.
MOVE-CORRESPONDING T_ZTCPC01 TO T_ZTCPC02.
T_ZTCPC02-MBLNR = T_MSEG-MBLNR.
T_ZTCPC02-MJAHR = T_MSEG-MJAHR.
T_ZTCPC02-ZEILE = T_MSEG-ZEILE.
T_ZTCPC02-LGORT = T_MSEG-LGORT.
T_ZTCPC02-UMLGO = T_MSEG-UMLGO.
T_ZTCPC02-USNAM = T_MKPF-USNAM.
T_ZTCPC02-BUDAT = T_MKPF-BUDAT.
T_ZTCPC02-CPUTM = T_MKPF-CPUTM.
T_ZTCPC02-RSNUM = T_MSEG-RSNUM.
T_ZTCPC02-RSPOS = T_MSEG-RSPOS.
INSERT ZTCPC02 FROM T_ZTCPC02. "Detail table of transacion log
* INSERT ZTCPC03 FROM T_ZTCPC02.
ENDLOOP.
SELECT * INTO TABLE T_ZTCPC01_OLD FROM ZTCPC01
WHERE ZTCPC01~AUFNR = L_AUFNR. "T_MKPF-XABLN.
IF NOT T_ZTCPC01_OLD[] IS INITIAL.
SORT T_ZTCPC01_OLD BY AUFNR MATNR WERKS LGORT CHARG.
LOOP AT T_ZTCPC01_TOT INTO T_ZTCPC01.
L_LOOP = SY-TABIX.
READ TABLE T_ZTCPC01_OLD INTO WA_ZTCPC01 WITH KEY AUFNR = T_ZTCPC01-AUFNR
MATNR = T_ZTCPC01-MATNR
WERKS = T_ZTCPC01-WERKS
LGORT = T_ZTCPC01-LGORT
CHARG = T_ZTCPC01-CHARG BINARY SEARCH.
IF SY-SUBRC = 0.
T_ZTCPC01-CLABM = T_ZTCPC01-CLABM + WA_ZTCPC01-CLABM.
T_ZTCPC01-LAEDA = T_ZTCPC01-ERSDA.
T_ZTCPC01-AENAM = T_ZTCPC01-ERNAM.
T_ZTCPC01-ERSDA = WA_ZTCPC01-ERSDA.
T_ZTCPC01-ERNAM = WA_ZTCPC01-ERNAM.
MODIFY T_ZTCPC01_TOT FROM T_ZTCPC01 TRANSPORTING CLABM LAEDA ERSDA ERNAM AENAM.
ENDIF.
SY-TABIX = L_LOOP.
ENDLOOP.
ENDIF.
MODIFY ZTCPC01 FROM TABLE T_ZTCPC01_TOT.
ENDIF. "End of MF60 process
IF T_MKPF-TCODE2 = 'MBST'.
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
T_ZTCPC01-AUFNR = T_MKPF-BKTXT.
T_ZTCPC01-MATNR = T_MSEG-MATNR.
T_ZTCPC01-WERKS = T_MSEG-WERKS.
T_ZTCPC01-LGORT = T_MSEG-LGORT. "Goods issue from location
T_ZTCPC01-CHARG = T_MSEG-CHARG.
T_ZTCPC01-SOBKZ = T_MSEG-SOBKZ.
T_ZTCPC01-LIFNR = T_MSEG-LIFNR.
T_ZTCPC01-PS_PSP_PNR = T_MSEG-PS_PSP_PNR.
T_ZTCPC01-CLABM = T_MSEG-MENGE.
T_ZTCPC01-MEINS = T_MSEG-MEINS.
T_ZTCPC01-LAEDA = T_MKPF-BUDAT.
T_ZTCPC01-AENAM = T_MKPF-USNAM.
COLLECT T_ZTCPC01 INTO T_ZTCPC01_TOT.
L_SMBLN = T_MSEG-SMBLN.
ENDLOOP.
SELECT SINGLE AUFNR INTO L_AUFNR FROM ZTCPC02 WHERE ZTCPC02~MBLNR = L_SMBLN.
IF SY-SUBRC = 0.
SELECT * INTO TABLE T_ZTCPC01_OLD FROM ZTCPC01
WHERE ZTCPC01~AUFNR = L_AUFNR. "T_MKPF-XABLN.
IF NOT T_ZTCPC01_OLD[] IS INITIAL.
SORT T_ZTCPC01_OLD BY AUFNR MATNR WERKS LGORT CHARG.
LOOP AT T_ZTCPC01_TOT INTO T_ZTCPC01.
L_LOOP = SY-TABIX.
READ TABLE T_ZTCPC01_OLD INTO WA_ZTCPC01 WITH KEY AUFNR = T_ZTCPC01-AUFNR
MATNR = T_ZTCPC01-MATNR
WERKS = T_ZTCPC01-WERKS
LGORT = T_ZTCPC01-LGORT
CHARG = T_ZTCPC01-CHARG BINARY SEARCH.
IF SY-SUBRC = 0.
T_ZTCPC01-CLABM = WA_ZTCPC01-CLABM - T_ZTCPC01-CLABM.
T_ZTCPC01-ERSDA = WA_ZTCPC01-ERSDA.
T_ZTCPC01-ERNAM = WA_ZTCPC01-ERNAM.
MODIFY T_ZTCPC01_TOT FROM T_ZTCPC01.
ENDIF.
SY-TABIX = L_LOOP.
ENDLOOP.
ENDIF.
MODIFY ZTCPC01 FROM TABLE T_ZTCPC01_TOT .
* UPDATE ZTCPC02
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
UPDATE ZTCPC02 SET STATUS = 'N' WHERE ZTCPC02~MBLNR = T_MSEG-SMBLN
AND ZTCPC02~ZEILE = T_MSEG-SMBLP.
ENDLOOP.
ENDIF.
ENDIF.
endmethod.
DATA: T_MKPF LIKE LINE OF XMKPF.
READ TABLE XMKPF INTO T_MKPF INDEX 1.
DATA: T_ZTCPC01 TYPE ZTCPC01,
T_ZTCPC01_TOT TYPE TABLE OF ZTCPC01,
T_ZTCPC01_OLD TYPE TABLE OF ZTCPC01,
WA_ZTCPC01 TYPE ZTCPC01,
T_MSEG LIKE LINE OF XMSEG,
T_ZTCPC02 TYPE ZTCPC02.
DATA: L_LOOP LIKE SY-TABIX.
DATA: L_US TYPE RMPU_USER_SELCRIT,
L_RA_FAUFNR TYPE RMPU_RA_FAUFNR,
L_RA_FAUFNR_TMP LIKE LINE OF L_RA_FAUFNR,
L_AUFNR TYPE AFKO-AUFNR,
L_MBLNR TYPE MKPF-MBLNR,
L_SMBLN TYPE MSEG-SMBLN.
* IMPORT US TO L_US FROM MEMORY ID RMPU_MEM_ID_USERSEL.
IF T_MKPF-TCODE2 = 'MF60'.
REFRESH:T_ZTCPC01_TOT,T_ZTCPC01_OLD.
READ TABLE XMKPF INTO T_MKPF INDEX 1.
L_AUFNR = T_MKPF-BKTXT.
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
T_ZTCPC01-AUFNR = T_MKPF-BKTXT.
T_ZTCPC01-MATNR = T_MSEG-MATNR.
T_ZTCPC01-WERKS = T_MSEG-WERKS.
T_ZTCPC01-LGORT = T_MSEG-LGORT. "Goods issue from location
T_ZTCPC01-CHARG = T_MSEG-CHARG.
T_ZTCPC01-SOBKZ = T_MSEG-SOBKZ.
T_ZTCPC01-LIFNR = T_MSEG-LIFNR.
T_ZTCPC01-PS_PSP_PNR = T_MSEG-PS_PSP_PNR.
T_ZTCPC01-CLABM = T_MSEG-MENGE.
T_ZTCPC01-MEINS = T_MSEG-MEINS.
T_ZTCPC01-ERSDA = T_MKPF-BUDAT.
T_ZTCPC01-ERNAM = T_MKPF-USNAM.
COLLECT T_ZTCPC01 INTO T_ZTCPC01_TOT.
MOVE-CORRESPONDING T_ZTCPC01 TO T_ZTCPC02.
T_ZTCPC02-MBLNR = T_MSEG-MBLNR.
T_ZTCPC02-MJAHR = T_MSEG-MJAHR.
T_ZTCPC02-ZEILE = T_MSEG-ZEILE.
T_ZTCPC02-LGORT = T_MSEG-LGORT.
T_ZTCPC02-UMLGO = T_MSEG-UMLGO.
T_ZTCPC02-USNAM = T_MKPF-USNAM.
T_ZTCPC02-BUDAT = T_MKPF-BUDAT.
T_ZTCPC02-CPUTM = T_MKPF-CPUTM.
T_ZTCPC02-RSNUM = T_MSEG-RSNUM.
T_ZTCPC02-RSPOS = T_MSEG-RSPOS.
INSERT ZTCPC02 FROM T_ZTCPC02. "Detail table of transacion log
* INSERT ZTCPC03 FROM T_ZTCPC02.
ENDLOOP.
SELECT * INTO TABLE T_ZTCPC01_OLD FROM ZTCPC01
WHERE ZTCPC01~AUFNR = L_AUFNR. "T_MKPF-XABLN.
IF NOT T_ZTCPC01_OLD[] IS INITIAL.
SORT T_ZTCPC01_OLD BY AUFNR MATNR WERKS LGORT CHARG.
LOOP AT T_ZTCPC01_TOT INTO T_ZTCPC01.
L_LOOP = SY-TABIX.
READ TABLE T_ZTCPC01_OLD INTO WA_ZTCPC01 WITH KEY AUFNR = T_ZTCPC01-AUFNR
MATNR = T_ZTCPC01-MATNR
WERKS = T_ZTCPC01-WERKS
LGORT = T_ZTCPC01-LGORT
CHARG = T_ZTCPC01-CHARG BINARY SEARCH.
IF SY-SUBRC = 0.
T_ZTCPC01-CLABM = T_ZTCPC01-CLABM + WA_ZTCPC01-CLABM.
T_ZTCPC01-LAEDA = T_ZTCPC01-ERSDA.
T_ZTCPC01-AENAM = T_ZTCPC01-ERNAM.
T_ZTCPC01-ERSDA = WA_ZTCPC01-ERSDA.
T_ZTCPC01-ERNAM = WA_ZTCPC01-ERNAM.
MODIFY T_ZTCPC01_TOT FROM T_ZTCPC01 TRANSPORTING CLABM LAEDA ERSDA ERNAM AENAM.
ENDIF.
SY-TABIX = L_LOOP.
ENDLOOP.
ENDIF.
MODIFY ZTCPC01 FROM TABLE T_ZTCPC01_TOT.
ENDIF. "End of MF60 process
IF T_MKPF-TCODE2 = 'MBST'.
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
T_ZTCPC01-AUFNR = T_MKPF-BKTXT.
T_ZTCPC01-MATNR = T_MSEG-MATNR.
T_ZTCPC01-WERKS = T_MSEG-WERKS.
T_ZTCPC01-LGORT = T_MSEG-LGORT. "Goods issue from location
T_ZTCPC01-CHARG = T_MSEG-CHARG.
T_ZTCPC01-SOBKZ = T_MSEG-SOBKZ.
T_ZTCPC01-LIFNR = T_MSEG-LIFNR.
T_ZTCPC01-PS_PSP_PNR = T_MSEG-PS_PSP_PNR.
T_ZTCPC01-CLABM = T_MSEG-MENGE.
T_ZTCPC01-MEINS = T_MSEG-MEINS.
T_ZTCPC01-LAEDA = T_MKPF-BUDAT.
T_ZTCPC01-AENAM = T_MKPF-USNAM.
COLLECT T_ZTCPC01 INTO T_ZTCPC01_TOT.
L_SMBLN = T_MSEG-SMBLN.
ENDLOOP.
SELECT SINGLE AUFNR INTO L_AUFNR FROM ZTCPC02 WHERE ZTCPC02~MBLNR = L_SMBLN.
IF SY-SUBRC = 0.
SELECT * INTO TABLE T_ZTCPC01_OLD FROM ZTCPC01
WHERE ZTCPC01~AUFNR = L_AUFNR. "T_MKPF-XABLN.
IF NOT T_ZTCPC01_OLD[] IS INITIAL.
SORT T_ZTCPC01_OLD BY AUFNR MATNR WERKS LGORT CHARG.
LOOP AT T_ZTCPC01_TOT INTO T_ZTCPC01.
L_LOOP = SY-TABIX.
READ TABLE T_ZTCPC01_OLD INTO WA_ZTCPC01 WITH KEY AUFNR = T_ZTCPC01-AUFNR
MATNR = T_ZTCPC01-MATNR
WERKS = T_ZTCPC01-WERKS
LGORT = T_ZTCPC01-LGORT
CHARG = T_ZTCPC01-CHARG BINARY SEARCH.
IF SY-SUBRC = 0.
T_ZTCPC01-CLABM = WA_ZTCPC01-CLABM - T_ZTCPC01-CLABM.
T_ZTCPC01-ERSDA = WA_ZTCPC01-ERSDA.
T_ZTCPC01-ERNAM = WA_ZTCPC01-ERNAM.
MODIFY T_ZTCPC01_TOT FROM T_ZTCPC01.
ENDIF.
SY-TABIX = L_LOOP.
ENDLOOP.
ENDIF.
MODIFY ZTCPC01 FROM TABLE T_ZTCPC01_TOT .
* UPDATE ZTCPC02
LOOP AT XMSEG INTO T_MSEG WHERE XAUTO = ''.
UPDATE ZTCPC02 SET STATUS = 'N' WHERE ZTCPC02~MBLNR = T_MSEG-SMBLN
AND ZTCPC02~ZEILE = T_MSEG-SMBLP.
ENDLOOP.
ENDIF.
ENDIF.
endmethod.