hi experts
can you help me regarding performance of this report, how to improve this one.
Thanks in advance.
Regards
Rajaram
report zsab_status
TABLES : mkpf,mseg,t247.
TYPE-POOLS : slis.
DATA : fcat TYPE slis_t_fieldcat_alv,
ls_fcat LIKE LINE OF fcat,
fheader TYPE TABLE OF slis_listheader WITH NON-UNIQUE DEFAULT KEY
WITH HEADER LINE INITIAL SIZE 0.
DATA : i_repid LIKE sy-repid,
gs_layout TYPE slis_layout_alv,
flag type n.
*Internal Table
DATA : BEGIN OF itab OCCURS 0,
mblnr like mseg-mblnr,
budat like mkpf-budat,
KDAUF like mseg-KDAUF,
KDPOS like mseg-KDPOS,
matnr like mseg-matnr,
WERKS like mseg-werks,
ERFMG like mseg-ERFMG,
ERFME like mseg-ERFME,
BWART like mseg-BWART,
maktx like makt-maktx,
WMENG like vbep-WMENG,
VRKME like vbep-VRKME,
end of itab.
DATA : BEGIN OF itab1 OCCURS 0,
mblnr like mseg-mblnr,
kdauf(90) type c,
kdpos like mseg-kdpos,
matnr like mseg-matnr,
werks like mseg-werks,
erfmg like mseg-erfmg,
erfme like mseg-erfme,
bwart like mseg-BWART,
budat like mkpf-budat,
maktx like makt-maktx,
WMENG like vbep-WMENG,
ABGRU like vbap-ABGRU,
status(10) type c,
lights,
end of itab1.
DATA : BEGIN OF it_final OCCURS 0,
mblnr like mseg-mblnr,
lights,
budat like mkpf-budat,
KDAUF like mseg-KDAUF,
kdauf(90) type c,
KDPOS like mseg-KDPOS,
matnr like mseg-matnr,
WERKS like mseg-werks,
ERFMG like mseg-ERFMG,
ERFME like mseg-ERFME,
BWART like mseg-BWART,
maktx like makt-maktx,
WMENG like vbep-WMENG,
ABGRU like vbap-ABGRU,
AEDAT like vbap-AEDAT,
status(10) type c,
month(10) type c,
ltx LIKE t247-ltx,
ktx LIKE t247-ktx,
end of it_final.
DATA : begin of ipos occurs 0,
OBJECTCLAS like cdpos-OBJECTCLAS,
OBJECTID like cdpos-OBJECTID,
CHANGENR like cdpos-CHANGENR,
TABNAME like cdpos-TABNAME,
TABKEY like cdpos-TABKEY,
FNAME like cdpos-FNAME,
CHNGIND like cdpos-CHNGIND,
VALUE_NEW like cdpos-VALUE_NEW,
VALUE_OLD like cdpos-VALUE_OLD,
kda(20) type n,
pos(20) type n,
UDATE like cdhdr-UDATE,
UTIME like cdhdr-UTIME,
CHANGENR1 like cdhdr-CHANGENR,
end of ipos.
DATA : begin of it1 occurs 0,
OBJECTCLAS like cdpos-OBJECTCLAS,
OBJECTID like cdpos-OBJECTID,
CHANGENR like cdpos-CHANGENR,
TABNAME like cdpos-TABNAME,
TABKEY like cdpos-TABKEY,
FNAME like cdpos-FNAME,
CHNGIND like cdpos-CHNGIND,
VALUE_NEW like cdpos-VALUE_NEW,
VALUE_OLD like cdpos-VALUE_OLD,
UDATE like cdhdr-UDATE,
UTIME like cdhdr-UTIME,
TCODE like cdhdr-TCODE,
CHANGENR1 like cdhdr-CHANGENR,
matnr like vbap-matnr,
BWART like mseg-BWART,
ERFMG like mseg-ERFMG,
werks like vbap-werks,
kda(90) type c,
pos like mseg-kdpos,
end of it1.
DATA : BEGIN OF IT2 OCCURS 0,
OBJECTCLAS LIKE CDHDR-OBJECTCLAS,
OBJECTID LIKE CDHDR-OBJECTID,
CHANGENR LIKE CDHDR-CHANGENR,
UDATE LIKE CDHDR-UDATE,
UTIME LIKE CDHDR-UTIME,
TCODE LIKE CDHDR-TCODE,
TABNAME like cdpos-TABNAME,
TABKEY like cdpos-TABKEY,
FNAME like cdpos-FNAME,
CHNGIND like cdpos-CHNGIND,
VALUE_NEW like cdpos-VALUE_NEW,
VALUE_OLD like cdpos-VALUE_OLD,
CHANGENR1 like cdhdr-CHANGENR,
matnr like vbap-matnr,
BWART like mseg-BWART,
ERFMG like mseg-ERFMG,
werks like vbap-werks,
kda(90) type c,
pos like mseg-kdpos,
END OF IT2.
*data : it2 like it1 occurs 0 with header line.
data : itab2 like itab1 occurs 0 with header line.
data : e_itab2 like line of itab2.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: zdate FOR mkpf-budat OBLIGATORY.
SELECT-OPTIONS: zpl FOR mseg-WERKS OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bk1.
start-of-selection.
gs_layout-colwidth_optimize = 'X'.
Select statement for read all the delivery document
SELECT mseg~mblnr
mkpf~budat
mseg~kdauf
mseg~kdpos
mseg~matnr
mseg~werks
mseg~erfmg
mseg~erfme
mseg~BWART
from mseg
inner join
mkpf on mkpfmblnr EQ msegmblnr
into table itab
where mkpf~budat in zdate and
mseg~werks in zpl and
mseg~kdauf ne ' ' and
( mseg~BWART = '601' or
mseg~bwart = '602').
*if sy-subrc = 0.
*
*
*loop at itab.
if zpl-low is not initial and zpl-high is not initial.
if ( itab-werks not between zpl-low and zpl-high ).
delete itab.
endif.
endif.
*
*if zpl-high is initial and itab-werks <> zpl-low.
delete it1.
*endif.
*endloop.
*
*endif.
select cdpos~OBJECTCLAS
cdpos~OBJECTID
cdpos~CHANGENR
cdpos~TABNAME
cdpos~TABKEY
cdpos~FNAME
cdpos~CHNGIND
cdpos~VALUE_NEW
cdpos~VALUE_OLD
from cdpos into table it1
where OBJECTCLAS = 'VERKBELEG' and
tabname = 'VBAP' and
fname = 'ABGRU'.
if zdate-high is not initial.
select OBJECTCLAS
OBJECTID
CHANGENR
UDATE
UTIME
TCODE
from cdhdr
into table it2
for all entries in it1
where
OBJECTCLAS = 'VERKBELEG' and
TCODE = 'VA02' and
OBJECTID = it1-OBJECTID and
CHANGENR = it1-CHANGENR and
UDATE IN (ZDATE-LOW , ZDATE-HIGH).
( UDATE BETWEEN ZDATE-LOW AND ZDATE-HIGH ).
else.
select OBJECTCLAS
OBJECTID
CHANGENR
UDATE
UTIME
TCODE
from cdhdr
into table it2
for all entries in it1
where
OBJECTCLAS = 'VERKBELEG' and
TCODE = 'VA02' and
OBJECTID = it1-OBJECTID and
CHANGENR = it1-CHANGENR and
( UDATE = ZDATE-LOW ).
endif.
loop at it2.
read table it1 with key changenr = it2-changenr.
if sy-subrc = 0.
MOVE-CORRESPONDING IT1 TO IT2.
modify it2.
endif.
endloop.
loop at it2.
it2-kda = it2-tabkey+3(10).
it2-pos = it2-tabkey+14(6).
*it1-kda = it1-tabkey+5(8).
*it1-pos = it1-tabkey+14(6).
modify it2.
endloop.
delete adjacent duplicates from it2 comparing kda pos.
loop at it2.
select single vbeln
posnr
matnr
WERKS
from vbap
into (it2-kda , it2-pos , it2-matnr , it2-werks)
where vbeln = it2-kda and posnr = it2-pos.
modify it2.
endloop.
loop at it2.
if zpl-low is not initial and zpl-high is not initial.
if ( it2-werks not between zpl-low and zpl-high ).
delete it2.
else.
move it2-kda to itab-kdauf.
move it2-pos to itab-kdpos.
move it2-matnr to itab-matnr.
move it2-bwart to itab-bwart.
move it2-erfmg to itab-erfmg.
move it2-werks to itab-werks.
move it2-UDATE to itab-budat.
append itab.
flag = 1.
endif.
endif.
if zpl-high is initial and it2-werks <> zpl-low.
delete it2.
elseif zpl-high is initial.
if flag = 1.
exit.
endif.
move it2-kda to itab-kdauf.
move it2-pos to itab-kdpos.
move it2-matnr to itab-matnr.
move it2-bwart to itab-bwart.
move it2-erfmg to itab-erfmg.
move it2-werks to itab-werks.
move it2-UDATE to itab-budat.
append itab.
endif.
endloop.
delete adjacent duplicates from it2 comparing kda pos.
*if itab is initial.
*exit.
*endif.
sort itab.
if itab is not initial.
select a~mblnr
a~kdauf
a~kdpos
a~matnr
a~werks
a~erfmg
a~erfme
a~BWART
b~budat
from mseg as a
inner join mkpf as b on
amblnr = bmblnr
into TABLE itab1
for all entries in itab
where a~kdauf = itab-kdauf
and a~kdpos = itab-kdpos and
( abwart = '601' or abwart = '602' ) and
a~WERKS = itab-werks and
b~budat le itab-budat.
endif.
if sy-subrc = 0.
loop at itab1.
itab1-mblnr = ' '.
itab1-budat = ' '.
modify itab1.
endloop.
loop at itab.
loop at itab1.
if itab-kdauf = itab1-kdauf and itab-kdpos = itab1-kdpos.
flag = 0.
exit.
else.
flag = 1.
endif.
endloop.
if flag = 1.
read table itab1 with key kdauf <> itab-kdauf.
select single VBELN
POSNR
wmeng
from vbep
into (itab-kdauf , itab-kdpos , itab-wmeng)
where VBELN = itab-kdauf and
POSNR = itab-kdpos.
move itab-kdauf to itab1-kdauf.
move itab-kdpos to itab1-kdpos.
move itab-wmeng to itab1-wmeng.
move itab-matnr to itab1-matnr.
move itab-bwart to itab1-bwart.
move itab-erfmg to itab1-erfmg.
move itab-werks to itab1-werks.
append itab1.
endif.
endloop.
else.
loop at itab.
select single VBELN
POSNR
wmeng
VRKME
from vbep
into (itab-kdauf , itab-kdpos , itab-wmeng , itab-VRKME)
where VBELN = itab-kdauf and
POSNR = itab-kdpos.
move itab-kdauf to itab1-kdauf.
move itab-kdpos to itab1-kdpos.
move itab-wmeng to itab1-wmeng.
move itab-matnr to itab1-matnr.
move itab-bwart to itab1-bwart.
move itab-erfmg to itab1-erfmg.
move itab-werks to itab1-werks.
move itab-VRKME to itab1-erfme.
append itab1.
endloop.
endif.
loop at itab1.
if zpl-low is not initial and zpl-high is initial.
if ( itab1-werks NE zpl-low ).
delete itab1.
endif.
endif.
endloop.
loop at itab1.
select single maktx
from makt into (itab1-maktx)
where matnr = itab1-matnr.
modify itab1.
endloop.
loop at itab1.
move-corresponding itab1 to itab2.
collect itab2.
endloop.
sort itab2 by kdauf kdpos bwart.
loop at itab2.
read table itab2 into e_itab2 with key kdauf = itab2-kdauf kdpos = itab2-kdpos bwart = '602'.
if sy-subrc eq 0.
delete itab2 index sy-tabix.
itab2-erfmg = itab2-erfmg - e_itab2-erfmg.
endif.
modify itab2.
endloop.
if itab2 is not initial.
select cdpos~OBJECTCLAS
cdpos~OBJECTID
cdpos~CHANGENR
cdpos~TABNAME
cdpos~TABKEY
cdpos~FNAME
cdpos~CHNGIND
cdpos~VALUE_NEW
cdpos~VALUE_OLD
from cdpos into table ipos
for all entries in itab2
where tabname = 'VBAP' and
fname = 'ABGRU' and
OBJECTID = itab2-kdauf.
endif.
if sy-subrc = 0.
loop at ipos.
ipos-kda = ipos-tabkey+5(8).
ipos-pos = ipos-tabkey+14(6).
modify ipos.
endloop.
loop at ipos.
select single CHANGENR UDATE UTIME
from cdhdr
into (ipos-CHANGENR1 , ipos-UDATE , ipos-UTIME)
where CHANGENR = ipos-CHANGENR.
and OBJECTID = ipos-kda.
modify ipos.
endloop.
endif.
loop at itab2.
select single WMENG
from vbep into (itab2-WMENG)
where vbeln = itab2-kdauf and
posnr = itab2-kdpos.
select single ABGRU
from vbap into (itab2-ABGRU)
where vbeln = itab2-kdauf and
posnr = itab2-kdpos.
modify itab2.
endloop.
loop at itab2.
move-corresponding itab2 to it_final.
append it_final.
endloop.
sort itab descending by kdauf kdpos budat descending.
loop at it_final.
read table itab with key kdauf = it_final-kdauf kdpos = it_final-kdpos.
if sy-subrc = 0.
it_final-budat = itab-budat.
modify it_final.
endif.
endloop.
sort it_final by budat descending.
*sort ipos by udate UTIME descending.
sort ipos DESCENDING by kda pos UDATE UTIME .
loop at ipos.
if zdate-high is not initial and ipos-udate GT zdate-high.
delete ipos.
elseif zdate-high is initial and ipos-udate GT zdate-low.
delete ipos.
endif.
endloop.
sort ipos DESCENDING by kda pos UDATE UTIME .
loop at it_final.
read table ipos with key kda = it_final-kdauf pos = it_final-kdpos.
if sy-subrc = 0.
it_final-budat = ipos-udate.
endif.
if it_final-erfmg GE it_final-wmeng.
it_final-status ='COMPLETED'.
it_final-lights = '3'.
else.
if it_final-erfmg LT it_final-wmeng.
if ipos-VALUE_NEW is not initial and ipos-kda = it_final-kdauf and ipos-pos = it_final-kdpos.
it_final-status ='COMPLETED'.
it_final-lights = '3'.
else.
it_final-status ='OPEN'.
it_final-lights = '1'.
endif.
endif.
endif.
modify it_final.
endloop.
loop at it_final.
*if it_final-werks <> zpl.
*delete it_final.
SELECT SINGLE ktx
ltx
INTO (it_final-ktx , it_final-ltx)
FROM t247
WHERE spras = sy-langu AND
mnr EQ it_final-budat+4(2).
translate it_final-ktx to lower case.
translate it_final-ktx(1) to upper case.
modify it_final.
endloop.
perform edit_mask.
i_repid = sy-repid.
PERFORM fieldcat.
gs_layout-lights_fieldname = 'LIGHTS'.
gs_layout-lights_tabname = 'IT_FINAL'.
ALV GRID
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = i_repid
it_fieldcat = fcat
i_save = 'A'
is_layout = gs_layout
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
FORM fieldcat .
MOVE sy-repid TO i_repid.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'LIGHTS'.
ls_fcat-outputlen = 10.
ls_fcat-seltext_m = 'STATUS'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'WERKS'.
ls_fcat-outputlen = 4.
ls_fcat-seltext_m = 'Plant'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'BUDAT'.
ls_fcat-outputlen = 10.
ls_fcat-seltext_m = 'Posting Date'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'KTX'.
ls_fcat-outputlen = 3.
ls_fcat-seltext_m = 'Month'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'MBLNR'.
ls_fcat-outputlen = 10.
ls_fcat-seltext_m = 'Document'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'KDAUF'.
ls_fcat-outputlen = 10.
ls_fcat-seltext_m = 'Sales Document'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'KDPOS'.
ls_fcat-outputlen = 4.
ls_fcat-seltext_m = 'Item'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'MATNR'.
ls_fcat-outputlen = 20.
ls_fcat-seltext_m = 'Material'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'MAKTX'.
ls_fcat-outputlen = 40.
ls_fcat-seltext_m = 'Description'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'WMENG'.
ls_fcat-outputlen = 8.
ls_fcat-seltext_m = 'Ord.Qty'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'ERFMG'.
ls_fcat-outputlen = 8.
ls_fcat-seltext_m = 'PGI Done'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'ERFME'.
ls_fcat-outputlen = 3.
ls_fcat-seltext_m = 'UoM'.
APPEND ls_fcat TO fcat.
ls_fcat-tabname = 'IT_FINAL'.
ls_fcat-fieldname = 'STATUS'.
ls_fcat-outputlen = 15.
ls_fcat-seltext_m = 'Status'.
APPEND ls_fcat TO fcat.
ENDFORM. "fieldcat
form edit_mask.
loop at it_final.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = it_final-kdauf
IMPORTING
OUTPUT = it_final-kdauf.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = it_final-kdpos
IMPORTING
OUTPUT = it_final-kdpos.
modify it_final.
endloop.
endform. "edit_mask