You are on page 1of 19

*&------------------------------------------------------------------------------

-------------*
* Program Name : ZMM_R_STOCK_AGEING
* Object ID :
* Functional Analyst : Lokesh Sen/Hirendra
* Programmer : Meenakshi Chauhan/Abhishek Nagar
* Requested By : Rashid Khan
* Start date : 03rd April, 2014
* Initial CTS : EDVK953940
* Description : Stock Ageing Report
*-------------------------------------------------------------------------------
-------------*
* Includes : None
* Function Modules : None
*
* Logical database : None
* Transaction Code : ZMM_STKAG
* External references : None
*-------------------------------------------------------------------------------
-------------*
* Modification Log
*-------------------------------------------------------------------------------
-------------*
* DATE | MODIFIED BY | CTS NUMBER | COMMENTS
*-------------------------------------------------------------------------------
-------------*
REPORT zmm_r_stock_ageing MESSAGE-ID 8i.
TYPE-POOLS : slis.
**********************************************************************
* T A B L E S
**********************************************************************
TABLES : mara,
makt,
mkpf,
mseg,
mbew,
sscrfields.
************************************************************************
* I N T E R N A L T A B L E D E C L A D R A T I O N
************************************************************************
DATA: BEGIN OF t_mara OCCURS 0,
matnr LIKE mara-matnr,
mtart LIKE mara-mtart,
matkl LIKE mara-matkl,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
END OF t_mara.
DATA: BEGIN OF t_makt OCCURS 0,
matnr LIKE makt-matnr,
maktx LIKE makt-maktx,
END OF t_makt.
DATA: BEGIN OF t_mbew OCCURS 0,
matnr LIKE mbew-matnr,
bwkey LIKE mbew-bwkey,
verpr LIKE mbew-verpr,
END OF t_mbew.
DATA: BEGIN OF t_mat OCCURS 0,
mblnr LIKE mkpf-mblnr,
mjahr LIKE mkpf-mjahr,
budat LIKE mkpf-budat,
zeile LIKE mseg-zeile,
matnr LIKE mseg-matnr,
werks LIKE mseg-werks,
lgort LIKE mseg-lgort,
shkzg LIKE mseg-shkzg,
waers LIKE mseg-waers,
dmbtr LIKE mseg-dmbtr,
menge LIKE mseg-menge,
meins LIKE mseg-meins,
bukrs LIKE mseg-bukrs,
END OF t_mat.
DATA: BEGIN OF t_final OCCURS 0,
bukrs LIKE mseg-bukrs,
werks LIKE mseg-werks,
matnr LIKE mseg-matnr,
mtart LIKE mara-mtart,
maktx LIKE makt-maktx,
matkl LIKE mara-matkl,
lgort LIKE mseg-lgort,
shkzg LIKE mseg-shkzg,
meins LIKE mseg-meins,
tot_stock LIKE mseg-menge,
stock_val LIKE mseg-dmbtr,
stk30 LIKE mseg-menge,
stk30_val LIKE mseg-dmbtr,
stk60 LIKE mseg-menge,
stk60_val LIKE mseg-dmbtr,
stk90 LIKE mseg-menge,
stk90_val LIKE mseg-dmbtr,
stk120 LIKE mseg-menge,
stk120_val LIKE mseg-dmbtr,
stk180 LIKE mseg-menge,
stk180_val LIKE mseg-dmbtr,
stk365 LIKE mseg-menge,
stk365_val LIKE mseg-dmbtr,
stk730 LIKE mseg-menge,
stk730_val LIKE mseg-dmbtr,
stkall LIKE mseg-menge,
stkall_val LIKE mseg-dmbtr,
END OF t_final.
DATA: BEGIN OF t_fill OCCURS 0,
bukrs LIKE mseg-bukrs,
werks LIKE mseg-werks,
matnr LIKE mseg-matnr,
mtart LIKE mara-mtart,
maktx LIKE makt-maktx,
matkl LIKE mara-matkl,
lgort LIKE mseg-lgort,
shkzg LIKE mseg-shkzg,
meins LIKE mseg-meins,
tot_stock LIKE mseg-menge,
stock_val LIKE mseg-dmbtr,
stk30 LIKE mseg-menge,
stk30_val LIKE mseg-dmbtr,
stk60 LIKE mseg-menge,
stk60_val LIKE mseg-dmbtr,
stk90 LIKE mseg-menge,
stk90_val LIKE mseg-dmbtr,
stk120 LIKE mseg-menge,
stk120_val LIKE mseg-dmbtr,
stk180 LIKE mseg-menge,
stk180_val LIKE mseg-dmbtr,
stk365 LIKE mseg-menge,
stk365_val LIKE mseg-dmbtr,
stk730 LIKE mseg-menge,
stk730_val LIKE mseg-dmbtr,
stkall LIKE mseg-menge,
stkall_val LIKE mseg-dmbtr,
END OF t_fill.
DATA: BEGIN OF t_det OCCURS 0,
bukrs LIKE mseg-bukrs,
werks LIKE mseg-werks,
matnr LIKE mseg-matnr,
mtart LIKE mara-mtart,
maktx LIKE makt-maktx,
matkl LIKE mara-matkl,
lgort LIKE mseg-lgort,
shkzg LIKE mseg-shkzg,
meins LIKE mseg-meins,
tot_stock LIKE mseg-menge,
stock_val LIKE mseg-dmbtr,
stk30 LIKE mseg-menge,
stk30_val LIKE mseg-dmbtr,
stk60 LIKE mseg-menge,
stk60_val LIKE mseg-dmbtr,
stk90 LIKE mseg-menge,
stk90_val LIKE mseg-dmbtr,
stk120 LIKE mseg-menge,
stk120_val LIKE mseg-dmbtr,
stk180 LIKE mseg-menge,
stk180_val LIKE mseg-dmbtr,
stk365 LIKE mseg-menge,
stk365_val LIKE mseg-dmbtr,
stk730 LIKE mseg-menge,
stk730_val LIKE mseg-dmbtr,
stkall LIKE mseg-menge,
stkall_val LIKE mseg-dmbtr,
END OF t_det.
DATA: BEGIN OF t_sum OCCURS 0,
bukrs LIKE mseg-bukrs,
werks LIKE mseg-werks,
matnr LIKE mseg-matnr,
mtart LIKE mara-mtart,
maktx LIKE makt-maktx,
matkl LIKE mara-matkl,
lgort LIKE mseg-lgort,
shkzg LIKE mseg-shkzg,
meins LIKE mseg-meins,
tot_stock LIKE mseg-menge,
stock_val LIKE mseg-dmbtr,
stk30 LIKE mseg-menge,
stk30_val LIKE mseg-dmbtr,
stk60 LIKE mseg-menge,
stk60_val LIKE mseg-dmbtr,
stk90 LIKE mseg-menge,
stk90_val LIKE mseg-dmbtr,
stk120 LIKE mseg-menge,
stk120_val LIKE mseg-dmbtr,
stk180 LIKE mseg-menge,
stk180_val LIKE mseg-dmbtr,
stk365 LIKE mseg-menge,
stk365_val LIKE mseg-dmbtr,
stk730 LIKE mseg-menge,
stk730_val LIKE mseg-dmbtr,
stkall LIKE mseg-menge,
stkall_val LIKE mseg-dmbtr,
END OF t_sum.
************************************************************************
* W O R K A R E A D E C L A D R A T I O N
************************************************************************
DATA: wa_mara LIKE LINE OF t_mara,
wa_makt LIKE LINE OF t_makt,
wa_mat LIKE LINE OF t_mat,
wa_mbew LIKE LINE OF t_mbew,
wa LIKE LINE OF t_final,
wa1 LIKE LINE OF t_fill,
wa_det LIKE LINE OF t_det,
wa_sum LIKE LINE OF t_sum.
************************************************************************
* L O C A L D A T A D E C L A D R A T I O N
************************************************************************
CONSTANTS: c_zero TYPE i VALUE '0',
c_30 TYPE i VALUE '30',
c_31 TYPE i VALUE '31',
c_60 TYPE i VALUE '60',
c_61 TYPE i VALUE '61',
c_90 TYPE i VALUE '90',
c_91 TYPE i VALUE '91',
c_120 TYPE i VALUE '120',
c_121 TYPE i VALUE '121',
c_180 TYPE i VALUE '180',
c_181 TYPE i VALUE '181',
c_365 TYPE i VALUE '365',
c_366 TYPE i VALUE '366',
c_730 TYPE i VALUE '730'.
DATA: lv_days TYPE i.
DATA: lv_menge TYPE mseg-menge,
result TYPE mseg-menge.
**********************************************************************
* A L V D A T A D E C L A R A T I O N
**********************************************************************
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
it_top_of_page TYPE slis_t_listheader,
ls_layout TYPE slis_layout_alv,
gt_events TYPE slis_t_event,
is_print TYPE slis_print_alv.
************************************************************************
* S E L E C T I O N S C R E E N
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK blck2 WITH FRAME TITLE text-001.
PARAMETERS: bukrs TYPE mseg-bukrs OBLIGATORY MODIF ID buk.
SELECT-OPTIONS: werks FOR mseg-werks NO-EXTENSION NO INTERVALS OBLIGATORY MODIF
ID wer,
matnr FOR mseg-matnr,
lgort FOR mseg-lgort,
mtart FOR mara-mtart.
PARAMETERS: budat TYPE mkpf-budat OBLIGATORY.
SELECTION-SCREEN END OF BLOCK blck2.
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.
PARAMETERS: r_sum RADIOBUTTON GROUP r1,
r_det RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b.
************************************************************************
* S E L E C T I O N - S C R E E N O U T P U T
************************************************************************
AT SELECTION-SCREEN OUTPUT.
************************************************************************
* S E L E C T I O N - S C R E E N
************************************************************************
AT SELECTION-SCREEN .
************************************************************************
* S T A R T - O F - S E L E C T I O N
************************************************************************
START-OF-SELECTION.
PERFORM populating_form.
************************************************************************
* E N D - O F - S E L E C T I O N
************************************************************************
END-OF-SELECTION.
PERFORM move_data.
IF r_det = 'X'.
PERFORM detail_aging_analysis.
ENDIF.
IF r_sum = 'X'.
PERFORM summary_aging_analysis.
ENDIF.
PERFORM data_filter.
PERFORM alv_display.
PERFORM alv_grid.
PERFORM top_of_page.
*&------------------------------------------------------------------------------
------------------*
*& Form POPULATING_DATA *
*&------------------------------------------------------------------------------
------------------*
FORM populating_form.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 5
text = 'Fetching Data From Database....'.
CLEAR : t_mara.
REFRESH : t_mara.
SELECT a~matnr a~mtart a~matkl b~werks b~lgort
FROM mara AS a INNER JOIN mard AS b
ON a~matnr = b~matnr
INTO TABLE t_mara
WHERE a~matnr IN matnr
AND a~mtart IN mtart
AND b~werks IN werks
AND b~lgort IN lgort.
IF t_mara[] IS INITIAL.
MESSAGE s000 WITH text-003.
LEAVE TO CURRENT TRANSACTION.
ENDIF.
CLEAR : t_makt.
REFRESH : t_makt.
SELECT matnr maktx
FROM makt
INTO TABLE t_makt
FOR ALL ENTRIES IN t_mara
WHERE matnr = t_mara-matnr.
CLEAR : t_mat.
REFRESH : t_mat.
IF r_sum EQ 'X'.
SELECT mkpf~mblnr
mkpf~mjahr
mkpf~budat
mseg~zeile
mseg~matnr
mseg~werks
mseg~lgort
mseg~shkzg
mseg~waers
mseg~dmbtr
mseg~menge
mseg~meins
mseg~bukrs
INTO TABLE t_mat
FROM mkpf AS mkpf INNER JOIN mseg AS mseg
ON mkpf~mandt = mseg~mandt AND
mkpf~mblnr = mseg~mblnr AND
mkpf~mjahr = mseg~mjahr
FOR ALL ENTRIES IN t_mara
WHERE mseg~matnr EQ t_mara-matnr
AND mseg~werks IN werks
AND mseg~lgort EQ t_mara-lgort
AND mseg~bukrs EQ bukrs
AND mkpf~budat LE budat.
ELSEIF r_det EQ 'X'.
SELECT mkpf~mblnr
mkpf~mjahr
mkpf~budat
mseg~zeile
mseg~matnr
mseg~werks
mseg~lgort
mseg~shkzg
mseg~waers
mseg~dmbtr
mseg~menge
mseg~meins
mseg~bukrs
INTO TABLE t_mat
FROM mkpf AS mkpf INNER JOIN mseg AS mseg
ON mkpf~mandt = mseg~mandt AND
mkpf~mblnr = mseg~mblnr AND
mkpf~mjahr = mseg~mjahr
FOR ALL ENTRIES IN t_mara
WHERE mseg~matnr EQ t_mara-matnr
AND mseg~werks IN werks
AND mseg~lgort EQ t_mara-lgort
AND mseg~bukrs EQ bukrs
AND mkpf~budat LE budat.
ENDIF.
CLEAR : t_mbew.
REFRESH : t_mbew.
IF t_mat[] IS NOT INITIAL.
SELECT matnr bwkey verpr FROM mbew
INTO TABLE t_mbew
FOR ALL ENTRIES IN t_mat
WHERE matnr = t_mat-matnr
AND bwkey = t_mat-werks.
ENDIF.
ENDFORM. "POPULATING_FORM
*&------------------------------------------------------------------------------
------------------*
*& Form MOVE_DATA *
*&------------------------------------------------------------------------------
------------------*
FORM move_data .
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 60
text = 'Performing Stock Analysis...'.
SORT t_mara BY matnr.
SORT t_makt BY matnr.
SORT t_mat BY matnr.
SORT t_mbew BY matnr.
LOOP AT t_mat INTO wa_mat.
wa-bukrs = wa_mat-bukrs.
wa-werks = wa_mat-werks.
wa-matnr = wa_mat-matnr.
wa-meins = wa_mat-meins.
wa-lgort = wa_mat-lgort.
wa-shkzg = wa_mat-shkzg.
CALL FUNCTION 'C14B_DIFF_BT_2_DATES'
EXPORTING
i_date_from = wa_mat-budat
i_date_to = budat
IMPORTING
e_days = lv_days.
IF lv_days BETWEEN c_zero AND c_30.
wa-stk30 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_31 AND c_60.
wa-stk60 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_61 AND c_90.
wa-stk90 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_91 AND c_120.
wa-stk120 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_121 AND c_180.
wa-stk180 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_181 AND c_365.
wa-stk365 = wa_mat-menge.
ENDIF.
IF lv_days BETWEEN c_366 AND c_730.
wa-stk730 = wa_mat-menge.
ENDIF.
IF lv_days GT c_730.
wa-stkall = wa_mat-menge.
ENDIF.
wa-tot_stock = wa-stk30 + wa-stk60 + wa-stk90 + wa-stk120 + wa-stk180 + wa-s
tk365 + wa-stk730 + wa-stkall.
IF wa_mat-shkzg = 'H'.
wa-stk30 = wa-stk30 * ( -1 ).
wa-stk60 = wa-stk60 * ( -1 ).
wa-stk90 = wa-stk90 * ( -1 ).
wa-stk120 = wa-stk120 * ( -1 ).
wa-stk180 = wa-stk180 * ( -1 ).
wa-stk365 = wa-stk365 * ( -1 ).
wa-stk730 = wa-stk730 * ( -1 ).
wa-stkall = wa-stkall * ( -1 ).
wa-tot_stock = wa-tot_stock * ( -1 ).
ENDIF.
READ TABLE t_mara INTO wa_mara WITH KEY matnr = wa-matnr BINARY SEARCH.
wa-matkl = wa_mara-matkl.
wa-mtart = wa_mara-mtart.
READ TABLE t_makt INTO wa_makt WITH KEY matnr = wa-matnr BINARY SEARCH.
wa-maktx = wa_makt-maktx.
APPEND wa TO t_final.
CLEAR : wa, wa_mat, wa_mara, wa_makt.
ENDLOOP.
ENDFORM. "MOVE_DATA
*&-------------------------------------------------------------------------*
*& Form DATA_FILTER
*&-------------------------------------------------------------------------*
FORM data_filter.
t_fill[] = t_final[].
CLEAR : t_final[].
CLEAR : wa, wa1.
LOOP AT t_fill INTO wa1.
wa-bukrs = wa1-bukrs.
wa-werks = wa1-werks.
wa-matnr = wa1-matnr.
wa-mtart = wa1-mtart.
wa-maktx = wa1-maktx.
wa-matkl = wa1-matkl.
wa-lgort = wa1-lgort.
wa-meins = wa1-meins.
wa-tot_stock = wa1-tot_stock.
wa-stock_val = wa1-stock_val.
wa-stkall = wa1-stkall.
CLEAR lv_menge.
*>>> Stock Evaluation.
IF wa-stkall EQ wa-tot_stock.
*>>> Stock Valuation.
READ TABLE t_mbew INTO wa_mbew WITH KEY matnr = wa-matnr
bwkey = wa-werks.
IF sy-subrc EQ 0.
wa-stkall_val = wa-stkall * wa_mbew-verpr.
wa-stock_val = wa-tot_stock * wa_mbew-verpr.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = wa-matnr
IMPORTING
output = wa-matnr.
APPEND wa TO t_final.
CONTINUE.
ENDIF.
IF wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk730.
CLEAR : wa1-stk730.
wa-stk730 = wa1-stk730.
ELSE.
wa-stk730 = wa1-stk730.
ENDIF.
IF wa1-stk365 LE 0 AND wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk365.
CLEAR : wa1-stk365.
wa-stk365 = wa1-stk365.
ELSEIF wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk730 = wa-stk730 + wa1-stk365.
CLEAR : wa1-stk365.
wa-stk365 = wa1-stk365.
ELSEIF wa1-stk365 GE 0.
wa-stk365 = wa1-stk365.
ENDIF.
IF wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk120.
CLEAR :wa1-stk180.
wa-stk180 = wa1-stk180.
ELSEIF wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk730 = wa-stk730 + wa1-stk180.
CLEAR :wa1-stk180.
wa-stk180 = wa1-stk180.
ELSEIF wa1-stk180 LE 0 AND wa1-stk365 GE 0 AND wa1-stk730 GE 0.
wa-stk365 = wa-stk365 + wa1-stk180.
CLEAR : wa1-stk180.
wa-stk180 = wa1-stk180.
ELSEIF wa1-stk180 GE 0.
wa-stk180 = wa1-stk180.
ENDIF.
IF wa1-stk120 LE 0 AND wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 L
E 0.
wa-stkall = wa-stkall + wa1-stk120.
CLEAR :wa1-stk120.
wa-stk120 = wa1-stk120.
ELSEIF wa1-stk120 LE 0 AND wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk73
0 GE 0.
wa-stk730 = wa-stk730 + wa1-stk120.
CLEAR :wa1-stk120.
wa-stk120 = wa1-stk120.
ELSEIF wa1-stk120 GE 0 AND wa1-stk180 LE 0 AND wa1-stk365 GE 0 AND wa1-stk7
30 GE 0.
wa-stk365 = wa-stk365 + wa1-stk120.
CLEAR : wa1-stk120.
wa-stk120 = wa1-stk120.
ELSEIF wa1-stk120 LE 0 AND wa1-stk180 GE 0 AND wa1-stk365 GE 0 AND wa1-stk73
0 GE 0.
wa-stk180 = wa-stk180 + wa1-stk120.
CLEAR : wa1-stk120.
wa-stk120 = wa1-stk120.
ELSEIF wa1-stk120 GE 0.
wa-stk120 = wa1-stk120.
ENDIF.
IF wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180 LE 0 AND wa1-stk365 LE
0 AND wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk90.
CLEAR : wa1-stk90.
wa-stk90 = wa1-stk90.
ELSEIF wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180 LE 0 AND wa1-stk365
LE 0 AND wa1-stk730 GE 0.
wa-stk730 = wa-stk730 + wa1-stk90.
CLEAR : wa1-stk90.
wa-stk90 = wa1-stk90.
ELSEIF wa1-stk90 LE 0 AND wa1-stk120 GE 0 AND wa1-stk180 LE 0 AND wa1-stk36
5 GE 0 AND wa1-stk730 GE 0.
wa-stk365 = wa-stk365 + wa1-stk90.
CLEAR : wa1-stk90.
wa-stk90 = wa1-stk90.
ELSEIF wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180 GE 0 AND wa1-stk36
5 GE 0 AND wa1-stk730 GE 0.
wa-stk180 = wa-stk180 + wa1-stk90.
CLEAR : wa1-stk90.
wa-stk90 = wa1-stk90.
ELSEIF wa1-stk90 LE 0 AND wa1-stk120 GE 0 AND wa1-stk180 GE 0 AND wa1-stk36
5 LE 0 AND wa1-stk730 GE 0.
wa-stk120 = wa-stk120 + wa1-stk90.
CLEAR : wa1-stk90.
wa-stk90 = wa1-stk90.
ELSEIF wa1-stk90 GE 0.
wa-stk90 = wa1-stk90.
ENDIF.
IF wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180 LE 0
AND wa1-stk365 LE 0 AND wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180
LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk730 = wa-stk730 + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 GE 0 AND wa1-stk180
LE 0 AND wa1-stk365 GE 0 AND wa1-stk730 GE 0.
wa-stk365 = wa-stk365 + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 LE 0 AND wa1-stk180
GE 0 AND wa1-stk365 GE 0 AND wa1-stk730 GE 0.
wa-stk180 = wa-stk180 + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 GE 0 AND wa1-stk180
GE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk120 = wa-stk120 + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 LE 0 AND wa1-stk90 GE 0 AND wa1-stk120 GE 0 AND wa1-stk180
GE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk90 = wa-stk90 + wa1-stk60.
CLEAR : wa1-stk60.
wa-stk60 = wa1-stk60.
ELSEIF wa1-stk60 GE 0.
wa-stk60 = wa1-stk60.
ENDIF.
IF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 LE 0
AND wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 LE 0.
wa-stkall = wa-stkall + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 L
E 0 AND wa1-stk180 LE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk730 = wa-stk730 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 G
E 0 AND wa1-stk180 LE 0 AND wa1-stk365 GE 0 AND wa1-stk730 GE 0.
wa-stk365 = wa-stk365 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 L
E 0 AND wa1-stk180 GE 0 AND wa1-stk365 GE 0 AND wa1-stk730 GE 0.
wa-stk180 = wa-stk180 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 LE 0 AND wa1-stk120 G
E 0 AND wa1-stk180 GE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk120 = wa-stk120 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 LE 0 AND wa1-stk90 GE 0 AND wa1-stk120 G
E 0 AND wa1-stk180 GE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk90 = wa-stk90 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 LE 0 AND wa1-stk60 GE 0 AND wa1-stk90 GE 0 AND wa1-stk120 G
E 0 AND wa1-stk180 GE 0 AND wa1-stk365 LE 0 AND wa1-stk730 GE 0.
wa-stk60 = wa-stk60 + wa1-stk30.
CLEAR : wa1-stk30.
wa-stk30 = wa1-stk30.
ELSEIF wa1-stk30 GE 0.
wa-stk30 = wa1-stk30.
ENDIF.
*>>> Stock Valuation.
READ TABLE t_mbew INTO wa_mbew WITH KEY matnr = wa-matnr
bwkey = wa-werks.
IF sy-subrc EQ 0.
wa-stk30_val = wa-stk30 * wa_mbew-verpr.
wa-stk60_val = wa-stk60 * wa_mbew-verpr.
wa-stk90_val = wa-stk90 * wa_mbew-verpr.
wa-stk120_val = wa-stk120 * wa_mbew-verpr.
wa-stk180_val = wa-stk180 * wa_mbew-verpr.
wa-stk365_val = wa-stk365 * wa_mbew-verpr.
wa-stk730_val = wa-stk730 * wa_mbew-verpr.
wa-stkall_val = wa-stkall * wa_mbew-verpr.
wa-stock_val = wa-tot_stock * wa_mbew-verpr.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = wa-matnr
IMPORTING
output = wa-matnr.
APPEND wa TO t_final.
CLEAR : wa, wa1, wa_mbew.
ENDLOOP.
ENDFORM. "DATA_FILTER
*&-------------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&-------------------------------------------------------------------------*
FORM alv_display.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 90
text = ' Preparing List Display... '.
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-seltext_m = 'Plant'.
wa_fieldcat-tabname = 'T_FINAL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-seltext_m = 'Material'.
wa_fieldcat-tabname = 'T_FINAL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-seltext_m = 'Material Description'.
wa_fieldcat-tabname = 'T_FINAL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MTART'.
wa_fieldcat-seltext_m = 'Material Type'.
wa_fieldcat-tabname = 'T_FINAL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

