&---------------------------------------------------------------------*
*& Report ZMM_STOCK_AGEING_REPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmm_stock_ageing_report.
INCLUDE zmm_stock_ageing_dat.
INCLUDE zmm_stock_ageing_sel.
INCLUDE zmm_stock_ageing_sub.
*&---------------------------------------------------------------------*
*& Include ZMM_STOCK_AGEING_DAT
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
*&---------------------------------------------------------------------*
*& ALV Data Declaration
*&---------------------------------------------------------------------*
DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
DATA: wa_fieldcat LIKE LINE OF it_fieldcat.
DATA: t_list_top_of_page TYPE slis_t_listheader.
DATA: it_events TYPE slis_t_event WITH HEADER LINE.
DATA: g_save TYPE c VALUE 'A'.
*&---------------------------------------------------------------------*
*DATA: gt_sort TYPE slis_t_sortinfo_alv.
*&---------------------------------------------------------------------*
DATA: gx_save TYPE c VALUE 'A'.
DATA: gx_variant TYPE disvariant.
DATA: g_variant TYPE disvariant.
DATA: gs_layout TYPE slis_layout_alv.
DATA: t_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
DATA: t_i_event TYPE slis_alv_event.
*&---------------------------------------------------------------------*
*& Form ALV_SORT
*&---------------------------------------------------------------------*
DATA: it_sort TYPE slis_t_sortinfo_alv,
wa_sort TYPE slis_sortinfo_alv..
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& External Table Declaration *
*&---------------------------------------------------------------------*
TABLES : mchbh,mchb,mseg,mara,marc.
*&---------------------------------------------------------------------*
*& Internal Table Declaration *
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_mchbh, " MCHBH Table
matnr TYPE mchbh-matnr, " Material Number
werks TYPE mchbh-werks, " Plant
lgort TYPE mchbh-lgort, " Storage Location
charg TYPE mchbh-charg, " Batch Number
lfgja TYPE mchbh-lfgja, " Fiscal Year of Current Period
lfmon TYPE mchbh-lfmon, " Current period (posting period)
clabs TYPE mchbh-clabs, " Valuated Unrestricted-Use Stock
cumlm TYPE mchbh-cumlm, " Stock in transfer (from one storage location to another)
cinsm TYPE mchbh-cinsm, " Stock in Quality Inspection
ceinm TYPE mchbh-ceinm, " Total Stock of All Restricted Batches
cspem TYPE mchbh-cspem, " Blocked Stock
cretm TYPE mchbh-cretm, " Blocked Stock Returns
mtart TYPE mara-mtart, " Material Type
maktx TYPE makt-maktx, " Material Description
budat TYPE mkpf-budat, " Posting Date in the Document
price TYPE mbewh-verpr, " Moving Average Price/Periodic Unit Price
value TYPE wtgxxx, " Total Value
flag(1) TYPE c,
END OF ty_mchbh.
TYPES : BEGIN OF ty_mchb, " MCHB Table
matnr TYPE mchbh-matnr, " Material Number
werks TYPE mchbh-werks, " Plant
lgort TYPE mchbh-lgort, " Storage Location
charg TYPE mchbh-charg, " Batch Number
lfgja TYPE mchbh-lfgja, " Fiscal Year of Current Period
lfmon TYPE mchbh-lfmon, " Current period (posting period)
clabs TYPE mchbh-clabs, " Valuated Unrestricted-Use Stock
cumlm TYPE mchbh-cumlm, " Stock in transfer (from one storage location to another)
cinsm TYPE mchbh-cinsm, " Stock in Quality Inspection
ceinm TYPE mchbh-ceinm, " Total Stock of All Restricted Batches
cspem TYPE mchbh-cspem, " Blocked Stock
cretm TYPE mchbh-cretm, " Blocked Stock Returns
END OF ty_mchb.
TYPES : BEGIN OF ty_matnr,
matnr TYPE mara-matnr, " Material Number
mtart TYPE mara-mtart, " Material Type
flag(1) TYPE c,
END OF ty_matnr.
TYPES : BEGIN OF ty_mbewh, " MBEWH Table
matnr TYPE mbewh-matnr, " Material Number
lfgja TYPE mbewh-lfgja, " Fiscal Year of Current Period
lfmon TYPE mbewh-lfmon, " Current period (posting period)
lbkum TYPE mbewh-lbkum, " Total Valuated Stock
salk3 TYPE mbewh-salk3, " Value of Total Valuated Stock
vprsv TYPE mbewh-vprsv, " Price Control Indicator
verpr TYPE mbewh-verpr, " Moving Average Price/Periodic Unit Price
stprs TYPE mbewh-stprs, " Standard price
END OF ty_mbewh.
TYPES : BEGIN OF ty_final,
matnr TYPE mchbh-matnr,
werks TYPE mchbh-werks,
lgort TYPE mchbh-lgort,
charg TYPE mchbh-charg,
salk3 TYPE mbewh-salk3,
meins TYPE mara-meins,
value TYPE wtgxxx,
day_0_30 TYPE wtgxxx,
day_31_60 TYPE wtgxxx,
day_61_90 TYPE wtgxxx,
day_91_120 TYPE wtgxxx,
day_121_180 TYPE wtgxxx,
day_181_270 TYPE wtgxxx,
day_271_365 TYPE wtgxxx,
day_m_365 TYPE wtgxxx,
total TYPE wtgxxx,
maktx TYPE makt-maktx,
mtart TYPE mara-mtart,
clabs TYPE mchbh-clabs,
price TYPE mbewh-verpr,
budat TYPE mkpf-budat,
END OF ty_final.
TYPES : BEGIN OF ty_month,
matnr TYPE mchbh-matnr,
werks TYPE mchbh-werks,
lgort TYPE mchbh-lgort,
charg TYPE mchbh-charg,
lfmon TYPE mchbh-lfmon,
lfgja TYPE mchbh-lfgja,
clabs TYPE mchbh-clabs,
cinsm TYPE mchbh-cinsm,
cspem TYPE mchbh-cspem,
ceinm TYPE mchbh-ceinm,
cretm TYPE mchbh-cretm,
END OF ty_month.
TYPES:BEGIN OF ty_mtart, " Validating Material Number and Material Type From Mara
matnr TYPE mara-matnr, " Material Number
mtart TYPE mara-mtart, " material Type
END OF ty_mtart.
TYPES:BEGIN OF ty_werks, " Validating Matrial Number and Plant from MARC Table
matnr TYPE marc-matnr, " Material Number
werks TYPE marc-werks, " Plant
END OF ty_werks.
DATA: it_mtart TYPE TABLE OF ty_mtart.
DATA: it_werks TYPE TABLE OF ty_werks.
DATA : it_mchbh TYPE TABLE OF ty_mchbh, " MCHBH
wa_mchbh TYPE ty_mchbh,
it_mchbh1 TYPE TABLE OF ty_mchbh, " MCHBH1
wa_mchbh1 TYPE ty_mchbh,
it_mchbh2 TYPE TABLE OF ty_mchbh, " MCHBH2
wa_mchbh2 TYPE ty_mchbh,
it_mchb TYPE TABLE OF ty_mchb, " MCHB
wa_mchb TYPE ty_mchb,
it_mchb1 TYPE TABLE OF ty_mchb, " MCHB1
wa_mchb1 TYPE ty_mchb,
it_matnr TYPE TABLE OF ty_matnr, " MARA
wa_matnr TYPE ty_matnr,
it_mbewh TYPE TABLE OF ty_mbewh, " MBEWH
wa_mbewh TYPE ty_mbewh,
it_mbewh1 TYPE TABLE OF ty_mbewh, " MBEWH1
wa_mbewh1 TYPE ty_mbewh,
it_mbew TYPE TABLE OF ty_mbewh, " MBEW
wa_mbew TYPE ty_mbewh,
it_mbew1 TYPE TABLE OF ty_mbewh, " MBEW1
wa_mbew1 TYPE ty_mbewh,
it_mbew2 TYPE TABLE OF ty_mbewh, " MBEW2
wa_mbew2 TYPE ty_mbewh,
it_final TYPE TABLE OF ty_final, " Final Output
wa_final TYPE ty_final,
it_month TYPE TABLE OF ty_month, " Month
wa_month TYPE ty_month.
*&---------------------------------------------------------------------*
*& Variables Declaration *
*&---------------------------------------------------------------------*
DATA : mblnr TYPE mseg-mblnr.
DATA : p_date1 TYPE char10. "sy-datum.
DATA : p_date TYPE sy-datum.
DATA : month LIKE t009b-bumon.
DATA : year LIKE t009b-bdatj.
DATA : days LIKE t009b-butag.
DATA : wd0 TYPE sy-datum,
wd30 TYPE sy-datum,
wd31 TYPE sy-datum,
wd60 TYPE sy-datum,
wd61 TYPE sy-datum,
wd90 TYPE sy-datum,
wd91 TYPE sy-datum,
wd120 TYPE sy-datum,
wd121 TYPE sy-datum,
wd180 TYPE sy-datum,
wd181 TYPE sy-datum,
wd270 TYPE sy-datum,
wd271 TYPE sy-datum,
wd365 TYPE sy-datum,
wd15 TYPE sy-datum,
wd16 TYPE sy-datum,
wd17 TYPE sy-datum,
wd18 TYPE sy-datum.
DATA : x1 TYPE mchbh-lfmon.
DATA : lfmon TYPE mchbh-lfmon.
DATA : v_name2 TYPE t001w-name2.
*&---------------------------------------------------------------------*
*& Include ZMM_STOCK_AGEING_SEL
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Selection-screen *
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-t01.
SELECTION-SCREEN BEGIN OF BLOCK var WITH FRAME TITLE variant.
* SELECTION-SCREEN : BEGIN OF LINE.
* SELECTION-SCREEN : COMMENT (29) text-004.
PARAMETERS : spmon TYPE spmon OBLIGATORY.
SELECT-OPTIONS : s_werks FOR mchbh-werks OBLIGATORY.
* SELECTION-SCREEN : END OF LINE.
SELECTION-SCREEN : BEGIN OF LINE.
SELECTION-SCREEN : COMMENT (29) text-003.
PARAMETERS: agedays1(3) TYPE n OBLIGATORY DEFAULT '30' MODIF ID G1.
PARAMETERS: agedays2(3) TYPE n OBLIGATORY DEFAULT '60' MODIF ID G1.
PARAMETERS: agedays3(3) TYPE n OBLIGATORY DEFAULT '90' MODIF ID G1.
PARAMETERS: agedays4(3) TYPE n OBLIGATORY DEFAULT '120' MODIF ID G1.
PARAMETERS: agedays5(3) TYPE n OBLIGATORY DEFAULT '180' MODIF ID G1.
PARAMETERS: agedays6(3) TYPE n OBLIGATORY DEFAULT '270' MODIF ID G1.
PARAMETERS: agedays7(3) TYPE n OBLIGATORY DEFAULT '365' MODIF ID G1.
SELECTION-SCREEN : END OF LINE.
" Optional
SELECTION-SCREEN SKIP. " Break Line
SELECT-OPTIONS : s_matnr FOR mchbh-matnr,
s_mart FOR mara-mtart,
s_lgort FOR mchbh-lgort,
s_charg FOR mchbh-charg.
SELECTION-SCREEN SKIP.
*PARAMETERS : r1 RADIOBUTTON GROUP rb ,
* r2 RADIOBUTTON GROUP rb.
SELECTION-SCREEN END OF BLOCK var.
SELECTION-SCREEN END OF BLOCK blk1.
*& Include ZMM_STOCK_AGEING_SUB
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Init*&---------------------------------------------------------------------*
ialization Event *
*&---------------------------------------------------------------------*
INITIALIZATION.
* MESSAGE 'Please Enter Current Month and Year' TYPE 'I'.
*&---------------------------------------------------------------------*
*& At Selection Screen *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
* validating Plant
*&---------------------------------------------------------------------*
DATA:l_werks TYPE werks_d.
SELECT SINGLE werks
INTO l_werks
FROM marc
WHERE werks IN s_werks.
IF sy-subrc <> 0 .
MESSAGE: 'Plant Number Not Found...' TYPE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
* validating Material Type
*&---------------------------------------------------------------------*
SELECT matnr " Material Number
mtart " Material Type
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_mtart
WHERE mtart IN s_mart.
IF sy-subrc <> 0 .
MESSAGE: 'Material Type Not Found For This Material Number...' TYPE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
* validating Material No and Plant
*&---------------------------------------------------------------------*
SELECT matnr " Material number
werks " Plant
FROM marc
INTO CORRESPONDING FIELDS OF TABLE it_werks
WHERE werks IN s_werks
AND matnr IN s_matnr.
IF sy-subrc <> 0 .
MESSAGE: 'Plant and Material Number Not Found...' TYPE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
* validating AgeDays
*&---------------------------------------------------------------------*
LOOP AT SCREEN.
IF screen-name = 'AGEDAYS1'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS2'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS3'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS4'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS5'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS6'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'AGEDAYS7'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Start of Selection Event *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_data.
PERFORM get_com_dtl.
break basis.
IF it_mchbh[] IS NOT INITIAL.
PERFORM alv_fieldcat.
PERFORM get_events.
PERFORM sub_comment_build USING t_list_top_of_page.
PERFORM alv_display.
ELSE.
MESSAGE 'No Data Found' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data.
break basis.
SELECT matnr " Material Number
mtart " Material Type
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_matnr
WHERE matnr IN s_matnr
AND mtart IN s_mart.
* and mtart in ('ROH','VERP','ZERP','HALB','FERT','ZERT','HAWA').
IF sy-subrc = 0.
SORT it_matnr BY matnr.
DELETE ADJACENT DUPLICATES FROM it_matnr COMPARING matnr.
ENDIF.
*&---------------------------------------------------------------------*
IF it_matnr IS NOT INITIAL. " it_mchbh2
SELECT matnr " Material Number
werks " Plant
lgort " Storage Location
charg " Batch Number
lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
clabs " Valuated Unrestricted-Use Stock
cumlm " Stock in transfer (from one storage location to another)
cinsm " Stock in Quality Inspection
ceinm " Total Stock of All Restricted Batches
cspem " Blocked Stock
cretm " Blocked Stock Returns
FROM mchbh
INTO CORRESPONDING FIELDS OF TABLE it_mchbh2
FOR ALL ENTRIES IN it_matnr
WHERE matnr = it_matnr-matnr
AND werks IN s_werks
AND lgort IN s_lgort.
ENDIF.
SORT it_mchbh2 BY matnr
werks
lgort
charg
lfgja
lfmon.
DELETE ADJACENT DUPLICATES FROM it_mchbh2 COMPARING matnr
werks
lgort
charg. "lfgja lfmon.
*&---------------------------------------------------------------------*
IF s_charg[] IS NOT INITIAL.
DELETE it_mchbh2 WHERE charg NOT IN s_charg.
ENDIF.
IF it_matnr[] IS NOT INITIAL. " it_mchbh
SELECT matnr " Material Number
werks " Plant
lgort " Storage Location
charg " Batch Number
lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
clabs " Valuated Unrestricted-Use Stock
cumlm " Stock in transfer (from one storage location to another)
cinsm " Stock in Quality Inspection
ceinm " Total Stock of All Restricted Batches
cspem " Blocked Stock
cretm " Blocked Stock Returns
FROM mchbh
INTO CORRESPONDING FIELDS OF TABLE it_mchbh
FOR ALL ENTRIES IN it_matnr
WHERE matnr = it_matnr-matnr
AND werks IN s_werks
AND lgort IN s_lgort
AND charg IN s_charg
AND lfgja = spmon+0(4)
AND lfmon = spmon+4(2).
SELECT matnr " Material Number
werks " Plant
lgort " Storage Location
charg " Batch Number
lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
clabs " Valuated Unrestricted-Use Stock
cumlm " Stock in transfer (from one storage location to another)
cinsm " Stock in Quality Inspection
ceinm " Total Stock of All Restricted Batches
cspem " Blocked Stock
cretm " Blocked Stock Returns
FROM mchb
INTO CORRESPONDING FIELDS OF TABLE it_mchb
FOR ALL ENTRIES IN it_matnr
WHERE matnr = it_matnr-matnr
AND werks IN s_werks
AND lgort IN s_lgort
AND charg IN s_charg.
ENDIF.
SORT it_mchbh BY matnr
werks
lgort
charg
lfgja
lfmon.
DELETE ADJACENT DUPLICATES FROM it_mchbh COMPARING matnr
werks
lgort
charg
lfgja
lfmon.
SORT it_mchb BY matnr
werks
lgort
charg
lfgja
lfmon.
DELETE ADJACENT DUPLICATES FROM it_mchb COMPARING matnr
werks
lgort
charg
lfgja
lfmon.
*&---------------------------------------------------------------------*
LOOP AT it_mchbh2 INTO wa_mchbh2. " Start it_mchbh2 Loop
READ TABLE it_mchbh INTO wa_mchbh WITH KEY matnr = wa_mchbh2-matnr
werks = wa_mchbh2-werks
lgort = wa_mchbh2-lgort
charg = wa_mchbh2-charg. " it_mchbh
IF sy-subrc EQ 0.
wa_mchbh2-flag = 'X'.
ENDIF.
MODIFY it_mchbh2 FROM wa_mchbh2.
CLEAR wa_mchbh2.
ENDLOOP. " Finish it_mchbh2 Loop
DELETE it_mchbh2 WHERE flag = 'X'.
*&---------------------------------------------------------------------*
break 10115.
IF it_mchbh2[] IS NOT INITIAL.
LOOP AT it_mchbh2 INTO wa_mchbh2. " Start it_mchbh2 Loop
wa_mchbh2-lfgja = '0000'.
wa_mchbh2-lfmon = '00'.
wa_mchbh2-clabs = 0.
wa_mchbh2-cinsm = 0.
wa_mchbh2-cumlm = 0.
wa_mchbh2-cspem = 0.
wa_mchbh2-ceinm = 0.
wa_mchbh2-cretm = 0.
MODIFY it_mchbh2 FROM wa_mchbh2.
CLEAR wa_mchbh2.
ENDLOOP. " Finish it_mchbh2 Loop
ENDIF.
*&---------------------------------------------------------------------*
break 10115.
IF it_mchbh2[] IS NOT INITIAL. " it_mchbh2[]
LOOP AT it_mchbh2 INTO wa_mchbh2. " Start it_mchbh2 Loop
wa_month-matnr = wa_mchbh2-matnr.
wa_month-werks = wa_mchbh2-werks.
wa_month-lgort = wa_mchbh2-lgort.
wa_month-charg = wa_mchbh2-charg.
*&---------------------------------------------------------------------*
****For Min Month And Year
*&---------------------------------------------------------------------*
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mchbh
INTO wa_month-lfgja
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg
AND lfgja => spmon+0(4).
IF wa_month-lfgja = spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mchbh
INTO wa_month-lfmon
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg
AND lfgja = wa_month-lfgja
AND lfmon => spmon+4(2).
ENDIF.
IF wa_month-lfmon < spmon+4(2).
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mchbh
INTO wa_month-lfgja
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg
AND lfgja > spmon+0(4).
ENDIF.
IF wa_month-lfgja > spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mchbh
INTO wa_month-lfmon
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg
AND lfgja = wa_month-lfgja.
ENDIF.
*&---------------------------------------------------------------------*
****For Qty.
*&---------------------------------------------------------------------*
SELECT SINGLE clabs " Valuated Unrestricted-Use Stock
cinsm " Stock in Quality Inspection
cspem " Blocked Stock
ceinm " Total Stock of All Restricted Batches
cretm " Blocked Stock Returns
FROM mchbh
INTO (wa_month-clabs,
wa_month-cinsm,
wa_month-cspem,
wa_month-ceinm,
wa_month-cretm)
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg
AND lfgja = wa_month-lfgja
AND lfmon = wa_month-lfmon.
IF sy-subrc NE 0.
SELECT SINGLE lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
clabs " Valuated Unrestricted-Use Stock
cinsm " Stock in Quality Inspection
cspem " Blocked Stock
ceinm " Total Stock of All Restricted Batches
cretm " Blocked Stock Returns
FROM mchb
INTO (wa_month-lfgja,
wa_month-lfmon,
wa_month-clabs,
wa_month-cinsm,
wa_month-cspem,
wa_month-ceinm,
wa_month-cretm)
WHERE matnr = wa_month-matnr
AND werks = wa_month-werks
AND lgort = wa_month-lgort
AND charg = wa_month-charg.
ENDIF.
APPEND wa_month TO it_month.
CLEAR : wa_month,lfmon.
ENDLOOP. " Finish it_mchbh2 Loop
ENDIF. " it_mchbh2[]
SORT it_month BY matnr
werks
lgort
charg
lfgja
lfmon.
DELETE ADJACENT DUPLICATES FROM it_month COMPARING matnr
werks
lgort
charg.
LOOP AT it_month INTO wa_month. " Start it_month
MOVE-CORRESPONDING wa_month TO wa_mchbh.
APPEND wa_mchbh TO it_mchbh.
CLEAR wa_mchbh. " Finish it_month
ENDLOOP.
*&---------------------------------------------------------------------*
IF it_mchbh[] IS NOT INITIAL. " it_mbewh
SELECT matnr " Material Number
lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
lbkum " Total Valuated Stock
salk3 " Value of Total Valuated Stock
vprsv " Price Control Indicator
verpr " Moving Average Price/Periodic Unit Price
stprs " Standard price
FROM mbewh
INTO CORRESPONDING FIELDS OF TABLE it_mbewh
FOR ALL ENTRIES IN it_mchbh
WHERE matnr = it_mchbh-matnr
AND lfmon = spmon+4(2)
AND lfgja = spmon+0(4)
AND bwkey = it_mchbh-werks.
SELECT matnr " Material Number
lfgja " Fiscal Year of Current Period
lfmon " Current period (posting period)
lbkum " Total Valuated Stock
salk3 " Value of Total Valuated Stock
vprsv " Price Control Indicator
verpr " Moving Average Price/Periodic Unit Price
stprs " Standard price
FROM mbew
INTO CORRESPONDING FIELDS OF TABLE it_mbew
FOR ALL ENTRIES IN it_mchbh
WHERE matnr = it_mchbh-matnr
AND lfmon = spmon+4(2)
AND lfgja = spmon+0(4)
AND bwkey = it_mchbh-werks.
ENDIF.
LOOP AT it_mchbh INTO wa_mchbh. " Start it_mchbh
READ TABLE it_matnr INTO wa_matnr WITH KEY matnr = wa_mchbh-matnr.
IF sy-subrc = 0.
wa_mchbh-mtart = wa_matnr-mtart.
ENDIF.
SELECT SINGLE maktx
FROM makt
INTO wa_mchbh-maktx
WHERE matnr = wa_mchbh-matnr.
IF wa_mchbh-mtart = 'ROH' OR
wa_mchbh-mtart = 'VERP' OR
wa_mchbh-mtart = 'ZERP'.
SELECT SINGLE a~lwedt " Moving (LWEDT)Date of last goods receipt to (BUDAT)Posting Date in the Document
INTO wa_mchbh-budat
FROM mch1 AS a
INNER JOIN mcha AS b
ON a~matnr = b~matnr
AND a~charg = b~charg
WHERE a~matnr = wa_mchbh-matnr
AND a~charg = wa_mchbh-charg
AND a~lvorm = space
AND b~werks = wa_mchbh-werks.
ELSEIF wa_mchbh-mtart = 'HALB' OR
wa_mchbh-mtart = 'FERT' OR
wa_mchbh-mtart = 'ZERT' OR
wa_mchbh-mtart = 'HAWA'.
SELECT SINGLE a~hsdat " Moving (HSDAT)Date of Manufacture to (BUDAT)Posting Date in the Document
INTO wa_mchbh-budat
FROM mch1 AS a
INNER JOIN mcha AS b
ON a~matnr = b~matnr
AND a~charg = b~charg
WHERE a~matnr = wa_mchbh-matnr
AND a~charg = wa_mchbh-charg
AND a~lvorm = space
AND b~werks = wa_mchbh-werks.
ENDIF.
READ TABLE it_mbewh INTO wa_mbewh WITH KEY matnr = wa_mchbh-matnr.
IF sy-subrc = 0.
IF wa_mchbh-mtart = 'ROH' OR
wa_mchbh-mtart = 'VERP' OR
wa_mchbh-mtart = 'ZERP'.
wa_mchbh-price = wa_mbewh-verpr.
wa_mchbh-value = ( wa_mchbh-clabs +
wa_mchbh-cinsm +
wa_mchbh-cspem +
wa_mchbh-ceinm +
wa_mchbh-cretm ) *
wa_mchbh-price.
ELSEIF wa_mchbh-mtart = 'HALB' OR
wa_mchbh-mtart = 'FERT' OR
wa_mchbh-mtart = 'ZERT' OR
wa_mchbh-mtart = 'HAWA'.
wa_mchbh-price = wa_mbewh-stprs.
wa_mchbh-value = ( wa_mchbh-clabs +
wa_mchbh-cinsm +
wa_mchbh-cspem +
wa_mchbh-ceinm +
wa_mchbh-cretm ) *
wa_mchbh-price.
ENDIF.
ENDIF.
MODIFY it_mchbh FROM wa_mchbh.
CLEAR wa_mchbh.
ENDLOOP. " Finish it_mchbh
*&---------------------------------------------------------------------*
break abapdev2.
LOOP AT it_mchbh INTO wa_mchbh WHERE price EQ 0.
*&---------------------------------------------------------------------*
****For Min Year For Price
*&---------------------------------------------------------------------*
IF wa_mchbh-mtart = 'ROH' OR
wa_mchbh-mtart = 'VERP' OR
wa_mchbh-mtart = 'ZERP'.
*****
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mbewh
INTO wa_mchbh1-lfgja
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja => spmon+0(4)
AND verpr NE 0.
ELSEIF wa_mchbh-mtart = 'HALB' OR
wa_mchbh-mtart = 'FERT' OR
wa_mchbh-mtart = 'ZERT' OR
wa_mchbh-mtart = 'HAWA'.
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mbewh
INTO wa_mchbh1-lfgja
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja => spmon+0(4)
AND stprs NE 0.
ENDIF.
*&---------------------------------------------------------------------*
****For Min Month For Price
*&---------------------------------------------------------------------*
IF wa_mchbh-mtart = 'ROH' OR
wa_mchbh-mtart = 'VERP' OR
wa_mchbh-mtart = 'ZERP'.
IF wa_mchbh1-lfgja = spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mbewh
INTO wa_mchbh1-lfmon
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND lfmon => spmon+4(2)
AND verpr NE 0.
ENDIF.
IF wa_mchbh1-lfmon < spmon+4(2).
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mbewh
INTO wa_mchbh1-lfgja
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja > spmon+0(4)
AND verpr NE 0.
ENDIF.
IF wa_mchbh1-lfgja > spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mbewh
INTO wa_mchbh1-lfmon
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND verpr NE 0.
ENDIF.
ELSEIF wa_mchbh-mtart = 'HALB' OR
wa_mchbh-mtart = 'FERT' OR
wa_mchbh-mtart = 'ZERT' OR
wa_mchbh-mtart = 'HAWA'.
IF wa_mchbh1-lfgja = spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mbewh
INTO wa_mchbh1-lfmon
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND lfmon => spmon+4(2)
AND stprs NE 0.
ENDIF.
IF wa_mchbh1-lfmon < spmon+4(2).
SELECT SINGLE MIN( lfgja ) " Fiscal Year of Current Period
FROM mbewh
INTO wa_mchbh1-lfgja
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja > spmon+0(4)
AND stprs NE 0.
ENDIF.
IF wa_mchbh1-lfgja > spmon+0(4).
SELECT SINGLE MIN( lfmon ) " Current period (posting period)
FROM mbewh
INTO wa_mchbh1-lfmon
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND stprs NE 0.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
****For price.
*&---------------------------------------------------------------------*
IF wa_mchbh-mtart = 'ROH' OR
wa_mchbh-mtart = 'VERP' OR
wa_mchbh-mtart = 'ZERP'.
SELECT SINGLE verpr " Moving Average Price/Periodic Unit Price
FROM mbewh
INTO wa_mchbh-price
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND lfmon = wa_mchbh1-lfmon.
IF sy-subrc NE 0.
SELECT SINGLE verpr " Moving Average Price/Periodic Unit Price
FROM mbew
INTO wa_mchbh-price
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks.
ENDIF.
ELSEIF wa_mchbh-mtart = 'HALB' OR
wa_mchbh-mtart = 'FERT' OR
wa_mchbh-mtart = 'ZERT' OR
wa_mchbh-mtart = 'HAWA'.
SELECT SINGLE stprs " Standard price
FROM mbewh
INTO wa_mchbh-price
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks
AND lfgja = wa_mchbh1-lfgja
AND lfmon = wa_mchbh1-lfmon.
IF sy-subrc NE 0.
SELECT SINGLE stprs " Standard price
FROM mbew
INTO wa_mchbh-price
WHERE matnr = wa_mchbh-matnr
AND bwkey = wa_mchbh-werks.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
****for value
*&---------------------------------------------------------------------*
wa_mchbh-value = ( wa_mchbh-clabs +
wa_mchbh-cinsm +
wa_mchbh-cspem +
wa_mchbh-ceinm +
wa_mchbh-cretm ) *
wa_mchbh-price.
MODIFY it_mchbh FROM wa_mchbh.
CLEAR : wa_mchbh,wa_mchbh1.
ENDLOOP.
SORT it_mchbh BY matnr charg werks.
PERFORM get_p_date.
PERFORM date_seting.
LOOP AT it_mchbh INTO wa_mchbh.
wa_final-matnr = wa_mchbh-matnr.
wa_final-werks = wa_mchbh-werks.
wa_final-lgort = wa_mchbh-lgort.
wa_final-charg = wa_mchbh-charg.
wa_final-clabs = wa_mchbh-clabs + " Quantity Field
wa_mchbh-cinsm +
wa_mchbh-cspem +
wa_mchbh-ceinm +
wa_mchbh-cretm.
* IF r1 = 'X'.
****For Ageing Value
IF wa_mchbh-budat BETWEEN wd0 AND wd30.
wa_final-day_0_30 = wa_final-day_0_30 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd31 AND wd60.
wa_final-day_31_60 = wa_final-day_31_60 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd61 AND wd90.
wa_final-day_61_90 = wa_final-day_61_90 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd91 AND wd120.
wa_final-day_91_120 = wa_final-day_91_120 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd121 AND wd180.
wa_final-day_121_180 = wa_final-day_121_180 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd181 AND wd270.
wa_final-day_181_270 = wa_final-day_181_270 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat BETWEEN wd271 AND wd365.
wa_final-day_271_365 = wa_final-day_271_365 + wa_mchbh-value.
ENDIF.
IF wa_mchbh-budat < wd271.
wa_final-day_m_365 = wa_final-day_m_365 + wa_mchbh-value.
ENDIF.
* IF wa_mchbh-budat > wd30.
*
* wa_final-value = wa_final-value + wa_mchbh-value.
wa_final-value = wa_final-clabs * wa_mchbh-price.
*
* ENDIF.
* ELSEIF r2 = 'X'.
* IF wa_mchbh-budat BETWEEN wd0 AND wd30.
* wa_final-day_0_30 = wa_final-day_0_30 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd31 AND wd60.
* wa_final-day_31_60 = wa_final-day_31_60 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd61 AND wd90.
* wa_final-day_61_90 = wa_final-day_61_90 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd91 AND wd120.
* wa_final-day_91_120 = wa_final-day_91_120 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd121 AND wd180.
* wa_final-day_121_180 = wa_final-day_121_180 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd181 AND wd270.
* wa_final-day_181_270 = wa_final-day_181_270 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat BETWEEN wd271 AND wd365.
* wa_final-day_271_365 = wa_final-day_271_365 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat < wd271.
* wa_final-day_m_365 = wa_final-day_m_365 +
* wa_final-clabs.
* ENDIF.
*
* IF wa_mchbh-budat > wd30.
* wa_final-value = wa_final-value +
* wa_final-clabs.
* ENDIF.
* ENDIF.
APPEND wa_final TO it_final.
CLEAR : wa_final.
ENDLOOP.
LOOP AT it_final INTO wa_final.
READ TABLE it_mchbh INTO wa_mchbh WITH KEY matnr = wa_final-matnr
werks = wa_final-werks
lgort = wa_final-lgort
charg = wa_final-charg.
IF sy-subrc = 0.
wa_final-maktx = wa_mchbh-maktx.
wa_final-mtart = wa_mchbh-mtart.
wa_final-price = wa_mchbh-price.
wa_final-budat = wa_mchbh-budat.
ENDIF.
SELECT SINGLE meins " Base Unit of Measure
FROM mara
INTO wa_final-meins
WHERE matnr = wa_final-matnr.
wa_final-total = wa_final-day_0_30 +
wa_final-day_31_60 +
wa_final-day_61_90 +
wa_final-day_91_120 +
wa_final-day_121_180 +
wa_final-day_181_270 +
wa_final-day_271_365 +
wa_final-day_m_365 +
wa_final-value.
MODIFY it_final FROM wa_final.
CLEAR wa_final.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM it_final COMPARING matnr
werks
lgort
charg.
DELETE it_final WHERE clabs IS INITIAL.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form ALV_FIELDCAT
*&---------------------------------------------------------------------*
FORM alv_fieldcat .
DATA: counter TYPE i.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Plant'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-outputlen = '6'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'MTART'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Material Type'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-outputlen = '5'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Material'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-outputlen = '20'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-outputlen = '18'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Material Desc.'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-outputlen = '10'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'UOM'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-outputlen = '20'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-outputlen = '3'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'LGORT'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Storage Loc.'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'CHARG'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Batch'.
wa_fieldcat-emphasize = 'C700'.
* wa_fieldcat-no_zero = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'BUDAT'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Date Of GR'. " Dates Fetching From MCH1
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-outputlen = '10'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'CLABS'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Quantity'.
wa_fieldcat-emphasize = 'C700'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'PRICE'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Price'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
* wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'VALUE'. " ( Quantity * Price )
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Value'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_0_30'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '00 - 30 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_31_60'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '31 - 60 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_61_90'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '61 - 90 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-emphasize = 'C700'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_91_120'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '91 - 120 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_121_180'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '121 - 180 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_181_270'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '181 - 270 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_271_365'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = '271 - 365 Days'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'C700'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'DAY_M_365'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'More then 365 Days'.
wa_fieldcat-emphasize = 'C600'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'TOTAL'.
wa_fieldcat-tabname = 'IT_FINAL'.
wa_fieldcat-seltext_l = 'Total'.
* wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
wa_fieldcat-emphasize = 'X'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
*
*Build sort catalog
wa_sort-spos = 1.
wa_sort-fieldname = 'MATNR'.
wa_sort-up = 'X'.
wa_sort-subtot = 'X'.
wa_sort-expa = 'X'.
APPEND wa_sort TO it_sort.
ENDFORM. " ALV_FIELDCAT
*&---------------------------------------------------------------------*
*& Form GET_EVENTS
*&---------------------------------------------------------------------*
FORM get_events .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_events[]
EXCEPTIONS
list_type_wrong = 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.
READ TABLE it_events WITH KEY name = slis_ev_top_of_page
INTO it_events.
IF sy-subrc = 0.
MOVE t_formname_top_of_page TO it_events-form.
APPEND it_events.
ENDIF.
ENDFORM. " GET_EVENTS
*&---------------------------------------------------------------------*
*& Form SUB_COMMENT_BUILD
*&---------------------------------------------------------------------*
FORM sub_comment_build USING i_top_of_page TYPE slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
DATA: wrk_name TYPE string.
DATA: spmon2 TYPE string.
DATA: l_plant(50) TYPE c. " Plant Name Label.
SELECT name1
FROM t001w
INTO l_plant
WHERE werks IN s_werks.
ENDSELECT.
wrk_name = v_name2. "'ABC LTD'.
CONCATENATE spmon+4(2) '.' spmon+0(4) INTO spmon2.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = wrk_name.
APPEND ls_line TO i_top_of_page.
ls_line-typ = 'H'.
ls_line-info = 'Material Ageing Report'.
APPEND ls_line TO i_top_of_page.
ls_line-typ = 'S'. " Plant Name
ls_line-key = 'Plant'.
CONCATENATE l_plant '.' INTO ls_line-info.
APPEND ls_line TO i_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'. " System Date
ls_line-key = 'Date'. " populating its value into
CONCATENATE sy-datum+6(2)'.'
sy-datum+4(2)'.'
sy-datum(4)
INTO ls_line-info." IT_TOP_OF_PAGE.
APPEND ls_line TO i_top_of_page.
CLEAR ls_line.
"top_page is working area and
ls_line-typ = 'S'. " User Name
ls_line-key = 'User'. " populating its value into
CONCATENATE sy-uname '.'
INTO ls_line-info." IT_TOP_OF_PAGE.
APPEND ls_line TO i_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'Ageing For :-'.
ls_line-info = spmon2.
APPEND ls_line TO i_top_of_page.
ENDFORM. " SUB_COMMENT_BUILD
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_list_top_of_page.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
FORM alv_display .
gs_layout-zebra = 'X'.
gs_layout-detail_popup = 'X'.
gs_layout-detail_initial_lines = 'X'.
* gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fieldcat
it_events = it_events[]
i_callback_program = sy-repid
is_layout = gs_layout
it_sort = it_sort
i_save = g_save
is_variant = gx_variant
* i_callback_pf_status_set = 'ZSTANDARD'
* i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = it_final[].
.
ENDFORM. " ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form GET_P_DATE
*&---------------------------------------------------------------------*
FORM get_p_date .
IF spmon IS NOT INITIAL.
CLEAR : p_date,p_date1,month,year.
month = spmon+4(2).
year = spmon+0(4).
CALL FUNCTION 'NUMBER_OF_DAYS_PER_MONTH_GET'
EXPORTING
par_month = month
par_year = year
IMPORTING
par_days = days.
IF days IS NOT INITIAL.
CONCATENATE days '.' spmon+4(2) '.' spmon+0(4) INTO p_date1.
CONCATENATE spmon+0(4) spmon+4(2) days INTO p_date.
* p_date = p_date1.
ENDIF.
ENDIF.
ENDFORM. " GET_P_DATE
*&---------------------------------------------------------------------*
*& Form DATE_SETING
*&---------------------------------------------------------------------*
FORM date_seting .
CLEAR:wd0,wd30,wd31,wd60,wd61,wd90,wd91,wd120,
wd121,wd180,wd181,wd270,wd271,wd365,wd15.
****
* 0 - 30 DAYS
wd30 = p_date.
DATA:wa_duration LIKE psen_duration_dec,
w_date TYPE endda.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays1."'30'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd0 = w_date.
****
* 31 - 60 DAYS
*wd31 = wd30 - 60.
*wd60 = wd30 - 31.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays2."'60'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd31 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays1 + 1."'31'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd60 = w_date.
****
* 61 - 90 DAYS
*wd61 = wd30 - 90.
*wd90 = wd30 - 61.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays3." '90'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd61 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays2 + 1."'61'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd90 = w_date.
****
* 91 - 120 DAYS
*wd91 = wd30 - 120.
*wd120 = wd30 - 91.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays4."'120'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd91 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays3 + 1."'91'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd120 = w_date.
****
* 121 - 180 DAYS
*wd121 = wd30 - 180.
*wd180 = wd30 - 121.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays5."'180'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd121 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays3 + 1."'121'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd180 = w_date.
****
* 181 - 270 DAYS
*wd270 = wd30 - 181.
*wd181 = wd30 - 270.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays5."'181'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd270 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays6."'270'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd181 = w_date.
****
* 271 - 365 DAYS
*wd365 = wd30 - 271.
*wd271 = wd30 - 365.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays6 + 1."'271'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd365 = w_date.
CLEAR:wa_duration,w_date.
wa_duration-caldd = agedays7." '365'.
PERFORM date_duration USING wa_duration
CHANGING w_date.
wd271 = w_date.
ENDFORM. " DATE_SETING
*&---------------------------------------------------------------------*
*& Form DATE_DURATION
*&---------------------------------------------------------------------*
FORM date_duration USING p_wa_duration
CHANGING p_w_date.
CALL FUNCTION 'HR_SEN_CALE_DAYS_DATE'
EXPORTING
id_date = p_date
id_operator = '-'
is_duration = p_wa_duration
IMPORTING
ed_date = p_w_date
EXCEPTIONS
conversion_not_specified = 1
conversion_not_possible = 2
OTHERS = 3.
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. " DATE_DURATION
*&---------------------------------------------------------------------*
*& Form GET_COM_DTL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_com_dtl .
SELECT SINGLE name2 FROM t001w INTO v_name2 WHERE werks = s_werks-low.
ENDFORM. " GET_COM_DTL
Created By:- Nikunj Patel.
DATA: lv_current_date TYPE sy-datum,
ReplyDeletelv_received_date TYPE sy-datum,
lv_age TYPE i.
GET TIME FIELD lv_current_date.
lv_received_date = wa_material_age-received_date.
CALL FUNCTION 'DATE_DIFFERENCE'
EXPORTING
start_date = lv_received_date
end_date = lv_current_date
IMPORTING
difference = lv_age.
REPORT zmaterial_aging.
ReplyDeleteDATA: lt_mseg TYPE TABLE OF mseg,
wa_mseg TYPE mseg,
lv_material_number TYPE matnr,
lv_plant TYPE werks,
lv_movement_type TYPE bwart,
lv_storage_location TYPE lgort,
lv_sum_quantity TYPE menge.
PARAMETERS: p_material_number TYPE matnr,
p_plant TYPE werks,
p_movement_type TYPE bwart,
p_storage_location TYPE lgort.
SELECT * FROM mseg
INTO TABLE lt_mseg
WHERE matnr = p_material_number
AND werks = p_plant
AND bwart = p_movement_type
AND lgort = p_storage_location.
LOOP AT lt_mseg INTO wa_mseg.
lv_sum_quantity = lv_sum_quantity + wa_mseg-menge.
ENDLOOP.
WRITE: / 'Material Number:', p_material_number,
/ 'Plant:', p_plant,
/ 'Movement Type:', p_movement_type,
/ 'Storage Location:', p_storage_location,
/ 'Sum of Quantity:', lv_sum_quantity.
REPORT Z_AGING_REPORT.
ReplyDeleteDATA: lt_mseg TYPE TABLE OF mseg,
ls_mseg TYPE mseg,
lt_t156 TYPE TABLE OF t156,
ls_t156 TYPE t156,
lt_result TYPE TABLE OF zaging_result,
ls_result TYPE zaging_result.
PARAMETERS: p_plant TYPE werks_d,
p_matnr TYPE matnr.
START-OF-SELECTION.
SELECT *
FROM mseg
INTO TABLE lt_mseg
WHERE bwart IN ('101', '102') " Movement types for goods receipts
AND werks = p_plant
AND matnr = p_matnr
AND budat >= '20120101'. " Data available after 2012-01-01
SELECT *
FROM t156
INTO TABLE lt_t156
WHERE spras = sy-langu.
LOOP AT lt_mseg INTO ls_mseg.
LOOP AT lt_t156 INTO ls_t156
WHERE bwart = ls_mseg-bwart.
CLEAR ls_result.
ls_result-movement_type = ls_mseg-bwart.
ls_result-movement_text = ls_t156-btext.
" Calculate age in days
ls_result-age_days = CONV #( ( sy-datum - ls_mseg-budat ) ).
APPEND ls_result TO lt_result.
ENDLOOP.
ENDLOOP.
" Display the aging report
WRITE: / 'Plant:', p_plant,
'Material:', p_matnr,
'Movement Type', 25 'Movement Text', 50 'Age (Days)'.
LOOP AT lt_result INTO ls_result.
WRITE: / ls_result-movement_type, 25 ls_result-movement_text, 50 ls_result-age_days.
ENDLOOP.
TYPES: BEGIN OF zaging_result,
ReplyDeletemovement_type TYPE mseg-bwart,
movement_text TYPE t156-btext,
age_days TYPE i,
END OF zaging_result.
REPORT z_inventory_age_calculation.
ReplyDeleteDATA: lt_inventory TYPE TABLE OF z_inventory,
lv_current_date TYPE sy-datum.
* Populate the current date. You can use GET CURRENT DATETIME for more accuracy.
lv_current_date = sy-datum.
* Fetch data from Material Master and Goods Receipt tables into lt_inventory.
* You can adjust the SELECT statement based on your data model.
SELECT mara~matnr AS material_number,
mara~maktx AS material_description,
mseg~werks AS plant,
mseg~budat AS receipt_date,
mseg~menge AS quantity,
mseg~netpr AS value
FROM mara
INNER JOIN mseg ON mara~matnr = mseg~matnr
INTO TABLE @lt_inventory
WHERE mseg~budat BETWEEN '2023-01-01' AND '2023-07-31'. " Adjust date range
* Calculate the age and age bucket for each inventory item.
LOOP AT lt_inventory INTO DATA(ls_inventory).
DATA: lv_age TYPE i,
lv_age_bucket TYPE string.
" Calculate age (in days) based on receipt date
lv_age = lv_current_date - ls_inventory-receipt_date.
" Determine age bucket based on age
CASE.
WHEN lv_age <= 30.
lv_age_bucket = '0-30 days'.
WHEN lv_age <= 60.
lv_age_bucket = '31-60 days'.
WHEN lv_age <= 90.
lv_age_bucket = '61-90 days'.
WHEN lv_age <= 120.
lv_age_bucket = '91-120 days'.
ELSE.
lv_age_bucket = '>120 days'.
ENDCASE.
" Output the results
WRITE: / ls_inventory-material_number, ls_inventory-material_description,
ls_inventory-plant, ls_inventory-receipt_date,
lv_age, lv_age_bucket, ls_inventory-quantity, ls_inventory-value.
ENDLOOP.
REPORT z_inventory_age_calculation.
ReplyDeleteDATA: lt_inventory TYPE TABLE OF z_inventory, " Replace with your actual structure name
lv_current_date TYPE sy-datum.
* Populate the current date. You can use GET CURRENT DATETIME for more accuracy.
lv_current_date = sy-datum.
* Fetch data from Material Document Header table (MKPF) into lt_inventory.
* You can adjust the SELECT statement based on your data model.
SELECT mkpf~matnr AS material_number,
mkpf~bwart AS movement_type,
mkpf~budat AS document_date,
mkpf~werks AS plant,
mkpf~menge AS quantity
FROM mkpf
INTO TABLE @lt_inventory
WHERE mkpf~budat BETWEEN '2023-01-01' AND '2023-07-31' " Adjust date range
AND mkpf~bwart IN ('101', '261', '311'). " Specify relevant movement types
* Calculate the age and age bucket for each inventory item.
LOOP AT lt_inventory INTO DATA(ls_inventory).
DATA: lv_age TYPE i,
lv_age_bucket TYPE string.
" Calculate age (in days) based on document date
lv_age = lv_current_date - ls_inventory-document_date.
" Determine age bucket based on age
CASE.
WHEN lv_age <= 30.
lv_age_bucket = '0-30 days'.
WHEN lv_age <= 60.
lv_age_bucket = '31-60 days'.
WHEN lv_age <= 90.
lv_age_bucket = '61-90 days'.
WHEN lv_age <= 120.
lv_age_bucket = '91-120 days'.
ELSE.
lv_age_bucket = '>120 days'.
ENDCASE.
" Output the results
WRITE: / ls_inventory-material_number, ls_inventory-movement_type,
ls_inventory-document_date, ls_inventory-plant,
lv_age, lv_age_bucket, ls_inventory-quantity.
ENDLOOP.
*TYPE-POOLS: slis.
ReplyDelete*
**&---------------------------------------------------------------------*
*
**& ALV Data Declaration
*
**&---------------------------------------------------------------------*
*
*DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
*
*DATA: wa_fieldcat LIKE LINE OF it_fieldcat.
*
*
*
*DATA: t_list_top_of_page TYPE slis_t_listheader.
*
*
*
*DATA: it_events TYPE slis_t_event WITH HEADER LINE.
*
*DATA: g_save TYPE c VALUE 'A'.
*
**&---------------------------------------------------------------------*
*
**DATA: gt_sort TYPE slis_t_sortinfo_alv.
*
**&---------------------------------------------------------------------*
*
*DATA: gx_save TYPE c VALUE 'A'.
*
*
*
*DATA: gx_variant TYPE disvariant.
*
*DATA: g_variant TYPE disvariant.
*
*
*
*DATA: gs_layout TYPE slis_layout_alv.
*
*
*
*DATA: t_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
*
*
*
*DATA: t_i_event TYPE slis_alv_event.
*
*
*
*
*
**&---------------------------------------------------------------------*
*
**& Form ALV_SORT
*
**&---------------------------------------------------------------------*
*
*DATA: it_sort TYPE slis_t_sortinfo_alv,
*
* wa_sort TYPE slis_sortinfo_alv.
TABLES : matdoc.
TYPES : BEGIN OF st_matdoc,
matnr TYPE matnr,
werks TYPE werks_d,
lgort TYPE lgort_d,
bwart TYPE bwart,
wempf TYPE wempf,
menge TYPE menge_d,
budat TYPE budat,
END OF st_matdoc.
DATA : it_matdoc TYPE STANDARD TABLE OF st_matdoc,
wa_matdoc TYPE st_matdoc,
lv_current_date TYPE sy-datum.
lv_current_date = sy-datum.
SELECT-OPTIONS: s_matnr FOR matdoc-matnr,
s_werks FOR matdoc-werks,
s_lgort FOR matdoc-lgort,
s_bwart FOR matdoc-bwart,
s_wempf FOR matdoc-wempf.
* s_menge FOR matdoc-menge,
* s_BUDAT for matdoc-BUDAT.
SELECT matnr,
werks,
lgort,
bwart,
wempf,
menge,
BUDAT
FROM matdoc INTO TABLE @it_matdoc
WHERE budat BETWEEN '2023-01-01' AND '2023-07-31' " Adjust date range.
AND bwart IN ('101', '261', '311'). " Specify relevant movement types
LOOP AT it_matdoc INTO DATA(st_matdoc).
DATA: lv_age TYPE i,
lv_age_bucket TYPE string.
" Calculate age (in days) based on document date
lv_age = lv_current_date - matdoc-budat.
CASE.
WHEN lv_age <= 30.
lv_age_bucket = '0-30 days'.
WHEN lv_age <= 60.
lv_age_bucket = '31-60 days'.
WHEN lv_age <= 90.
lv_age_bucket = '61-90 days'.
WHEN lv_age <= 120.
lv_age_bucket = '91-120 days'.
when others.
lv_age_bucket = '>120 days' .
ENDCASE.
" Output the results
*WRITE: / ls_inventory-material_number, ls_inventory-movement_type,
*ls_inventory-document_date, ls_inventory-plant,
*lv_age, lv_age_bucket, ls_inventory-quantity.
WRITE: / wa_matdoc-matnr,wa_matdoc-werks,wa_matdoc-lgort,wa_matdoc-bwart,wa_matdoc-wempf,wa_matdoc-menge,wa_matdoc-BUDAT,lv_age, lv_age_bucket.
ENDLOOP.
*
*WRITE: / '|MATERIAL_NO|',42 'PLANT',49'STORAGE_LOC', 70'MOMENT_TY',90'GOODS_RECIEPT',116'QUANTITY',130'pst_date',
* sy-uline.
*LOOP AT it_matdoc INTO wa_matdoc.
*
*
* WRITE: / sy-vline,
* wa_matdoc-matnr,
* sy-vline,
* 42 wa_matdoc-werks,
* sy-vline,
* 49 wa_matdoc-lgort,
* sy-vline,
* 70 wa_matdoc-bwart,
* sy-vline,
* 90 wa_matdoc-wempf,
* sy-vline,
* 110 wa_matdoc-menge,
* sy-vline,
* 130 wa_matdoc-BUDAT,sy-vline,
* sy-uline(141).
*
* HIDE wa_matdoc-matnr.
*ENDLOOP.
TABLES : matdoc.
ReplyDeleteTYPES : BEGIN OF st_matdoc,
matnr TYPE matnr,
werks TYPE werks_d,
lgort TYPE lgort_d,
bwart TYPE bwart,
wempf TYPE wempf,
menge TYPE menge_d,
budat TYPE budat,
END OF st_matdoc.
DATA : it_matdoc TYPE STANDARD TABLE OF st_matdoc,
wa_matdoc TYPE st_matdoc,
lv_current_date TYPE sy-datum.
lv_current_date = sy-datum.
SELECT-OPTIONS: s_matnr FOR matdoc-matnr,
s_werks FOR matdoc-werks,
s_lgort FOR matdoc-lgort,
s_bwart FOR matdoc-bwart,
s_wempf FOR matdoc-wempf.
* s_menge FOR matdoc-menge,
* s_BUDAT for matdoc-BUDAT.
SELECT matnr
werks
lgort
bwart
wempf
menge
BUDAT
FROM matdoc INTO TABLE it_matdoc
WHERE matnr IN s_matnr.
WRITE: / '|MATERIAL_NO|',42 'PLANT',49'STORAGE_LOC', 70'MOMENT_TY',90'GOODS_RECIEPT',116'QUANTITY',130'pst_date',
sy-uline.
LOOP AT it_matdoc INTO wa_matdoc.
WRITE: / sy-vline,
wa_matdoc-matnr,
sy-vline,
42 wa_matdoc-werks,
sy-vline,
49 wa_matdoc-lgort,
sy-vline,
70 wa_matdoc-bwart,
sy-vline,
90 wa_matdoc-wempf,
sy-vline,
110 wa_matdoc-menge,
sy-vline,
130 wa_matdoc-BUDAT,sy-vline,
sy-uline(141).
HIDE wa_matdoc-matnr.
ENDLOOP.
TYPES: BEGIN OF ty_matdoc,
ReplyDeletebelnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,
xblnr TYPE xblnr,
bldat TYPE bldat,
budat TYPE budat,
monat TYPE monat,
cpudt TYPE cpudt,
awkey TYPE awkey,
END OF ty_matdoc.
TYPES: BEGIN OF ty_acdoca,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
buzei TYPE buzei,
awtyp TYPE awtyp,
awkey TYPE awkey,
cpudt TYPE cpudt,
budat TYPE budat,
monat TYPE monat,
blart TYPE blart,
budat_gjahr TYPE gjahr,
END OF ty_acdoca.
REPORT z_stock_age_report.
ReplyDelete* Declarations
DATA: lt_matdoc TYPE TABLE OF ty_matdoc,
lt_acdoca TYPE TABLE OF ty_acdoca,
lt_stock_age TYPE TABLE OF ty_final.
* Selection criteria (you need to set these values)
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_matnr TYPE matnr OBLIGATORY,
p_date TYPE sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
* Data retrieval
SELECT * FROM matdoc INTO TABLE lt_matdoc
WHERE matnr = p_matnr
AND budat <= p_date.
SELECT * FROM acdoca INTO TABLE lt_acdoca
WHERE awkey = p_matnr
AND budat <= p_date.
* Calculate stock age
LOOP AT lt_matdoc INTO DATA(ls_matdoc).
LOOP AT lt_acdoca INTO DATA(ls_acdoca)
WHERE belnr = ls_matdoc-belnr
AND gjahr = ls_matdoc-gjahr
AND buzei = ls_matdoc-buzei.
* Calculate stock age and populate lt_stock_age
" You need to calculate stock age and populate lt_stock_age
" based on your business logic.
ENDLOOP.
ENDLOOP.
* Display the stock aging report
WRITE 'Stock Aging Report' COLOR 6.
LOOP AT lt_stock_age INTO DATA(ls_stock_age).
WRITE: / ls_stock_age-prctr,
ls_stock_age-lgort,
ls_stock_age-matnr,
ls_stock_age-maktx,
ls_stock_age-werks,
ls_stock_age-tstock,
ls_stock_age-lt0ys,
ls_stock_age-lt1ys,
ls_stock_age-lt2ys,
ls_stock_age-lt3ys,
ls_stock_age-lt4ys,
ls_stock_age-lt5ys,
ls_stock_age-ov5ys,
ls_stock_age-tyears.
ENDLOOP.
ReplyDeleteTABLES:ekko,"PURCHASE DOCUMENT HEADER
ekpo."PURCHASE DOCUMENT ITEM
TYPES: BEGIN OF tp_list,
"from EKKO
ebeln TYPE ebeln, "pD no
frgzu TYPE frgzu, "realease status
"From EKPO
ebelp TYPE ebelp, " item no
matnr TYPE matnr, "material no
netpr TYPE bprei, " net price
peinh TYPE epein, " price unit
menge TYPE menge_d, "quantity
END OF tp_list.
DATA : is_fcat TYPE slis_fieldcat_alv,
it_fcat TYPE slis_t_fieldcat_alv,
repid type sy-repid.
repid = sy-repid.
DATA : gt_list type STANDARD TABLE OF tp_list,
gs_list TYPE tp_list.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
select-OPTIONS : s_ebeln for ekko-ebeln,
s_matnr for ekpo-matnr.
SELECTION-SCREEN end of block b1.
is_fcat-col_pos = '1'.
is_fcat-fieldname = 'ebeln'.
is_fcat-seltext_m = 'Purchase Document No'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '2'.
is_fcat-fieldname = 'ebelp'.
is_fcat-seltext_m = 'Item No'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '3'.
is_fcat-fieldname = 'matnr'.
is_fcat-seltext_m = 'Material No'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '4'.
is_fcat-fieldname = 'netpr'.
is_fcat-seltext_m = 'Net Price'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '5'.
is_fcat-fieldname = 'netph'.
is_fcat-seltext_m = 'Price Unit'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '6'.
is_fcat-fieldname = 'menge'.
is_fcat-seltext_m = 'Quantity'.
APPEND is_fcat to it_fcat.
is_fcat-col_pos = '7'.
is_fcat-fieldname = 'frgzu'.
is_fcat-seltext_m = 'Release Status'.
APPEND is_fcat to it_fcat.
ReplyDeleteSTART-OF-SELECTION .
PERFORM get_data.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
select a~ebeln a~frgzu
b~ebelp b~matnr b~netpr b~peinh b~menge
FROM ekko as a INNER JOIN ekpo as b on a~ebeln = b~ebeln
into CORRESPONDING FIELDS OF TABLE gt_list
WHERE a~ebeln in s_ebeln
and b~matnr in s_matnr.
*ENDFORM.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = repid
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'HANDLE_USER_COMMAND '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
IT_FIELDCAT = it_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'X'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_list
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTANDARDS'.
"Copy of 'STANDARD' pf_status from fgroup SALV
ENDFORM.
form handle_user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'.
case rs_selfield-FIELDNAME.
when 'ebeln'.
set parameter id 'MAT' field rs_selfield-value.
call transaction 'ME23n' and skip first screen.
endcase.
endcase.
endform.