Sei sulla pagina 1di 15

REPORT ZSTKSTMT.

TYPE-POOLS: SLIS.
TABLES: MSEG, MAKT, ZMM_BUSINESS, ZMAT_TYPE, T030, T156C, T156M.
TYPES: BEGIN OF TY_MSEG,
WERKS TYPE MSEG-WERKS,
MATNR TYPE MSEG-MATNR,
LGORT TYPE MSEG-LGORT,
SHKZG TYPE MSEG-SHKZG,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
OBVAL TYPE MSEG-DMBTR,
OBQTY TYPE MSEG-MENGE,
RCTVAL TYPE MSEG-DMBTR,
RCTQTY TYPE MSEG-MENGE,
ISSVAL TYPE MSEG-DMBTR,
ISSQTY TYPE MSEG-MENGE,
CBVAL TYPE MSEG-DMBTR,
CBQTY TYPE MSEG-MENGE,
REMKS TYPE MSEG-MATNR,
LBKUM TYPE MSEG-LBKUM,
BUSTM TYPE MSEG-BUSTM,
BUSTW TYPE MSEG-BUSTW,
BUDAT_MKPF TYPE MSEG-BUDAT_MKPF,
END OF TY_MSEG.

TYPES: BEGIN OF TY_MSEG3,


WERKS TYPE MSEG-WERKS,
MATNR TYPE MSEG-MATNR,
LGORT TYPE MSEG-LGORT,
SHKZG TYPE MSEG-SHKZG,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
OBVAL TYPE MSEG-DMBTR,
OBQTY TYPE MSEG-MENGE,
RCTVAL TYPE MSEG-DMBTR,
RCTQTY TYPE MSEG-MENGE,
ISSVAL TYPE MSEG-DMBTR,
ISSQTY TYPE MSEG-MENGE,
CBVAL TYPE MSEG-DMBTR,
CBQTY TYPE MSEG-MENGE,
REMKS TYPE MSEG-MATNR,
LBKUM TYPE MSEG-LBKUM,
BUSTM TYPE MSEG-BUSTM,
BUSTW TYPE MSEG-BUSTW,
BUDAT_MKPF TYPE MSEG-BUDAT_MKPF,
END OF TY_MSEG3.

TYPES: BEGIN OF TY_MAKT,


MATNR TYPE MAKT-MATNR,
MAKTX TYPE MAKT-MAKTX,
END OF TY_MAKT.

TYPES: BEGIN OF TY_MARC,


MATNR TYPE MARC-MATNR,
WERKS TYPE MARC-WERKS,
PRCTR TYPE MARC-PRCTR,
END OF TY_MARC.

TYPES: BEGIN OF TY_ZMMBUS,


WERKS TYPE ZMM_BUSINESS-WERKS,
LGORT TYPE ZMM_BUSINESS-LGORT,
PRCTR TYPE ZMM_BUSINESS-PRCTR,
END OF TY_ZMMBUS.

TYPES: BEGIN OF TY_T156C,


LBBSA TYPE T156C-LBBSA,
XUMLMC TYPE T156C-XUMLMC,
XTRAME TYPE T156C-XTRAME,
END OF TY_T156C.

TYPES: BEGIN OF TY_T156M,


BUSTM TYPE T156M-BUSTM,
LBBSA TYPE T156M-LBBSA,
KBBSA TYPE T156M-KBBSA,
END OF TY_T156M.

TYPES: BEGIN OF TY_MSEG5,


WERKS TYPE MSEG-WERKS,
MATNR TYPE MSEG-MATNR,
LGORT TYPE MSEG-LGORT,
SHKZG TYPE MSEG-SHKZG,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
OBVAL TYPE MSEG-DMBTR,
OBQTY TYPE MSEG-MENGE,
RCTVAL TYPE MSEG-DMBTR,
RCTQTY TYPE MSEG-MENGE,
ISSVAL TYPE MSEG-DMBTR,
ISSQTY TYPE MSEG-MENGE,
CBVAL TYPE MSEG-DMBTR,
CBQTY TYPE MSEG-MENGE,
REMKS TYPE MSEG-MATNR,
LBKUM TYPE MSEG-LBKUM,
BUSTM TYPE MSEG-BUSTM,
BUSTW TYPE MSEG-BUSTW,
BUDAT_MKPF TYPE MSEG-BUDAT_MKPF,
END OF TY_MSEG5.

TYPES: BEGIN OF TY_FINAL,


