‎2008 Aug 08 6:09 AM
i got one issue, user want to increase its performance, plz help me init and tell where to make changes and wat changes to be done there.
the issue is:
TABLES: mast, "Material to BOM Link
stko, "BOM Header
stpo, "BOM Item
mara, "Material General data
makt, "Material Descriptions
cdhdr. "Change Document Header
TYPE-POOLS: slis.
&----
*& CONSTANTS DECLARATIONS
&----
CONSTANTS:
gc_x(1) VALUE 'X',
gc_topofpage TYPE slis_formname VALUE 'TOP_OF_PAGE',
gc_topofpage_bd TYPE slis_formname VALUE 'TOP_OF_PAGE_BD',
gc_drillrepo(10) TYPE c VALUE 'DRILLREPO',
gc_drillrepo_trans(15) TYPE c VALUE 'DRILLREPO_TRANS',
gc_e(1) VALUE 'E',
gc_zspe(4) VALUE 'ZSPE',
gc_ztem(4) VALUE 'ZTEM',
gc_add(5) VALUE 'ADDED',
gc_remove(7) VALUE 'REMOVED',
gc_mat(3) VALUE 'MAT',
gc_wrk(3) VALUE 'WRK',
gc_csv(3) VALUE 'CSV',
gc_cs03(4) VALUE 'CS03',
gc_ic1(4) VALUE '&IC1'.
*SMS152353 - Wasimkhan - Sept 11, 2007.
*Following Constant is commented and Variable is declared instead to
*have the value of the client at runtime rather than hardcoding.
*The name still suggests it as a constant as don't want to make the changes at all the places.
gc_num(4) VALUE '140M'.
DATA:
gc_num(4).
CONCATENATE sy-mandt 'M' INTO gc_num.
*End SMS152353.
&----
*& INTERNAL TABLE DECLARATIONS
&----
*Internal table contains fields of basic ALV list
DATA:BEGIN OF i_final OCCURS 0 ,
werks LIKE mast-werks,
mtart LIKE mara-mtart,
extwg LIKE mara-extwg,
matnr LIKE mast-matnr,
maktx LIKE makt-maktx,
stlnr LIKE mast-stlnr,
stlan LIKE mast-stlan,
stlal LIKE stko-stlal,
annam LIKE stko-annam,
andat LIKE stko-andat,
aenam LIKE stko-aenam,
aedat LIKE mast-aedat,
tabkey LIKE cdpos-tabkey,
fname LIKE cdpos-fname,
chngind LIKE cdpos-chngind,
value_old LIKE cdpos-value_old,
utime LIKE cdhdr-utime,
display TYPE c,
comp_err TYPE c,
END OF i_final.
DATA: i_final_new LIKE STANDARD TABLE OF i_final WITH HEADER LINE.
*Internal table contains fields of Header data
DATA: BEGIN OF i_stko OCCURS 0,
stlty LIKE stko-stlty,
stlnr LIKE stko-stlnr,
stlal LIKE stko-stlal,
andat LIKE stko-andat,
annam LIKE stko-annam,
aedat LIKE stko-aedat,
aenam LIKE stko-aenam,
END OF i_stko.
DATA: BEGIN OF i_scr OCCURS 0 ,
stlnr LIKE mast-stlnr,
stlan LIKE mast-stlan,
stlal LIKE stko-stlal,
annam LIKE stko-annam,
aenam LIKE stko-aenam,
END OF i_scr.
*Internal table contains fields of Item details
DATA: BEGIN OF i_stpo OCCURS 0,
stlty LIKE stpo-stlty,
stlnr LIKE stpo-stlnr,
stlkn LIKE stpo-stlkn,
stpoz LIKE stpo-stpoz,
idnrk LIKE stpo-idnrk,
maktx LIKE makt-maktx,
menge LIKE stpo-menge,
meins LIKE stpo-meins,
andat LIKE stpo-andat,
annam LIKE stpo-annam,
aedat LIKE stpo-aedat,
utime LIKE cdhdr-utime,
aenam LIKE stpo-aenam,
tabkey LIKE cdpos-tabkey,
fname LIKE cdpos-fname,
chngind LIKE cdpos-chngind,
value_old LIKE cdpos-value_old,
comp_err_desc(7) TYPE c,
END OF i_stpo.
DATA: BEGIN OF i_stpo1 OCCURS 0,
stlty LIKE stpo-stlty,
stlnr LIKE stpo-stlnr,
stlkn LIKE stpo-stlkn,
stpoz LIKE stpo-stpoz,
idnrk LIKE stpo-idnrk,
maktx LIKE makt-maktx,
menge LIKE stpo-menge,
meins LIKE stpo-meins,
andat LIKE stpo-andat,
annam LIKE stpo-annam,
aedat LIKE stpo-aedat,
utime LIKE cdhdr-utime,
aenam LIKE stpo-aenam,
tabkey LIKE cdpos-tabkey,
fname LIKE cdpos-fname,
chngind LIKE cdpos-chngind,
value_old LIKE cdpos-value_old,
comp_err_desc(7) TYPE c,
END OF i_stpo1.
*Internal table contains fields of secondary list
DATA: BEGIN OF i_bomitem OCCURS 0,
stlty LIKE stpo-stlty,
stlnr LIKE stpo-stlnr,
stlkn LIKE stpo-stlkn,
stpoz LIKE stpo-stpoz,
idnrk LIKE stpo-idnrk,
maktx LIKE makt-maktx,
menge LIKE stpo-menge,
meins LIKE stpo-meins,
andat LIKE stpo-andat,
annam LIKE stpo-annam,
aedat LIKE stpo-aedat,
aenam LIKE stpo-aenam,
utime LIKE cdhdr-utime,
disp TYPE c,
tabkey LIKE cdpos-tabkey,
fname LIKE cdpos-fname,
fdesc LIKE dfies-fieldtext,
status(9) TYPE c,
chngind LIKE cdpos-chngind,
value_old LIKE cdpos-value_old,
comp_err_desc(7) TYPE c,
END OF i_bomitem.
DATA: BEGIN OF i_chgbom OCCURS 0,
objectid LIKE cdhdr-objectid,
objectclas LIKE cdhdr-objectclas,
changenr LIKE cdhdr-changenr,
tcode LIKE cdhdr-tcode,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
utime LIKE cdhdr-utime,
END OF i_chgbom.
DATA : BEGIN OF i_chgbom1 OCCURS 0.
INCLUDE STRUCTURE cdpos.
DATA : END OF i_chgbom1.
DATA : i_bomitem_field_desc TYPE TABLE OF dfies WITH HEADER LINE.
*Variable declaration
DATA: g_temp_matnr TYPE mara-matnr,
g_temp_stlnr TYPE mast-stlnr,
g_tabix LIKE syst-tabix,
g_tmp_tabix LIKE syst-tabix,
g_objid LIKE cdhdr-objectid,
g_tabkey LIKE cdpos-tabkey,
g_mandt LIKE sy-mandt.
*Slis variables
DATA: gt_fieldtab TYPE slis_t_fieldcat_alv,
gt_fieldtab_bd TYPE slis_t_fieldcat_alv, "BOM Item Details
gv_layout TYPE slis_layout_alv,
gv_topofpage TYPE slis_formname,
gv_topofpage_bd TYPE slis_formname, "BOM Details
gt_events TYPE slis_t_event,
gv_repname LIKE sy-repid.
*Internal table contains fields to get Add/Remove functionality
DATA : BEGIN OF i_temp_stpo OCCURS 0,
stlty LIKE stpo-stlty,
stlnr LIKE stpo-stlnr,
idnrk LIKE stpo-idnrk,
menge LIKE stpo-menge,
meins LIKE stpo-meins,
maktx LIKE makt-maktx.
DATA: END OF i_temp_stpo.
DATA: wa_temp_stpo LIKE LINE OF i_temp_stpo,
wa_stpo LIKE LINE OF i_stpo.
*Screen Validation Variables
DATA: g_werks_l TYPE mast-werks,
g_werks_h TYPE mast-werks,
g_mtart_l TYPE mara-mtart,
g_mtart_h TYPE mara-mtart,
g_extwg_l TYPE mara-extwg,
g_extwg_h TYPE mara-extwg.
&----
*& SELECTION-SCREEN
&----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_werks FOR mast-werks OBLIGATORY,
s_mtart FOR mara-mtart OBLIGATORY,
s_extwg FOR mara-extwg,
s_aedat FOR mast-aedat.
SELECTION-SCREEN END OF BLOCK b1.
&----
*& INITIALIZATION
&----
INITIALIZATION.
gv_repname = sy-repid.
PERFORM initialize_fieldcat USING gt_fieldtab.
PERFORM build_eventtab USING gt_events.
&----
*& VALIDATION - SELECTION SCREEN
&----
AT SELECTION-SCREEN ON s_werks.
PERFORM f_validate_werks. "for validating Plant
AT SELECTION-SCREEN ON s_mtart.
PERFORM f_validate_mtart. "for validating Material Type
AT SELECTION-SCREEN ON s_extwg.
PERFORM F_VALIDATE_EXTWG. "for validating External Material Group
&----
*& START-OF-SELECTION
&----
START-OF-SELECTION.
perform top_of_page.
PERFORM get_data.
&----
*& END-OF-SELECTION
&----
END-OF-SELECTION.
gv_topofpage = gc_topofpage.
IF NOT i_final[] IS INITIAL.
PERFORM f_display_alv.
ELSE.
MESSAGE s067(zptf).
ENDIF.
&----
*& Form initialize_fieldcat
&----
text
----
-->P_FIELDTAB[] text
----
FORM initialize_fieldcat USING p_fieldtab TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat TYPE slis_fieldcat_alv.
CLEAR l_fieldcat.
l_fieldcat-tabname = 'I_FINAL'.
l_fieldcat-fix_column = gc_x.
l_fieldcat-no_out = 'O'.
l_fieldcat-fieldname = 'WERKS'.
l_fieldcat-seltext_m = text-007.
l_fieldcat-seltext_s = text-007.
l_fieldcat-seltext_l = text-008.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'MTART'.
l_fieldcat-seltext_m = text-010.
l_fieldcat-seltext_s = text-011.
l_fieldcat-seltext_l = text-012.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'MATNR'.
l_fieldcat-seltext_m = text-014.
l_fieldcat-seltext_s = text-015.
l_fieldcat-seltext_l = text-016.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'MAKTX'.
l_fieldcat-seltext_m = text-018.
l_fieldcat-seltext_s = text-019.
l_fieldcat-seltext_l = text-020.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'STLNR'.
l_fieldcat-seltext_m = text-022.
l_fieldcat-seltext_s = text-023.
l_fieldcat-seltext_l = text-024.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'STLAN'.
l_fieldcat-seltext_m = text-026.
l_fieldcat-seltext_s = text-027.
l_fieldcat-seltext_l = text-028.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'STLAL'.
l_fieldcat-seltext_m = text-030.
l_fieldcat-seltext_s = text-031.
l_fieldcat-seltext_l = text-032.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'ANDAT'.
l_fieldcat-seltext_m = text-034.
l_fieldcat-seltext_s = text-034.
l_fieldcat-seltext_l = text-035.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'ANNAM'.
l_fieldcat-seltext_m = text-037.
l_fieldcat-seltext_s = text-037.
l_fieldcat-seltext_l = text-038.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'AEDAT'.
l_fieldcat-seltext_m = text-040.
l_fieldcat-seltext_s = text-041.
l_fieldcat-seltext_l = text-042.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'AENAM'.
l_fieldcat-seltext_m = text-044.
l_fieldcat-seltext_s = text-045.
l_fieldcat-seltext_l = text-046.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'COMP_ERR'(047).
l_fieldcat-seltext_m = text-048.
l_fieldcat-seltext_s = text-049.
l_fieldcat-seltext_l = text-050.
APPEND l_fieldcat TO p_fieldtab.
ENDFORM. " initialize_fieldcat
&----
*& Form build_eventtab
&----
text
----
-->P_EVENTS[] text
----
FORM build_eventtab USING p_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events.
READ TABLE p_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
APPEND ls_event TO p_events.
ENDIF.
ENDFORM. " build_eventtab
&----
*& Form build_comment
&----
text
----
-->P_HEADING text
----
FORM build_comment USING p_heading.
ENDFORM. " build_comment
&----
*& Form top_of_page
&----
text
----
FORM top_of_page .
DATA: l_list_comm TYPE slis_t_listheader, " type for list comment
l_list_comment LIKE l_list_comm " list comment table
WITH HEADER LINE.
Heading of Main report
l_list_comment-typ = text-002.
l_list_comment-info = text-003. "Heading of Report
APPEND l_list_comment TO l_list_comm.
CLEAR l_list_comment-info.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = l_list_comm.
ENDFORM. " top_of_page
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data .
SELECT twerks rmtart rextwg tmatnr xmaktx tstlnr t~stlan
INTO TABLE i_final
FROM mara AS r
INNER JOIN makt AS x ON rmatnr = xmatnr
INNER JOIN mast AS t ON xmatnr = tmatnr
WHERE r~mtart IN s_mtart
AND r~extwg IN s_extwg
AND t~werks IN s_werks
AND x~spras = gc_e.
IF sy-subrc = 0.
CLEAR i_final_new.
i_final_new[] = i_final[].
SORT i_final_new BY stlnr.
DELETE ADJACENT DUPLICATES FROM i_final_new COMPARING stlnr.
ENDIF.
*///start
SELECT objectid objectclas changenr tcode username udate utime
INTO TABLE i_chgbom
FROM cdhdr
WHERE objectclas = 'STUE'
AND tcode = 'CS02'
AND udate IN s_aedat.
IF sy-subrc = 0.
SORT i_chgbom BY objectid ASCENDING udate DESCENDING utime DESCENDING.
ENDIF.
IF NOT i_chgbom[] IS INITIAL.
SELECT * FROM cdpos
INTO TABLE i_chgbom1
FOR ALL ENTRIES IN i_chgbom
WHERE objectclas EQ i_chgbom-objectclas
AND objectid EQ i_chgbom-objectid
AND changenr EQ i_chgbom-changenr.
ENDIF.
IF sy-subrc = 0.
SORT i_chgbom1 BY objectid ASCENDING tabkey ASCENDING changenr DESCENDING.
ENDIF.
*///end
*SMS152353 - Wasimkhan - Sept 11, 2007.
*Following Select Statement commented and added the new modified statements to improve the performance.
PERFORM GET_STKO.
IF i_final_new[] IS NOT INITIAL.
SELECT astlty astlnr astlal aandat aannam aaedat a~aenam
FROM stko AS a
INTO TABLE i_stko
FOR ALL ENTRIES IN i_final_new
WHERE a~stlnr = i_final_new-stlnr.
*
Select on STPO and populate i_stpo
SELECT pstlty pstlnr pstlkn pstpoz pidnrk mmaktx pmenge pmeins pandat pannam paedat paenam
FROM stpo AS p
INNER JOIN makt AS m
ON pidnrk = mmatnr
AND m~spras = gc_e
INTO TABLE i_stpo
INTO CORRESPONDING FIELDS OF TABLE i_stpo
FOR ALL ENTRIES IN i_final_new
WHERE p~stlnr = i_final_new-stlnr.
ENDIF
PERFORM GET_STKO.
IF i_final_new[] IS NOT INITIAL.
SELECT astlty astlnr astlal aandat aannam aaedat a~aenam
FROM stko AS a
INTO TABLE i_stko
FOR ALL ENTRIES IN i_final_new
WHERE a~stlty = 'M'
AND a~stlnr = i_final_new-stlnr.
Select on STPO and populate i_stpo
SELECT pstlty pstlnr pstlkn pstpoz pidnrk mmaktx pmenge pmeins pandat pannam paedat paenam
FROM stpo AS p
INNER JOIN makt AS m
ON pidnrk = mmatnr
INTO CORRESPONDING FIELDS OF TABLE i_stpo
FOR ALL ENTRIES IN i_final_new
WHERE p~stlty = 'M'
AND p~stlnr = i_final_new-stlnr
AND m~spras = gc_e.
ENDIF.
End SMS152353.
LOOP AT i_final.
CLEAR g_tabix.
g_tabix = sy-tabix.
READ TABLE i_stko WITH KEY stlnr = i_final-stlnr.
IF sy-subrc EQ 0.
i_final-stlnr = i_stko-stlnr.
i_final-stlal = i_stko-stlal.
i_final-annam = i_stko-annam.
i_final-andat = i_stko-andat.
i_final-aenam = i_stko-aenam.
i_final-aedat = i_stko-aedat.
CONCATENATE gc_num i_final-stlnr INTO g_objid .
READ TABLE i_chgbom WITH KEY objectid = g_objid.
IF sy-subrc = 0.
i_final-aenam = i_chgbom-username.
i_final-aedat = i_chgbom-udate.
i_final-utime = i_chgbom-utime.
i_final-display = gc_x.
ENDIF.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = i_final-matnr
IMPORTING
output = i_final-matnr.
MODIFY i_final INDEX g_tabix.
ENDLOOP.
DELETE i_final WHERE display NE gc_x.
Check for added/removed components in BOM for Special Materials
CLEAR g_tabix.
LOOP AT i_final.
g_tabix = sy-tabix.
Check whether material is a special material
IF i_final-mtart = gc_zspe.
Get the template material for the special material
CLEAR g_temp_matnr.
SELECT SINGLE a~matnr
INTO g_temp_matnr
FROM mara AS a INNER JOIN marc AS b
ON amatnr = bmatnr
WHERE a~mtart = gc_ztem
AND a~extwg = i_final-extwg+0(4)
AND b~werks = i_final-werks.
IF sy-subrc = 0.
Get the BOM of template material
CLEAR g_temp_stlnr.
SELECT SINGLE stlnr
INTO g_temp_stlnr
FROM mast
WHERE matnr = g_temp_matnr
AND werks = i_final-werks
AND stlan = i_final-stlan.
ENDIF.
IF NOT g_temp_stlnr IS INITIAL.
Get STPO records for template material BOM
REFRESH i_temp_stpo.
SELECT astlty astlnr aidnrk amenge ameins bmaktx
FROM stpo AS a INNER JOIN makt AS b
ON aidnrk = bmatnr
INTO TABLE i_temp_stpo
WHERE a~stlnr = g_temp_stlnr
AND b~spras = gc_e.
ENDIF.
ENDIF.
Check for components which are not in template BOM.
IF i_temp_stpo[] IS NOT INITIAL.
CLEAR g_tmp_tabix.
LOOP AT i_stpo WHERE stlnr = i_final-stlnr.
g_tmp_tabix = sy-tabix.
SORT i_chgbom BY objectclas objectid changenr.
CONCATENATE gc_num i_final-stlnr INTO g_objid .
READ TABLE i_chgbom WITH KEY objectid = g_objid.
g_mandt = sy-mandt.
Display Component error if it does not exist in template BOM
Check whether material is a special material
IF i_final-mtart = gc_zspe.
READ TABLE i_temp_stpo WITH KEY idnrk = i_stpo-idnrk.
IF sy-subrc <> 0.
i_stpo-comp_err_desc = gc_x.
i_final-comp_err = gc_x.
MODIFY i_stpo INDEX g_tmp_tabix.
ENDIF.
MODIFY i_stpo INDEX g_tmp_tabix.
ENDIF.
SORT i_chgbom1 BY objectclas ASCENDING objectid ASCENDING tabkey ASCENDING changenr DESCENDING.
SORT i_chgbom1 BY tabkey ASCENDING changenr DESCENDING.
CONCATENATE g_mandt i_stpo-stlty i_stpo-stlnr i_stpo-stlkn i_stpo-stpoz INTO g_tabkey.
DATA : l_flag TYPE c.
l_flag = 'X'.
LOOP AT i_chgbom1 WHERE objectclas = i_chgbom-objectclas
AND objectid = i_chgbom-objectid
AND tabkey = g_tabkey.
IF l_flag = 'X'.
i_stpo-tabkey = i_chgbom1-tabkey.
i_stpo-chngind = i_chgbom1-chngind.
i_stpo-fname = i_chgbom1-fname.
i_stpo-value_old = i_chgbom1-value_old.
g_mandt = sy-mandt.
CONCATENATE gc_num i_final-stlnr INTO g_objid.
CONCATENATE g_mandt i_stko-stlty i_final-stlnr INTO g_objid.
READ TABLE i_chgbom WITH KEY objectid = g_objid changenr = i_chgbom1-changenr.
IF sy-subrc = 0.
i_stpo-aenam = i_chgbom-username.
i_stpo-aedat = i_chgbom-udate.
i_stpo-utime = i_chgbom-utime.
ENDIF.
MODIFY i_stpo INDEX g_tmp_tabix.
CLEAR l_flag.
ELSEIF l_flag = ' '.
i_stpo1 = i_stpo.
IF i_stpo-fname = 'MENGE'.
i_stpo1-menge = i_stpo-value_old.
ENDIF.
IF i_stpo-fname = 'MEINS'.
i_stpo1-meins = i_stpo-value_old.
ENDIF.
IF i_stpo-fname = 'IDNRK'.
i_stpo1-idnrk = i_stpo-value_old.
ENDIF.
i_stpo1-tabkey = i_chgbom1-tabkey.
i_stpo1-chngind = i_chgbom1-chngind.
i_stpo1-fname = i_chgbom1-fname.
i_stpo1-value_old = i_chgbom1-value_old.
IF i_chgbom1-fname = 'MENGE'.
i_stpo1-menge = i_chgbom1-value_new.
ENDIF.
IF i_chgbom1-fname = 'MEINS'.
i_stpo1-meins = i_chgbom1-value_new.
ENDIF.
IF i_chgbom1-fname = 'IDNRK'.
i_stpo1-idnrk = i_chgbom1-value_new.
ENDIF.
CONCATENATE gc_num i_final-stlnr INTO g_objid.
READ TABLE i_chgbom WITH KEY objectid = g_objid changenr = i_chgbom1-changenr.
IF sy-subrc = 0.
i_stpo1-aenam = i_chgbom-username.
i_stpo1-aedat = i_chgbom-udate.
i_stpo1-utime = i_chgbom-utime.
ENDIF.
APPEND i_stpo1. "INDEX g_tmp_tabix.
ENDIF.
ENDLOOP.
ENDLOOP.
APPEND LINES OF i_stpo1 TO i_stpo.
CLEAR i_stpo1.
REFRESH i_stpo1.
LOOP AT i_chgbom1 WHERE objectid = g_objid
AND chngind = 'D'.
wa_stpo-stlty = i_stpo-stlty.
wa_stpo-stlnr = i_stpo-stlnr.
wa_stpo-tabkey = i_chgbom1-tabkey.
wa_stpo-chngind = i_chgbom1-chngind.
wa_stpo-fname = i_chgbom1-fname.
wa_stpo-value_old = i_chgbom1-value_old.
CONCATENATE gc_num i_final-stlnr INTO g_objid.
READ TABLE i_chgbom WITH KEY objectid = g_objid changenr = i_chgbom1-changenr.
IF sy-subrc = 0.
wa_stpo-aenam = i_chgbom-username.
wa_stpo-aedat = i_chgbom-udate.
wa_stpo-utime = i_chgbom-utime.
ENDIF.
APPEND wa_stpo TO i_stpo.
ENDLOOP.
ENDIF.
MODIFY i_final INDEX g_tabix.
ENDIF.
ENDLOOP.
ENDFORM. " get_data
*{Form routine to get 1st interactive output
FORM drillrepo USING user_comm LIKE sy-ucomm " to fetch BOM Details screen on double click on a field
rs_selfield TYPE slis_selfield.
CASE user_comm.
If it is double click.
WHEN gc_ic1.
Check the field name
IF RS_SELFIELD-FIELDNAME = 'STLNR'.
READ TABLE i_final INDEX rs_selfield-tabindex.
SET PARAMETER ID gc_mat FIELD i_final-matnr.
SET PARAMETER ID gc_wrk FIELD i_final-werks.
SET PARAMETER ID gc_csv FIELD i_final-stlan.
*Field catalog to get BOM item details
PERFORM init_fieldcat_bd USING gt_fieldtab_bd. "For bom Item details
PERFORM get_data_bd.
gv_topofpage_bd = gc_topofpage_bd.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'DRILLREPO_TRANS'
it_fieldcat = gt_fieldtab_bd[]
i_callback_top_of_page = gv_topofpage_bd
i_save = 'A'
TABLES
t_outtab = i_bomitem
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.
ENDCASE.
ENDFORM. "drillrepo
*{Form routine to get 2nd interactive output
FORM drillrepo_trans USING user_comm_trans LIKE sy-ucomm " Directs to Transaction to get BOM Details on double click on a field
rs_selfield_trans TYPE slis_selfield.
CASE user_comm_trans.
If it is double click.
WHEN gc_ic1.
READ TABLE i_bomitem INDEX rs_selfield_trans-tabindex.
SET PARAMETER ID gc_mat FIELD i_final-matnr.
SET PARAMETER ID gc_wrk FIELD i_final-werks.
SET PARAMETER ID gc_csv FIELD i_final-stlan.
CALL TRANSACTION gc_cs03 AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM. "DRILLREPO_TRANS
&----
*& Form init_fieldcat_bd
&----
text
----
-->P_FIELDTAB_BD text
----
FORM init_fieldcat_bd USING p_fieldtab_bd TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat_bd TYPE slis_fieldcat_alv.
REFRESH p_fieldtab_bd.
CLEAR p_fieldtab_bd.
CLEAR l_fieldcat_bd.
l_fieldcat_bd-tabname = 'I_BOMITEM'.
l_fieldcat_bd-fix_column = gc_x.
l_fieldcat_bd-no_out = 'O'.
l_fieldcat_bd-fieldname = 'IDNRK'.
l_fieldcat_bd-seltext_m = text-052.
l_fieldcat_bd-seltext_s = text-053.
l_fieldcat_bd-seltext_l = text-054.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'MAKTX'.
l_fieldcat_bd-seltext_m = text-018.
l_fieldcat_bd-seltext_s = text-018.
l_fieldcat_bd-seltext_l = text-020.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'MENGE'.
l_fieldcat_bd-seltext_m = text-056.
l_fieldcat_bd-seltext_s = text-057.
l_fieldcat_bd-seltext_l = text-058.
l_fieldcat_bd-no_zero = 'X'.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'MEINS'.
l_fieldcat_bd-seltext_m = text-060.
l_fieldcat_bd-seltext_s = text-061.
l_fieldcat_bd-seltext_l = text-062.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'ANDAT'.
l_fieldcat_bd-seltext_m = text-034.
l_fieldcat_bd-seltext_s = text-034.
l_fieldcat_bd-seltext_l = text-035.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'ANNAM'(036).
l_fieldcat_bd-seltext_m = text-037.
l_fieldcat_bd-seltext_s = text-037.
l_fieldcat_bd-seltext_l = text-038.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'AEDAT'. "last changed date
l_fieldcat_bd-seltext_m = text-040.
l_fieldcat_bd-seltext_s = text-041.
l_fieldcat_bd-seltext_l = text-042.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'UTIME'.
l_fieldcat_bd-seltext_m = text-079.
l_fieldcat_bd-seltext_s = text-080.
l_fieldcat_bd-seltext_l = text-081.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'AENAM'.
l_fieldcat_bd-seltext_m = text-044.
l_fieldcat_bd-seltext_s = text-045.
l_fieldcat_bd-seltext_l = text-046.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'COMP_ERR_DESC'(063).
l_fieldcat_bd-seltext_m = text-064.
l_fieldcat_bd-seltext_s = text-065.
l_fieldcat_bd-seltext_l = text-066.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'TABKEY'.
l_fieldcat_bd-seltext_m = text-067.
l_fieldcat_bd-seltext_s = text-068.
l_fieldcat_bd-seltext_l = text-069.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'STATUS'.
l_fieldcat_bd-seltext_m = text-070.
l_fieldcat_bd-seltext_s = text-071.
l_fieldcat_bd-seltext_l = text-072.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'FDESC'.
l_fieldcat_bd-seltext_m = text-073.
l_fieldcat_bd-seltext_s = text-074.
l_fieldcat_bd-seltext_l = text-075.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
l_fieldcat_bd-fieldname = 'VALUE_OLD'.
l_fieldcat_bd-seltext_m = text-076.
l_fieldcat_bd-seltext_s = text-077.
l_fieldcat_bd-seltext_l = text-078.
APPEND l_fieldcat_bd TO p_fieldtab_bd.
ENDFORM. " init_fieldcat_bd
&----
*& Form top_of_page_bd
&----
text
----
--> p1 text
<-- p2 text
----
FORM top_of_page_bd .
DATA: l_list_comm_bd TYPE slis_t_listheader, " type for list comment for BOM Item Report
l_list_comment_bd LIKE l_list_comm_bd " list comment table for BOM Item Report
WITH HEADER LINE.
Heading of second report
l_list_comment_bd-typ = text-002.
l_list_comment_bd-info = text-004. "Heading of BOM Item Report
APPEND l_list_comment_bd TO l_list_comm_bd.
CLEAR l_list_comment_bd-info.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = l_list_comm_bd.
ENDFORM. " top_of_page_bd
*Retrieve data for BOM Item Details (second drill down)
&----
*& Form get_data_bd
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data_bd .
REFRESH i_bomitem.
LOOP AT i_stpo WHERE stlnr = i_final-stlnr.
i_bomitem-stlty = i_stpo-stlty.
i_bomitem-stlnr = i_stpo-stlnr.
i_bomitem-idnrk = i_stpo-idnrk.
i_bomitem-maktx = i_stpo-maktx.
i_bomitem-menge = i_stpo-menge.
i_bomitem-meins = i_stpo-meins.
i_bomitem-andat = i_stpo-andat.
i_bomitem-annam = i_stpo-annam.
i_bomitem-aedat = i_stpo-aedat.
i_bomitem-aenam = i_stpo-aenam.
i_bomitem-utime = i_stpo-utime.
i_bomitem-comp_err_desc = i_stpo-comp_err_desc.
i_bomitem-tabkey = i_stpo-tabkey.
i_bomitem-fname = i_stpo-fname.
i_bomitem-status = i_stpo-chngind.
i_bomitem-value_old = i_stpo-value_old.
For Displaying the Status for 'I', 'U' & 'D'.
IF i_stpo-chngind = 'I'.
Translation of HardCoded Elements to text Elements- Varun Gupta 07-Feb-2008
i_bomitem-status = 'Add'.
i_bomitem-status = text-084.
ELSEIF i_stpo-chngind = 'U'.
i_bomitem-status = 'Change'.
i_bomitem-status = text-082.
ELSEIF i_stpo-chngind = 'D'.
i_bomitem-status = 'Delete'.
i_bomitem-status = text-083.
End Of Changes - Varun Gupta 07-Feb-2008
ENDIF.
IF i_bomitem-fname = 'KEY'.
i_bomitem-fname = ' '.
ENDIF.
FM For Displaying the Field Description.
CALL FUNCTION 'RV_TABLE_READ'
EXPORTING
tr_langu = 'E'
tr_table = 'STPO'
TABLES
dfies_tab = i_bomitem_field_desc
EXCEPTIONS
table_not_found = 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 i_bomitem_field_desc WITH KEY fieldname = i_stpo-fname.
IF sy-subrc EQ 0.
i_bomitem-fdesc = i_bomitem_field_desc-fieldtext.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = i_bomitem-idnrk
IMPORTING
output = i_bomitem-idnrk.
APPEND i_bomitem.
CLEAR: i_bomitem-fdesc.
ENDLOOP.
SORT i_bomitem BY idnrk DESCENDING aedat DESCENDING utime DESCENDING.
ENDFORM. " get_data_bd
&----
*& Form f_display_alv
&----
Display the ALV report using I_FINAL table.
----
FORM f_display_alv .
*Function to display report output
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'DRILLREPO'
i_callback_top_of_page = gv_topofpage
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
is_layout = gv_layout
it_fieldcat = gt_fieldtab[]
i_default = gc_x
i_save = 'A'
IS_VARIANT =
it_events = gt_events[]
TABLES
t_outtab = i_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. " f_display_alv
&----
*& Form f_validate_werks
&----
text
----
--> p1 text
<-- p2 text
----
FORM f_validate_werks .
IF NOT s_werks IS INITIAL.
CLEAR g_werks_l.
CLEAR g_werks_h.
IF NOT s_werks-low IS INITIAL.
IF NOT s_werks-high IS INITIAL.
SELECT SINGLE werks FROM mast INTO g_werks_l
WHERE werks = s_werks-low.
IF sy-subrc <> 0.
MESSAGE e064(zptf) WITH s_werks-low. "Invalid Plant
ENDIF.
SELECT SINGLE werks FROM mast INTO g_werks_h
WHERE werks = s_werks-high.
IF sy-subrc <> 0.
MESSAGE e064(zptf) WITH s_werks-high. "Invalid Plant
ENDIF.
ELSE.
SELECT SINGLE werks FROM mast INTO g_werks_l
WHERE werks = s_werks-low.
IF sy-subrc <> 0.
MESSAGE e064(zptf) WITH s_werks-low. "Invalid Plant
ENDIF.
ENDIF.
ELSEIF NOT s_werks-high IS INITIAL.
SELECT SINGLE werks FROM mast INTO g_werks_h
WHERE werks = s_werks-high.
IF sy-subrc <> 0.
MESSAGE e064(zptf) WITH s_werks-high. "Invalid Plant
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " f_validate_werks
&----
*& Form f_validate_mtart
&----
text
----
--> p1 text
<-- p2 text
----
FORM f_validate_mtart .
IF NOT s_mtart IS INITIAL.
CLEAR g_mtart_l.
CLEAR g_mtart_h.
IF NOT s_mtart-low IS INITIAL.
IF NOT s_mtart-high IS INITIAL.
SELECT SINGLE mtart FROM mara INTO g_mtart_l
WHERE mtart = s_mtart-low.
IF sy-subrc <> 0.
MESSAGE e162(zptf) WITH s_mtart-low. "Invalid Material Type
ENDIF.
SELECT SINGLE mtart FROM mara INTO g_werks_h
WHERE mtart = s_mtart-high.
IF sy-subrc <> 0.
MESSAGE e162(zptf) WITH s_mtart-high. "Invalid Material Type
ENDIF.
ELSE.
SELECT SINGLE mtart FROM mara INTO g_mtart_l
WHERE mtart = s_mtart-low.
IF sy-subrc <> 0.
MESSAGE e162(zptf) WITH s_mtart-low. "Invalid Material Type
ENDIF.
ENDIF.
ELSEIF NOT s_mtart-high IS INITIAL.
SELECT SINGLE mtart FROM mara INTO g_mtart_h
WHERE mtart = s_mtart-high.
IF sy-subrc <> 0.
MESSAGE e162(zptf) WITH s_mtart-high. "Invalid Material Type
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " f_validate_mtart
&----
*& Form f_validate_extwg
&----
text
----
--> p1 text
<-- p2 text
----
FORM f_validate_extwg .
IF NOT s_werks IS INITIAL.
CLEAR g_extwg_l.
CLEAR g_extwg_h.
IF NOT s_extwg-low IS INITIAL.
IF NOT s_extwg-high IS INITIAL.
SELECT SINGLE extwg FROM mara INTO g_extwg_l
WHERE extwg = s_extwg-low.
IF sy-subrc <> 0.
MESSAGE e163(zptf) WITH s_extwg-low. "Invalid External Material Group
ENDIF.
SELECT SINGLE extwg FROM mara INTO g_extwg_h
WHERE extwg = s_extwg-high.
IF sy-subrc <> 0.
MESSAGE e163(zptf) WITH s_extwg-high. "Invalid External Material Group
ENDIF.
ELSE.
SELECT SINGLE extwg FROM mara INTO g_extwg_l
WHERE extwg = s_extwg-low.
IF sy-subrc <> 0.
MESSAGE e163(zptf) WITH s_extwg-low. "Invalid External Material Group
ENDIF.
ENDIF.
ELSEIF NOT s_extwg-high IS INITIAL.
SELECT SINGLE extwg FROM mara INTO g_extwg_h
WHERE extwg = s_extwg-high.
IF sy-subrc <> 0.
MESSAGE e163(zptf) WITH s_extwg-high. "Invalid External Material Group
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " f_validate_extwg
‎2008 Aug 08 8:31 AM
‎2008 Aug 08 9:19 AM
First of all, The coding you have pasted is the old way of doing the code.To increase the performance its alwayus fine to use OOPs concepts of doing report. Please check in SDN for links to do it with thw help of object oriented ways.
Second thing is that you should use work area than directly using internal tables with header line.Work area's increases the performance.
In perform statement it is a better practice to use using,changing and tables statements.It helps in increasing the performance.
Use diffrenet includes for creating top data declaration,selection screen and coding.proper modulerization techniques results in better performance.
Take care of these points,The performance will be definitly fine as there is no much expensive statement in your code.
‎2008 Aug 08 10:00 AM
sorry, but lots of rubbish here:
>
> First of all, The coding you have pasted is the old way of doing the code.To increase the performance its alwayus fine to use OOPs concepts of doing report. Please check in SDN for links to do it with thw help of object oriented ways.
using OOP won't improve the performance of the program
>
Second thing is that you should use work area than directly using internal tables with header line.Work area's increases the performance.
this is true, but only a minor improvement
>
In perform statement it is a better practice to use using,changing and tables statements.It helps in increasing the performance.
TABLES is obsolate by FORM-PERFORMs, also does not improve performance
>
Use diffrenet includes for creating top data declaration,selection screen and coding.proper modulerization techniques results in better performance.
INCLUDEs also do not improve performance
‎2008 Aug 08 11:45 AM
I would suggest you not to paste the entire code and write only specific query, since it is helpful for others to respond. Nobody is gonna peep into the entire report and find out a concrete solution for you problem.
‎2008 Aug 08 12:59 PM
Exactly. Plus, use the tag before and after every code snippet for easier readabilty.
‎2008 Aug 10 1:54 PM
hello.
.....do one thing.
use a fm:(csap_mat_bom_read) to extract the bom item data from data base.don;t extract directly from stpo and stko by using select statements.
...it improves performance.