Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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.
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.
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.
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.
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
V_MATNR2 = WA_MSEG-MATNR.
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.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
* it_final.
ENDIF.
ENDFORM.
ENDFORM.
*** End of Form for updating field catalog