WERKS TYPE MSEG-WERKS,
MATNR TYPE MSEG-MATNR,
LGORT TYPE MSEG-LGORT,
MAKTX TYPE MAKT-MAKTX,
SHKZG TYPE MSEG-SHKZG,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
OBQTY TYPE MSEG-MENGE,
OBVAL TYPE MSEG-DMBTR,
RCTQTY TYPE MSEG-MENGE,
RCTVAL TYPE MSEG-DMBTR,
ISSQTY TYPE MSEG-MENGE,
ISSVAL TYPE MSEG-DMBTR,
CBQTY TYPE MSEG-MENGE,
CBVAL TYPE MSEG-DMBTR,
PRCTR TYPE ZMM_BUSINESS-PRCTR,
MATTYPE TYPE ZMAT_TYPE-MATTYPE,
REMKS TYPE MSEG-MATNR,
LBKUM TYPE MSEG-LBKUM,
BUSTM TYPE MSEG-BUSTM,
BUSTW TYPE MSEG-BUSTW,
BUDAT_MKPF TYPE MSEG-BUDAT_MKPF,
END OF TY_FINAL.

DATA: WA_MSEG TYPE TY_MSEG,


WA_MSEG3 TYPE TY_MSEG3,
WA_TEMP TYPE TY_MSEG,
WA_MAKT TYPE TY_MAKT,
WA_MARC TYPE TY_MARC,
WA_ZMMBUS TYPE TY_ZMMBUS,
WA_T156C TYPE TY_T156C,
WA_T156M TYPE TY_T156M,
WA_MSEG5 TYPE TY_MSEG5,
WA_FINAL TYPE TY_FINAL,
IT_MSEG TYPE STANDARD TABLE OF TY_MSEG,
IT_MSEG3 TYPE STANDARD TABLE OF TY_MSEG3,
IT_TEMP TYPE STANDARD TABLE OF TY_MSEG,
IT_MAKT TYPE STANDARD TABLE OF TY_MAKT,
IT_MARC TYPE STANDARD TABLE OF TY_MARC,
IT_ZMMBUS TYPE STANDARD TABLE OF TY_ZMMBUS,
IT_T156C TYPE STANDARD TABLE OF TY_T156C,
IT_T156M TYPE STANDARD TABLE OF TY_T156M,
IT_MSEG5 TYPE STANDARD TABLE OF TY_MSEG5,
IT_FINAL TYPE STANDARD TABLE OF TY_FINAL,
L_PROG TYPE SY-REPID,

IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,


WA_FIELDLAYOUT TYPE SLIS_LAYOUT_ALV,
WA_FIELDCAT LIKE LINE OF IT_FIELDCAT.

CLEAR: WA_MSEG, WA_MSEG3, WA_TEMP, WA_MAKT, WA_MARC, WA_ZMMBUS, WA_T156C, WA_T156M,


WA_MSEG5, WA_FINAL.
REFRESH: IT_MSEG, IT_MSEG3, IT_TEMP, IT_MAKT, IT_MARC, IT_ZMMBUS, IT_T156C,
IT_T156M, IT_MSEG5, IT_FINAL.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS:
S_MCODE FOR MSEG-MATNR OBLIGATORY,
S_WERKS FOR MSEG-WERKS OBLIGATORY,
S_DOCDT FOR MSEG-BUDAT_MKPF.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.


PARAMETERS : CHK1 AS CHECKBOX.
PARAMETERS:
R1 RADIOBUTTON GROUP RG1,
R2 RADIOBUTTON GROUP RG1.
SELECTION-SCREEN END OF BLOCK B2.

INITIALIZATION.
CHK1 = 'X'.

AT SELECTION-SCREEN. .
PERFORM VALIDATE_WERKS.
PERFORM VALIDATE_MATNR.
IF S_MCODE-LOW = ' '.
MESSAGE I000(ZKMESSAGE).
ENDIF.

START-OF-SELECTION.
PERFORM GET_MSEGDATA.
PERFORM ADD_LINES.
PERFORM GET_MAKTDATA.
PERFORM GET_MARCDATA.
PERFORM GET_PRCTRDATA.
PERFORM GET_T156DATA.
PERFORM SET_FINLDATA.
PERFORM SET_FCAT.
PERFORM DISPLAY_ALV.
END-OF-SELECTION.

* Validating input parameters - plant


FORM VALIDATE_WERKS.
DATA : L_WERKS TYPE WERKS_D.
SELECT SINGLE WERKS FROM T001W INTO L_WERKS WHERE WERKS IN S_WERKS.
IF SY-SUBRC <> 0.
MESSAGE 'Invalid Plant' TYPE 'E'.
ENDIF.
ENDFORM.
* End of Validating input parameters - Plant

* Validating input parameters - Material


FORM VALIDATE_MATNR.
DATA : BEGIN OF L_MATNR OCCURS 0,
MATNR TYPE MATNR,
END OF L_MATNR.
SELECT MATNR FROM MARA INTO TABLE L_MATNR WHERE MATNR IN S_MCODE.
IF SY-SUBRC <> 0.
MESSAGE 'Invalid Material' TYPE 'E'.
ENDIF.
ENDFORM.
* End of Validating input parameters - Material