IF r_det = 'X'.
wa_fieldcat-fieldname = 'LGORT'.
wa_fieldcat-seltext_m = 'Storage Location'.
wa_fieldcat-tabname = 'T_FINAL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDIF.
wa_fieldcat-fieldname = 'TOT_STOCK'.
wa_fieldcat-seltext_m = 'Tot. Available Stock'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STOCK_VAL'.
wa_fieldcat-seltext_m = 'Total Stock Value'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK30'.
wa_fieldcat-seltext_m = 'Qty Bet. 0-30 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK30_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 0-30 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK60'.
wa_fieldcat-seltext_m = 'Qty Bet. 31-60 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK60_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 31-60 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK90'.
wa_fieldcat-seltext_m = 'Qty Bet. 61-90 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK90_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 61-90 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK120'.
wa_fieldcat-seltext_m = 'Qty Bet. 91-120 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK120_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 91-120 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK180'.
wa_fieldcat-seltext_m = 'Qty Bet. 121-180 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK180_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 121-180 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK365'.
wa_fieldcat-seltext_m = 'Qty Bet. 181-365 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK365_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 181-365 Days'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK730'.
wa_fieldcat-seltext_m = 'Qty Bet. 1-2 Years'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STK730_VAL'.
wa_fieldcat-seltext_m = 'Val. Bet. 1-2 Years'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STKALL'.
wa_fieldcat-seltext_m = 'Stock > 2 Years'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'STKALL_VAL'.
wa_fieldcat-seltext_m = 'Val. > 2 Years'.
wa_fieldcat-tabname = 'T_FINAL'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDFORM. "ALV_DISPLAY
*&--------------------------------------------------------------------------*
*& Form ALV_GRID
*&--------------------------------------------------------------------------*
FORM alv_grid .
PERFORM fill_list_header USING it_top_of_page[] .
PERFORM event-build USING gt_events[].
PERFORM fill_layout USING ls_layout.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_bypassing_buffer = 'X'
i_callback_program = sy-repid
is_layout = ls_layout
it_fieldcat = it_fieldcat[]
it_events = gt_events[]
i_default = 'X'
i_save = 'X'
is_print = is_print
TABLES
t_outtab = t_final
EXCEPTIONS
program_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.
ENDFORM. " ALV_GRID
*&--------------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&--------------------------------------------------------------------------*
FORM top_of_page .
DATA : w_logo(20) TYPE c.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_top_of_page.
ENDFORM. " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form FILL_LIST_HEADER
*&---------------------------------------------------------------------*
FORM fill_list_header USING p_slis_t_listheader TYPE slis_t_listheader.
DATA : ls_line TYPE slis_listheader,
ls_line_1 TYPE slis_listheader.
DATA : w_str(100) TYPE c,
v_str(100) TYPE c,
lv_budat(10) TYPE c.
SELECT SINGLE name1 FROM t001w INTO v_str WHERE werks IN werks.
CALL FUNCTION 'HR_99S_CONV_UPPER_CASE'
CHANGING
ch_text = v_str.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = v_str.
APPEND ls_line TO it_top_of_page.
CLEAR ls_line.
CONCATENATE budat+6(2) budat+4(2) budat+0(4) INTO lv_budat SEPARATED BY '.'.
CONCATENATE 'STOCK AGING ANALYSIS REPORT AS ON' lv_budat INTO w_str SEPARATED
BY space.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = w_str.
APPEND ls_line TO it_top_of_page.
CLEAR ls_line.
ENDFORM. " FILL_LIST_HEADER
*&---------------------------------------------------------------------*
*& Form EVENT-BUILD
*&---------------------------------------------------------------------*
FORM event-build USING lt_events TYPE slis_t_event..
DATA: ls_event TYPE slis_alv_event.
MOVE 'TOP_OF_PAGE' TO ls_event-name.
MOVE 'TOP_OF_PAGE' TO ls_event-form.
APPEND ls_event TO lt_events.
CLEAR ls_event.
ENDFORM. " EVENT-BUILD
*&---------------------------------------------------------------------*
*& Form FILL_LAYOUT
*&---------------------------------------------------------------------*
FORM fill_layout USING p_ls_layout TYPE slis_layout_alv.
p_ls_layout-zebra = 'X'.
p_ls_layout-cell_merge = 'X'.
p_ls_layout-colwidth_optimize = 'X'.
ENDFORM. " FILL_LAYOUT
*&---------------------------------------------------------------------*
*& Form DETAIL_AGING_ANALYSIS *
*&---------------------------------------------------------------------*
FORM detail_aging_analysis.
t_det[] = t_final[].
CLEAR : t_final[].
REFRESH : t_final[].
CLEAR : wa, wa_det.
SORT t_det BY matnr .
LOOP AT t_det INTO wa_det.
wa-bukrs = wa_det-bukrs.
wa-werks = wa_det-werks.
wa-matnr = wa_det-matnr.
wa-shkzg = wa_det-shkzg.
wa-mtart = wa_det-mtart.
wa-maktx = wa_det-maktx.
wa-matkl = wa_det-matkl.
wa-meins = wa_det-meins.
wa-lgort = wa_det-lgort.
AT NEW lgort.
SUM.
wa-stk30 = wa_det-stk30.
wa-stk60 = wa_det-stk60.
wa-stk90 = wa_det-stk90.
wa-stk120 = wa_det-stk120.
wa-stk180 = wa_det-stk180.
wa-stk365 = wa_det-stk365.
wa-stk730 = wa_det-stk730.
wa-stkall = wa_det-stkall.
wa-stk30_val = wa_det-stk30_val.
wa-stk60_val = wa_det-stk60_val.
wa-stk90_val = wa_det-stk90_val.
wa-stk120_val = wa_det-stk120_val.
wa-stk180_val = wa_det-stk180_val.
wa-stk365_val = wa_det-stk365_val.
wa-stk730_val = wa_det-stk730_val.
wa-stkall_val = wa_det-stkall_val.
wa-tot_stock = wa_det-tot_stock.
wa-stock_val = wa_det-stock_val.
APPEND wa TO t_final.
ENDAT.
CLEAR : wa, wa_det.
ENDLOOP.
ENDFORM. "DETAIL_AGING_ANALYSIS
*&------------------------------------------------------------------------------
------------------*
*& Form SUMMARY_AGING_ANALYSIS *
*&------------------------------------------------------------------------------
------------------*
FORM summary_aging_analysis.
t_sum[] = t_final[].
CLEAR : t_final[].
REFRESH : t_final[].
CLEAR : wa, wa_sum.
SORT t_sum BY bukrs werks matnr.
LOOP AT t_sum INTO wa_sum.
wa-bukrs = wa_sum-bukrs.
wa-werks = wa_sum-werks.
wa-matnr = wa_sum-matnr.
wa-mtart = wa_sum-mtart.
wa-maktx = wa_sum-maktx.
wa-matkl = wa_sum-matkl.
wa-meins = wa_sum-meins.
wa-lgort = wa_sum-lgort.
AT NEW matnr.
SUM.
wa-stk30 = wa_sum-stk30.
wa-stk60 = wa_sum-stk60.
wa-stk90 = wa_sum-stk90.
wa-stk120 = wa_sum-stk120.
wa-stk180 = wa_sum-stk180.
wa-stk365 = wa_sum-stk365.
wa-stk730 = wa_sum-stk730.
wa-stkall = wa_sum-stkall.
wa-stk30_val = wa_sum-stk30_val.
wa-stk60_val = wa_sum-stk60_val.
wa-stk90_val = wa_sum-stk90_val.
wa-stk120_val = wa_sum-stk120_val.
wa-stk180_val = wa_sum-stk180_val.
wa-stkall_val = wa_sum-stkall_val.
wa-tot_stock = wa_sum-tot_stock.
wa-stock_val = wa_sum-stock_val.
APPEND wa TO t_final.
ENDAT.
CLEAR : wa, wa_sum.
ENDLOOP.
ENDFORM. "SUMMARY_AGING_ANALYSIS

You might also like