Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

performance issue

Former Member
0 Likes
1,133

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

6 REPLIES 6
Read only

Former Member
0 Likes
987

Please do not just paste full programs here with unspecific questions!

It is YOUR task to do the basic analysis, run ST05 and SE30 and

give an overview on runtime and most expensive lines.

SQL trace:

SE30

Ask specific questions.

Siegfried

Read only

Former Member
0 Likes
987

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.

Read only

0 Likes
987

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

Read only

Former Member
0 Likes
987

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.

Read only

0 Likes
987

Exactly. Plus, use the tag before and after every code snippet for easier readabilty.

Read only

Former Member
0 Likes
987

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.