FORM GET_MSEGDATA.
* Querying data from MSEG table
SELECT
WERKS
MATNR
LGORT
SHKZG
DMBTR
MENGE
DMBTR AS OBVAL
MENGE AS OBQTY
DMBTR AS RCTVAL
MENGE AS RCTQTY
DMBTR AS ISSVAL
MENGE AS ISSQTY
DMBTR AS CBVAL
MENGE AS CBQTY
WERKS AS REMKS
LBKUM
BUSTM
BUSTW
BUDAT_MKPF
INTO TABLE IT_MSEG FROM MSEG
WHERE MATNR IN S_MCODE AND WERKS IN S_WERKS AND BUDAT_MKPF LE S_DOCDT-HIGH
AND SOBKZ <> 'P'
AND SOBKZ <> 'Q'
AND NOT ( BUSTM = 'MA01' AND BUSTW = '')
AND NOT ( BUSTM = 'MA03' AND BUSTW = '')
AND NOT ( BUSTM = 'MA04' AND BUSTW = '')
AND NOT ( BUSTM = 'MA07' AND BUSTW = '')
AND NOT ( BUSTM = 'MAO4' AND BUSTW = '')
AND NOT ( BUSTM = 'MAA1' AND BUSTW = '')
AND NOT ( BUSTM = 'MAA7' AND BUSTW = '')
AND NOT ( BUSTM = 'MAR0' AND BUSTW = '')
AND NOT ( BUSTM = 'MEU1' AND BUSTW = '')
AND NOT ( BUSTM = 'MEU2' AND BUSTW = '')
AND NOT ( BUSTM = 'MQF7' AND BUSTW = '')
AND NOT ( BUSTM = 'MSQ7' AND BUSTW = '')
AND NOT ( BUSTM = 'ME01' AND BUSTW = 'WE06')
AND NOT ( BUSTM = 'ME02' AND BUSTW = 'WE06')
AND NOT ( BWART IN ('413', '414') AND SOBKZ = 'E' AND XAUTO = 'X' AND
FKBER <> '')
AND NOT ( BWART IN ('453', '454', '457', '458') AND XAUTO = 'X' AND
FKBER <> '')
AND NOT ( BWART IN ('651', '652') AND KZBEW = 'L' AND KZVBR IN ('E',
'V') )
AND NOT ( BWART IN ('413', '414') AND KZBWS <> 'M' AND KDAUF <> '' AND
MAT_KDAUF <> '')
AND NOT ( BWART IN ('101', '102') AND KZBEW = 'F' AND KZVBR = 'E')
AND NOT ( BWART IN ('311', '312') AND KZBWS <> 'M' AND SOBKZ = 'E')
ORDER BY WERKS MATNR.
* End of Querying data from MSEG table

IF CHK1 = 'X'.
SELECT
WERKS
MATNR
LGORT
SHKZG
SALK3 AS DMBTR
MENGE AS MENGE
SALK3 AS OBVAL
MENGE AS OBQTY
SALK3 AS RCTVAL
MENGE AS RCTQTY
SALK3 AS ISSVAL
MENGE AS ISSQTY
SALK3 AS CBVAL
MENGE AS CBQTY
WERKS AS REMKS
LBKUM
BUSTM
BUSTW
BUDAT_MKPF
INTO TABLE IT_MSEG3 FROM MSEG
WHERE MATNR IN S_MCODE AND WERKS IN S_WERKS AND BUDAT_MKPF LE S_DOCDT-HIGH
AND (
SOBKZ IN ('P', 'Q')
OR ( BUSTM = 'MA01' AND BUSTW = '')
OR ( BUSTM = 'MA03' AND BUSTW = '')
OR ( BUSTM = 'MA04' AND BUSTW = '')
OR ( BUSTM = 'MA07' AND BUSTW = '')
OR ( BUSTM = 'MAO4' AND BUSTW = '')
OR ( BUSTM = 'MAA7' AND BUSTW = '')
OR ( BUSTM = 'MAR0' AND BUSTW = '')
OR ( BUSTM = 'MEU1' AND BUSTW = '')
OR ( BUSTM = 'MEU2' AND BUSTW = '')
OR ( BUSTM = 'MQF7' AND BUSTW = '')
OR ( BUSTM = 'MSQ7' AND BUSTW = '')
OR ( BUSTM = 'ME01' AND BUSTW = 'WE06')
OR ( BUSTM = 'ME02' AND BUSTW = 'WE06')
OR ( BWART IN ('453', '454', '457', '458') AND XAUTO = 'X' AND FKBER <>
'')
OR ( BWART IN ('651', '652') AND KZBEW = 'L' AND KZVBR IN ('E', 'V') )
OR ( BWART IN ('413', '414') AND KZBWS <> 'M' AND KDAUF <> '' AND
MAT_KDAUF <> '')
OR ( BWART IN ('311', '312') AND KZBWS <> 'M' AND SOBKZ = 'E') )
ORDER BY WERKS MATNR.
ENDIF.

WA_MSEG-OBQTY = 0.
WA_MSEG-OBVAL = 0.
WA_MSEG-RCTQTY = 0.
WA_MSEG-RCTVAL = 0.
WA_MSEG-ISSQTY = 0.
WA_MSEG-ISSVAL = 0.
WA_MSEG-CBQTY = 0.
WA_MSEG-CBVAL = 0.
WA_MSEG-REMKS = 'MSEG'.
MODIFY IT_MSEG FROM WA_MSEG TRANSPORTING OBQTY OBVAL RCTQTY RCTVAL ISSQTY
ISSVAL CBQTY CBVAL REMKS WHERE MATNR IS NOT INITIAL.

WA_MSEG3-OBQTY = 0.
WA_MSEG3-OBVAL = 0.
WA_MSEG3-RCTQTY = 0.
WA_MSEG3-RCTVAL = 0.
WA_MSEG3-ISSQTY = 0.
WA_MSEG3-ISSVAL = 0.
WA_MSEG3-CBQTY = 0.
WA_MSEG3-CBVAL = 0.
WA_MSEG3-REMKS = 'MSG3'.
MODIFY IT_MSEG3 FROM WA_MSEG3 TRANSPORTING OBQTY OBVAL RCTQTY RCTVAL ISSQTY
ISSVAL CBQTY CBVAL REMKS WHERE MATNR IS NOT INITIAL.

ENDFORM.

FORM ADD_LINES.
* Adding (All Qtys) records to IT_MSEG, (All Qtys) and sorting the same
IF CHK1 = 'X'.
APPEND LINES OF IT_MSEG3 TO IT_MSEG.
ENDIF.
IF R1 = 'X'.
SORT IT_MSEG BY WERKS MATNR LGORT.
ELSE.
SORT IT_MSEG BY WERKS MATNR.
ENDIF.
IF IT_MSEG[] IS INITIAL.
MESSAGE 'No data found' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* End of Adding (All Qtys) records to IT_MSEG, (All Qtys) and sorting the same
ENDFORM.

FORM GET_MAKTDATA.
* Picking Material description from MAKT table
IF IT_MSEG[] IS NOT INITIAL.
DATA LT_MSEG TYPE STANDARD TABLE OF TY_MSEG.
LT_MSEG = IT_MSEG.
SORT LT_MSEG BY MATNR.
DELETE ADJACENT DUPLICATES FROM LT_MSEG COMPARING MATNR.

SELECT MATNR
MAKTX
FROM MAKT INTO TABLE IT_MAKT
FOR ALL ENTRIES IN LT_MSEG
WHERE MATNR = LT_MSEG-MATNR
AND SPRAS = 'EN'.
ENDIF.
* End of Picking Material description from MAKT table
ENDFORM.

FORM GET_MARCDATA.
* Picking profit center from material master
IF IT_MSEG[] IS NOT INITIAL.
DATA LT_MSEG TYPE STANDARD TABLE OF TY_MSEG.
LT_MSEG = IT_MSEG.
SORT LT_MSEG BY MATNR.
DELETE ADJACENT DUPLICATES FROM LT_MSEG COMPARING MATNR.

SELECT MATNR
WERKS
PRCTR
FROM MARC INTO TABLE IT_MARC
FOR ALL ENTRIES IN LT_MSEG
WHERE MATNR = LT_MSEG-MATNR.
ENDIF.
* End of Picking profit center from material master
ENDFORM.

FORM GET_PRCTRDATA.
* Picking profit center from "plant/storage location --> profit center" table
(ZMM_BUSINESS)
IF IT_MSEG[] IS NOT INITIAL.
SELECT WERKS
LGORT
PRCTR
FROM ZMM_BUSINESS INTO TABLE IT_ZMMBUS
WHERE WERKS IN S_WERKS.
ENDIF.
* End of Picking profit center from "plant/storage location --> profit center"
table (ZMM_BUSINESS)
ENDFORM.

FORM GET_T156DATA.
IF CHK1 = 'X'.
IF IT_MSEG[] IS NOT INITIAL.
SELECT LBBSA
XUMLMC
XTRAME
INTO TABLE IT_T156C
FROM T156C
WHERE XUMLMC = 'X' OR XTRAME = 'X'.
ENDIF.

IF LINES( IT_T156C ) > 0.


SELECT
BUSTM
LBBSA
KBBSA
FROM T156M
INTO TABLE IT_T156M
FOR ALL ENTRIES IN IT_T156C
WHERE LBBSA = IT_T156C-LBBSA.
ENDIF.

IF LINES( IT_T156C ) > 0.


SELECT
BUSTM
LBBSA
KBBSA
FROM T156M
APPENDING TABLE IT_T156M
FOR ALL ENTRIES IN IT_T156C
WHERE KBBSA = IT_T156C-LBBSA.

SELECT
WERKS
MATNR
LGORT
SHKZG
DMBTR
MENGE
DMBTR AS OBVAL
MENGE AS OBQTY
DMBTR AS RCTVAL
MENGE AS RCTQTY
DMBTR AS ISSVAL
MENGE AS ISSQTY
DMBTR AS CBVAL
MENGE AS CBQTY
WERKS AS REMKS
LBKUM
BUSTM
BUSTW
BUDAT_MKPF
INTO TABLE IT_MSEG5 FROM MSEG
FOR ALL ENTRIES IN IT_T156M WHERE BUSTM = IT_T156M-BUSTM
AND LGORT = ''
AND MATNR IN S_MCODE AND WERKS IN S_WERKS AND BUDAT_MKPF LE S_DOCDT-HIGH.

LOOP AT IT_MSEG5 INTO WA_MSEG5.


WA_MSEG-WERKS = WA_MSEG5-WERKS.
WA_MSEG-MATNR = WA_MSEG5-MATNR.
WA_MSEG-LGORT = ''.
WA_MSEG-SHKZG = WA_MSEG5-SHKZG.
WA_MSEG-DMBTR = WA_MSEG5-DMBTR.
WA_MSEG-MENGE = WA_MSEG5-MENGE.
IF WA_MSEG5-SHKZG = 'H'.
WA_MSEG-SHKZG = 'S'.
IF WA_MSEG5-BUDAT_MKPF LT S_DOCDT-LOW.
WA_MSEG-OBVAL = WA_MSEG5-DMBTR.
WA_MSEG-OBQTY = WA_MSEG5-MENGE.
WA_MSEG-RCTVAL = 0.
WA_MSEG-RCTQTY = 0.
WA_MSEG-ISSVAL = 0.
WA_MSEG-ISSQTY = 0.
ELSE.
WA_MSEG-OBVAL = 0.
WA_MSEG-OBQTY = 0.
WA_MSEG-RCTVAL = WA_MSEG5-DMBTR.
WA_MSEG-RCTQTY = WA_MSEG5-MENGE.
WA_MSEG-ISSVAL = 0.
WA_MSEG-ISSQTY = 0.
ENDIF.
ELSE.
WA_MSEG-SHKZG = 'H'.
IF WA_MSEG5-BUDAT_MKPF LT S_DOCDT-LOW.
WA_MSEG-OBVAL = WA_MSEG5-DMBTR * -1.
WA_MSEG-OBQTY = WA_MSEG5-MENGE * -1.
WA_MSEG-RCTVAL = 0.
WA_MSEG-RCTQTY = 0.
WA_MSEG-ISSVAL = 0.
WA_MSEG-ISSQTY = 0.
ELSE.
WA_MSEG-OBVAL = 0.
WA_MSEG-OBQTY = 0.
WA_MSEG-RCTVAL = 0.
WA_MSEG-RCTQTY = 0.
WA_MSEG-ISSVAL = WA_MSEG5-DMBTR.
WA_MSEG-ISSQTY = WA_MSEG5-MENGE.
ENDIF.
ENDIF.
WA_MSEG-CBVAL = 0.
WA_MSEG-CBQTY = 0.
WA_MSEG-REMKS = 'MSG5'.
WA_MSEG-LBKUM = 0.
WA_MSEG-BUDAT_MKPF = WA_MSEG5-BUDAT_MKPF.
APPEND WA_MSEG TO IT_MSEG.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.

FORM SET_FINLDATA.
* Creating additional variables
DATA V_MATNR TYPE MATNR.
DATA V_MATNR2 TYPE MATNR.
DATA V_RCTQTY TYPE MENGE_D.
DATA V_ISSQTY TYPE MENGE_D.
DATA V_RCTVAL TYPE DMBTR.
DATA V_ISSVAL TYPE DMBTR.
DATA V_CUMQTY TYPE MENGE_D.
DATA V_CUMVAL TYPE DMBTR.
DATA V_RATE TYPE DMBTR.
DATA V_OBQTY TYPE MENGE_D.
DATA V_OBVAL TYPE DMBTR.
DATA V_CBQTY TYPE MENGE_D.
DATA V_CBVAL TYPE DMBTR.
DATA L_OBQTY TYPE MENGE_D.
DATA L_OBVAL TYPE DMBTR.
DATA L_RCTQTY TYPE MENGE_D.
DATA L_RCTVAL TYPE DMBTR.
DATA L_ISSQTY TYPE MENGE_D.
DATA L_ISSVAL TYPE DMBTR.
DATA L_CBQTY TYPE MENGE_D.
DATA L_CBVAL TYPE DMBTR.
DATA DIFFQTY TYPE MENGE_D.
DATA DIFFVAL TYPE DMBTR.
* End of Creating additional variables
IF R1 = 'X'.
SORT IT_MSEG BY WERKS MATNR LGORT.
ELSE.
SORT IT_MSEG BY WERKS MATNR.
ENDIF.

* Adding data from IT_MSEG temp table to WA_MSEG and WA_FINAL work areas
LOOP AT IT_MSEG INTO WA_TEMP.
WA_MSEG = WA_TEMP.

WA_FINAL-MATNR = WA_MSEG-MATNR.
WA_FINAL-MAKTX = WA_MAKT-MAKTX.
WA_FINAL-WERKS = WA_MSEG-WERKS.
WA_FINAL-LGORT = WA_MSEG-LGORT.
WA_FINAL-SHKZG = WA_MSEG-SHKZG.
WA_FINAL-DMBTR = WA_MSEG-DMBTR.
WA_FINAL-MENGE = WA_MSEG-MENGE.
WA_FINAL-REMKS = WA_MSEG-REMKS.

* Resetting cumulative qty & val for new material


CLEAR: V_OBQTY, V_OBVAL, V_RCTQTY, V_RCTVAL, V_ISSQTY, V_ISSVAL, V_CBQTY,
V_CBVAL.
* End of Resetting cu`mulative qty & val for new material

IF WA_MSEG-BUDAT_MKPF LT S_DOCDT-LOW.
IF WA_MSEG-REMKS = 'MSG3'.
IF WA_MSEG-LBKUM GT 0.
WA_MSEG-DMBTR = ( WA_MSEG-DMBTR / WA_MSEG-LBKUM ) * WA_MSEG-MENGE.
ELSE.
WA_MSEG-DMBTR = 0.
ENDIF.
ENDIF.
IF WA_MSEG-SHKZG = 'S'.
V_OBQTY = WA_MSEG-MENGE. "V_CUMQTY.
V_OBVAL = WA_MSEG-DMBTR. "V_CUMVAL.
ELSE.
V_OBQTY = WA_MSEG-MENGE * -1.
V_OBVAL = WA_MSEG-DMBTR * -1.
ENDIF.
ELSE.
IF WA_MSEG-REMKS = 'MSG3'.
IF WA_MSEG-LBKUM GT 0.
WA_MSEG-DMBTR = ( WA_MSEG-DMBTR / WA_MSEG-LBKUM ) * WA_MSEG-MENGE.
ELSE.
WA_MSEG-DMBTR = 0.
ENDIF.
ENDIF.
V_OBQTY = 0.
V_OBVAL = 0.
IF WA_MSEG-SHKZG = 'S'.
V_RCTQTY = WA_MSEG-MENGE. "V_CUMQTY.
V_RCTVAL = WA_MSEG-DMBTR. "V_CUMVAL.
V_ISSQTY = 0.
V_ISSVAL = 0.
ELSE.
V_RCTQTY = 0.
V_RCTVAL = 0.
V_ISSQTY = WA_MSEG-MENGE.
V_ISSVAL = WA_MSEG-DMBTR.
ENDIF.
ENDIF.

L_OBQTY = L_OBQTY + V_OBQTY.


L_OBVAL = L_OBVAL + V_OBVAL.
L_RCTQTY = L_RCTQTY + V_RCTQTY.
L_RCTVAL = L_RCTVAL + V_RCTVAL.
L_ISSQTY = L_ISSQTY + V_ISSQTY.
L_ISSVAL = L_ISSVAL + V_ISSVAL.

V_CBQTY = V_OBQTY + V_RCTQTY - V_ISSQTY.


V_CBVAL = V_OBVAL + V_RCTVAL - V_ISSVAL.

L_CBQTY = L_CBQTY + V_CBQTY.


L_CBVAL = L_CBVAL + V_CBVAL.
V_MATNR = WA_MSEG-MATNR.

* Updating material description to WA_FINAL work area


CLEAR WA_MAKT.
READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MSEG-MATNR.
IF SY-SUBRC = 0.
WA_FINAL-MAKTX = WA_MAKT-MAKTX.
ENDIF.
* End of Updating material description to WA_FINAL work area

* Updating Profit Center to WA_FINAL work area


CLEAR WA_MARC.
READ TABLE IT_MARC INTO WA_MARC WITH KEY MATNR = WA_MSEG-MATNR WERKS =
WA_MSEG-WERKS.
IF SY-SUBRC = 0.
WA_FINAL-PRCTR = WA_MARC-PRCTR.
ELSE.
WA_FINAL-PRCTR = ''.
ENDIF.

CLEAR WA_ZMMBUS.
READ TABLE IT_ZMMBUS INTO WA_ZMMBUS WITH KEY WERKS = WA_MSEG-WERKS LGORT =
WA_MSEG-LGORT.
IF SY-SUBRC = 0.
WA_FINAL-PRCTR = WA_ZMMBUS-PRCTR.
ENDIF.
* End of Updating Profit Center to WA_FINAL work area

* Removing leading zeroes in MATNR field


SHIFT WA_FINAL-MATNR LEFT DELETING LEADING '0'.
* End of Removing leading zeroes in MATNR field

* Updating Material Type to WA_FINAL work area


IF WA_MSEG-MATNR BETWEEN '1000000001' AND '1999999999'.
WA_FINAL-MATTYPE = 'Rawmaterials'.
ELSEIF WA_MSEG-MATNR BETWEEN '2000000001' AND '2999999999'.
WA_FINAL-MATTYPE = 'Consumables'.
ELSEIF WA_MSEG-MATNR BETWEEN '3000000001' AND '3999999999'.
WA_FINAL-MATTYPE = 'Packing'.
ELSEIF WA_MSEG-MATNR BETWEEN '4000000001' AND '4999999999'.
WA_FINAL-MATTYPE = 'Spares'.
ELSEIF WA_MSEG-MATNR BETWEEN '5000000001' AND '5999999999'.
WA_FINAL-MATTYPE = 'Production Resource tools'.
ELSEIF WA_MSEG-MATNR BETWEEN '6000000001' AND '6799999999'.
WA_FINAL-MATTYPE = 'SFG'.
ELSEIF WA_MSEG-MATNR BETWEEN '6800000001' AND '6899999999'.
WA_FINAL-MATTYPE = 'Ancillary'.
ELSEIF WA_MSEG-MATNR BETWEEN '7000000001' AND '7099999999'.
WA_FINAL-MATTYPE = 'Services'.
ELSEIF WA_MSEG-MATNR BETWEEN '7100000001' AND '7199999999'.
WA_FINAL-MATTYPE = 'Returnable packing'.
ELSEIF WA_MSEG-MATNR BETWEEN '7200000001' AND '7299999999'.
WA_FINAL-MATTYPE = 'Non stock'.
ELSEIF WA_MSEG-MATNR BETWEEN '7300000001' AND '7399999999'.
WA_FINAL-MATTYPE = 'Trading Goods'.
ELSEIF WA_MSEG-MATNR BETWEEN '7400000001' AND '7499999999'.
WA_FINAL-MATTYPE = 'Pipeline Material'.
ELSEIF WA_MSEG-MATNR BETWEEN '8000000001' AND '8999999999'.
WA_FINAL-MATTYPE = 'Scrap'.
ELSEIF WA_MSEG-MATNR BETWEEN '9000000001' AND '9999999999'.
WA_FINAL-MATTYPE = 'FG'.
ELSE.
WA_FINAL-MATTYPE = ''.
ENDIF.
* End of Updating Material Type to WA_FINAL work area

V_MATNR2 = WA_MSEG-MATNR.

* Adding all fields from WA_FINAL to temp table IT_FINAL


IF R1 = 'X'.
AT END OF LGORT. "MATNR.
WA_FINAL-OBQTY = L_OBQTY.
WA_FINAL-OBVAL = L_OBVAL.
WA_FINAL-RCTQTY = L_RCTQTY.
WA_FINAL-RCTVAL = L_RCTVAL.
WA_FINAL-ISSQTY = L_ISSQTY.
WA_FINAL-ISSVAL = L_ISSVAL.
WA_FINAL-CBQTY = L_CBQTY.
WA_FINAL-CBVAL = L_CBVAL.
DIFFQTY = L_CBQTY.
DIFFVAL = L_CBVAL.
IF CHK1 = 'X'.
IF DIFFQTY EQ 0 AND DIFFVAL NE 0.
IF DIFFVAL GE 0.
IF WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSVAL = 0. "Checking if
difference belongs to OB
WA_FINAL-OBVAL = WA_FINAL-OBVAL - DIFFVAL.
ELSE.
WA_FINAL-ISSVAL = WA_FINAL-ISSVAL + DIFFVAL.
WA_FINAL-CBVAL = 0.
ENDIF.
ELSE.
IF WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSVAL = 0. "Checking if
difference belongs to OB
WA_FINAL-OBVAL = WA_FINAL-OBVAL - DIFFVAL.
ELSE.
WA_FINAL-RCTVAL = WA_FINAL-RCTVAL - DIFFVAL.
WA_FINAL-CBVAL = 0.
ENDIF.
ENDIF.
ENDIF.
CLEAR: DIFFQTY, DIFFVAL.
ENDIF.
** Deleting records for documents prior to the "From date"
IF WA_FINAL-OBQTY = 0 AND WA_FINAL-OBVAL = 0 AND WA_FINAL-RCTQTY = 0 AND
WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSQTY = 0 AND WA_FINAL-ISSVAL = 0.
CONTINUE.
ENDIF.
** End of Deleting records for documents prior to the "From date"
APPEND WA_FINAL TO IT_FINAL.
CLEAR: L_OBQTY, L_OBVAL, L_RCTQTY, L_RCTVAL, L_ISSQTY, L_ISSVAL, L_CBQTY,
L_CBVAL.
ENDAT.
ELSE.
AT END OF MATNR.
WA_FINAL-OBQTY = L_OBQTY.
WA_FINAL-OBVAL = L_OBVAL.
WA_FINAL-RCTQTY = L_RCTQTY.
WA_FINAL-RCTVAL = L_RCTVAL.
WA_FINAL-ISSQTY = L_ISSQTY.
WA_FINAL-ISSVAL = L_ISSVAL.
WA_FINAL-CBQTY = L_CBQTY.
WA_FINAL-CBVAL = L_CBVAL.
DIFFQTY = L_CBQTY.
DIFFVAL = L_CBVAL.
IF CHK1 = 'X'.
IF DIFFQTY EQ 0 AND DIFFVAL NE 0.
IF DIFFVAL GE 0.
IF WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSVAL = 0. "Checking if
difference belongs to OB
WA_FINAL-OBVAL = WA_FINAL-OBVAL - DIFFVAL.
ELSE.
WA_FINAL-ISSVAL = WA_FINAL-ISSVAL + DIFFVAL.
WA_FINAL-CBVAL = 0.
ENDIF.
ELSE.
IF WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSVAL = 0. "Checking if
difference belongs to OB
WA_FINAL-OBVAL = WA_FINAL-OBVAL - DIFFVAL.
ELSE.
WA_FINAL-RCTVAL = WA_FINAL-RCTVAL - DIFFVAL.
WA_FINAL-CBVAL = 0.
ENDIF.
ENDIF.
ENDIF.
CLEAR: DIFFQTY, DIFFVAL.
ENDIF.
** Deleting records for documents prior to the "From date"
IF WA_FINAL-OBQTY = 0 AND WA_FINAL-OBVAL = 0 AND WA_FINAL-RCTQTY = 0 AND
WA_FINAL-RCTVAL = 0 AND WA_FINAL-ISSQTY = 0 AND WA_FINAL-ISSVAL = 0.
CONTINUE.
ENDIF.
** End of Deleting records for documents prior to the "From date"
APPEND WA_FINAL TO IT_FINAL.
CLEAR: L_OBQTY, L_OBVAL, L_RCTQTY, L_RCTVAL, L_ISSQTY, L_ISSVAL, L_CBQTY,
L_CBVAL.
ENDAT.
ENDIF.
CLEAR: WA_FINAL, WA_MSEG. ", WA_SUMMARY.
* End of Adding all fields from WA_FINAL to temp table IT_FINAL
ENDLOOP.
* End of Adding data from IT_MSEG temp table to WA_MSEG and WA_FINAL work areas
ENDFORM.

FORM SET_FCAT.
* Calling SUB_FCAT_ALV form for displaying fields
IF R1 = 'X'.
PERFORM SUB_FCAT_ALV USING : 'WERKS' 'Plant',
'MATNR' 'Mat.Code',
'MAKTX' 'Mat.Description',
'LGORT' 'St.locn',
'OBQTY' 'OB.Qty.',
'OBVAL' 'OB.Val.',
'RCTQTY' 'Rct.Qty.',
'RCTVAL' 'Rct.Val.',
'ISSQTY' 'Iss.Qty.',
'ISSVAL' 'Iss.Val.',
'CBQTY' 'Bal.Qty.',
'CBVAL' 'Bal.Val.',
'PRCTR' 'Prof.Center',
'MATTYPE' 'Mat.Type'.
ELSE.
PERFORM SUB_FCAT_ALV USING : 'WERKS' 'Plant',
'MATNR' 'Mat.Code',
'MAKTX' 'Mat.Description',
'OBQTY' 'OB.Qty.',
'OBVAL' 'OB.Val.',
'RCTQTY' 'Rct.Qty.',
'RCTVAL' 'Rct.Val.',
'ISSQTY' 'Iss.Qty.',
'ISSVAL' 'Iss.Val.',
'CBQTY' 'Bal.Qty.',
'CBVAL' 'Bal.Val.',
'PRCTR' 'Prof.Center',
'MATTYPE' 'Mat.Type'.
ENDIF.
* End of Calling SUB_FCAT_ALV form for displaying fields
ENDFORM.

FORM DISPLAY_ALV.
WA_FIELDLAYOUT-COLWIDTH_OPTIMIZE = 'X'.
L_PROG = SY-REPID.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = L_PROG
IS_LAYOUT = WA_FIELDLAYOUT
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = IT_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* Implement suitable error handling here
* it_final.
ENDIF.
ENDFORM.

*** Form for updating field catalog


FORM SUB_FCAT_ALV USING P_FNAME TYPE CHAR20
P_TXT TYPE CHAR50.
DATA SNO TYPE I.
SNO = SNO + 1.
WA_FIELDCAT-COL_POS = SNO.
WA_FIELDCAT-FIELDNAME = P_FNAME.
WA_FIELDCAT-SELTEXT_L = P_TXT.

APPEND WA_FIELDCAT TO IT_FIELDCAT.


CLEAR WA_FIELDCAT.

ENDFORM.
*** End of Form for updating field catalog

Potrebbero piacerti anche