Skip to Content
0
Former Member
Dec 07, 2006 at 03:07 PM

performance issue

49 Views

Hi all,

This is my code . is there any other ways to improve performance of this code?

REPORT ZWRLOMDMM_PMG_PHWEB_PLD NO STANDARD PAGE HEADING

LINE-SIZE 120

LINE-COUNT 65

MESSAGE-ID 00.

----


  • TABLES *

----


TABLES: MARA . "General Material Data

----


  • Global-variables.

----


DATA: STIME LIKE BDCP-CRETIME.

DATA: ETIME LIKE BDCP-CRETIME.

----


  • TYPE-POOLS *

----


TYPE-POOLS:SLIS .

DATA:FIELDCATALOG_BASIC TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,

GD_REPID LIKE SY-REPID.

----


  • INTERNAL TABLES *

----


*Internal Tables to Get Data.

*Internal Table For MARA Table.

DATA:BEGIN OF T_MARA OCCURS 0 ,

MATNR LIKE MARA-MATNR,

MTART LIKE MARA-MTART,

ERSDA LIKE MARA-ERSDA,

ERNAM LIKE MARA-ERNAM,

AENAM LIKE MARA-AENAM,

SPART LIKE MARA-SPART,

LAEDA LIKE MARA-LAEDA,

END OF T_MARA.

*Internal Table For ZWPBPH Table.

DATA:BEGIN OF T_ZWPBPH OCCURS 0 ,

PBPINO LIKE ZWPBPH-PBPINO,

PBPAPINO LIKE ZWPBPH-PBPAPINO,

END OF T_ZWPBPH.

*Internal Table For Basic List Field Catalog.

DATA:BEGIN OF T_ALV OCCURS 0 ,

MATNR LIKE MARA-MATNR,

MTART LIKE MARA-MTART,

ERSDA LIKE MARA-ERSDA,

ERNAM LIKE MARA-ERNAM,

SPART LIKE MARA-SPART,

SPART1(3),

USERNAME LIKE CDHDR-USERNAME,

UDATE LIKE CDHDR-UDATE,

UTIME LIKE CDHDR-UTIME,

END OF T_ALV.

*Internal Table For BDCP

DATA: BEGIN OF T_BDCP OCCURS 0 ,

CDOBJID LIKE MARA-MATNR,

CRETIME LIKE BDCP-CRETIME,

USRNAME LIKE BDCP-USRNAME,

END OF T_BDCP .

*Internal Table For Model

DATA:T_MODEL LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.

*Internal Table For Product

DATA:T_PRODUCT LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.

*Internal Table For Family

DATA:T_FAMILY LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.

*Internal Table For Line

DATA:T_LINE LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.

*Internal Table For Type

DATA:T_TYPE LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.

*Internal Table For Cdpos.

DATA:T_CDPOS LIKE CDPOS OCCURS 0 WITH HEADER LINE.

*Internal Table For CDHDR.

DATA:T_CDHDR LIKE CDHDR .

RANGES : cretime FOR bdcp-cretime.

DATA:T_MARA_HASH LIKE HASHED TABLE OF T_MARA

WITH UNIQUE KEY MATNR WITH HEADER LINE.

DATA:T_MODEL_HASH LIKE HASHED TABLE OF T_MODEL

WITH UNIQUE KEY PBPINO WITH HEADER LINE.

DATA:T_PRODUCT_HASH LIKE HASHED TABLE OF T_PRODUCT

WITH UNIQUE KEY PBPINO WITH HEADER LINE.

DATA:T_FAMILY_HASH LIKE HASHED TABLE OF T_FAMILY

WITH UNIQUE KEY PBPINO WITH HEADER LINE.

DATA:T_LINE_HASH LIKE HASHED TABLE OF T_LINE

WITH UNIQUE KEY PBPINO WITH HEADER LINE.

DATA:T_TYPE_HASH LIKE HASHED TABLE OF T_TYPE

WITH UNIQUE KEY PBPINO WITH HEADER LINE.

----


  • SELECTION SCREEN *

----


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: P_MATN RADIOBUTTON GROUP R1 USER-COMMAND run default 'X'.

SELECT-OPTIONS: P_MATNR FOR MARA-MATNR MODIF ID SC1 .

PARAMETERS: P_DAT RADIOBUTTON GROUP R1 .

SELECT-OPTIONS: P_DATE FOR SY-DATUM MODIF ID SC2.

PARAMETERS: P_CDAT RADIOBUTTON GROUP R1 .

SELECT-OPTIONS: P_CDATE FOR SY-DATUM MODIF ID SC3 .

PARAMETERS: P_DIV RADIOBUTTON GROUP R1 .

SELECT-OPTIONS: : P_DIVIS for mara-spart MODIF ID SC4.

SELECTION-SCREEN END OF BLOCK b1.

----


  • INITIALIZATION *

----


INITIALIZATION.

REFRESH: T_MARA,

T_ZWPBPH,

T_ALV,

T_MODEL,

T_PRODUCT,

T_FAMILY,

T_LINE,

T_TYPE.

CLEAR: T_MARA,

T_ZWPBPH,

T_ALV,

T_MODEL,

T_PRODUCT,

T_FAMILY,

T_LINE,

T_TYPE.

GD_REPID = SY-REPID.

----


*AT SELECTION-SCREEN OUTPUT.

----


AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF P_MATN = 'X'.

FREE : P_DIVIS,P_DATE,P_CDATE.

IF SCREEN-GROUP1 = 'SC2' or SCREEN-GROUP1 = 'SC3'

or SCREEN-GROUP1 = 'SC4'.

SCREEN-INPUT = 0.

MODIFY SCREEN.

CONTINUE.

ENDIF .

ENDIF.

IF P_DAT = 'X' .

FREE : P_MATNR,P_DIVIS,P_CDATE.

IF SCREEN-GROUP1 = 'SC1' or SCREEN-GROUP1 = 'SC3'

or SCREEN-GROUP1 = 'SC4'.

SCREEN-INPUT = 0.

MODIFY SCREEN.

CONTINUE.

ENDIF .

ENDIF.

IF P_CDAT = 'X' .

FREE : P_MATNR,P_DIVIS,P_DATE.

IF SCREEN-GROUP1 = 'SC1' or SCREEN-GROUP1 = 'SC2'

or SCREEN-GROUP1 = 'SC4'.

SCREEN-INPUT = 0.

MODIFY SCREEN.

CONTINUE.

ENDIF .

ENDIF.

IF P_DIV = 'X'.

FREE : P_DATE,P_MATNR,P_CDATE.

IF SCREEN-GROUP1 = 'SC1' or SCREEN-GROUP1 = 'SC2'

or SCREEN-GROUP1 = 'SC3'.

SCREEN-INPUT = 0.

MODIFY SCREEN.

CONTINUE.

ENDIF .

ENDIF.

ENDLOOP.

----


  • START-OF-SELECTION *

----


START-OF-SELECTION.

PERFORM GET_FIELDCATALOG_BASIC.

  • PERFORM GET_FIELDCATALOG_SECONDARY.

PERFORM POPULATE_DATA.

----


  • END-OF-SELECTION *

----


END-OF-SELECTION.

&----


*& FORM GET_FIELDCATALOG_BASIC.

&----


*

  • Get Fieldcatalog For Basic List

FORM GET_FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'MATNR'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Material Number'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 20.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'MTART'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Material Type'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 15.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'ERSDA'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Created Date'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 12.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'ERNAM'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Created By'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 15.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'SPART'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Division PMG'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 8.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'SPART1'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Division PhWEB'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 8.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'USERNAME'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Changed By'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 14.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'UDATE'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Changed ON'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 14.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

FIELDCATALOG_BASIC-FIELDNAME = 'UTIME'.

FIELDCATALOG_BASIC-SELTEXT_M = 'Changed Time'.

FIELDCATALOG_BASIC-COL_POS = 0.

FIELDCATALOG_BASIC-OUTPUTLEN = 14.

FIELDCATALOG_BASIC-EMPHASIZE = 'X'.

FIELDCATALOG_BASIC-KEY = 'X'.

FIELDCATALOG_BASIC-no_zero = 'X' .

APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.

CLEAR FIELDCATALOG_BASIC.

ENDFORM. "GET_FIELDCATALOG_BASIC

&----


*& FORM POPULATE_DATA

&----


FORM POPULATE_DATA.

*Get Data From MARA And ZWPBPH Tables

DATA:V_COUNT(10) TYPE C.

IF P_MATN = 'X'.

SELECT MATNR MTART ERSDA ERNAM AENAM SPART LAEDA FROM MARA INTO TABLE

T_MARA where MATNR IN P_MATNR .

T_MARA_HASH[] = T_MARA[].

IF SY-SUBRC <> 0.

MESSAGE 'Invalid Material Number' TYPE 'E'.

ENDIF.

ELSEIF P_DAT = 'X' AND P_DATE IS INITIAL .

P_DATE-LOW = '00010101'.

P_DATE-HIGH = SY-DATUM.

CONCATENATE P_DATE-LOW '000000' INTO STIME.

CONCATENATE P_DATE-HIGH sy-uzeit INTO ETIME.

cretime-sign = 'I'.

cretime-option = 'BT'.

cretime-low = stime.

cretime-high = etime.

APPEND cretime.

CLEAR cretime.

SELECT CDOBJID FROM BDCP INTO TABLE T_BDCP WHERE CDOBJCL = 'MATERIAL'

AND CRETIME IN CRETIME AND TABNAME ='MARA' AND FLDNAME ='SPART'.

IF SY-SUBRC = 0.

SELECT MATNR MTART ERSDA ERNAM AENAM SPART LAEDA FROM MARA INTO TABLE

T_MARA FOR ALL ENTRIES IN T_BDCP where MATNR = T_BDCP-CDOBJID .

T_MARA_HASH[] = T_MARA[].

IF SY-SUBRC <> 0.

MESSAGE 'Invalid Date Range' TYPE 'E'.

ENDIF.

ENDIF.

IF SY-SUBRC <> 0.

MESSAGE 'Invalid Date Range' TYPE 'E'.

ENDIF.

ELSEIF P_DAT = 'X' AND P_DATE IS NOT INITIAL .

CONCATENATE P_DATE-LOW '000000' INTO STIME.

CONCATENATE P_DATE-HIGH sy-uzeit INTO ETIME.

cretime-sign = 'I'.

cretime-option = 'BT'.

cretime-low = stime.

cretime-high = etime.

APPEND cretime.

CLEAR cretime.

SELECT CDOBJID FROM BDCP INTO TABLE T_BDCP WHERE CDOBJCL = 'MATERIAL'

AND CRETIME IN CRETIME AND TABNAME ='MARA' AND FLDNAME ='SPART'.

IF SY-SUBRC = 0.

SELECT MATNR MTART ERSDA ERNAM AENAM SPART LAEDA FROM MARA INTO TABLE

T_MARA FOR ALL ENTRIES IN T_BDCP where MATNR = T_BDCP-CDOBJID .

T_MARA_HASH[] = T_MARA[].

IF SY-SUBRC <> 0.

MESSAGE 'Invalid Date Range' TYPE 'E'.

ENDIF.

ENDIF.

ELSEIF P_CDAT = 'X'.

SELECT MATNR MTART ERSDA ERNAM AENAM SPART LAEDA FROM MARA INTO TABLE

T_MARA where ERSDA IN P_CDATE .

T_MARA_HASH[] = T_MARA[].

ELSEIF P_DIV = 'X'.

SELECT MATNR MTART ERSDA ERNAM AENAM SPART LAEDA FROM MARA INTO TABLE

T_MARA where SPART IN P_DIVIS .

T_MARA_HASH[] = T_MARA[].

IF SY-SUBRC <> 0.

MESSAGE 'Invalid Division' TYPE 'E'.

ENDIF.

ENDIF.

IF T_MARA[] IS NOT INITIAL .

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_ZWPBPH FOR ALL

ENTRIES IN T_MARA WHERE PBPINO = T_MARA-MATNR.

IF T_ZWPBPH[] IS NOT INITIAL .

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_MODEL FOR ALL

ENTRIES IN T_ZWPBPH WHERE PBPINO = T_ZWPBPH-PBPAPINO.

T_MODEL_HASH[] = T_MODEL[].

IF T_MODEL[] IS NOT INITIAL.

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_PRODUCT FOR ALL

ENTRIES IN T_MODEL WHERE PBPINO = T_MODEL-PBPAPINO.

T_PRODUCT_HASH[] = T_PRODUCT[].

IF T_PRODUCT[] IS NOT INITIAL.

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_FAMILY FOR ALL

ENTRIES IN T_PRODUCT WHERE PBPINO = T_PRODUCT-PBPAPINO.

T_FAMILY_HASH[] = T_FAMILY[].

IF T_FAMILY[] IS NOT INITIAL.

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_LINE FOR ALL

ENTRIES IN T_FAMILY WHERE PBPINO = T_FAMILY-PBPAPINO.

T_LINE_HASH[] = T_LINE[].

IF T_LINE[] IS NOT INITIAL.

SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_TYPE FOR ALL

ENTRIES IN T_LINE WHERE PBPINO = T_LINE-PBPAPINO.

T_TYPE_HASH[] = T_TYPE[].

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

IF SY-SUBRC = 0.

LOOP AT T_ZWPBPH.

READ TABLE T_MODEL_HASH WITH KEY PBPINO = T_ZWPBPH-PBPAPINO.

IF SY-SUBRC = 0.

READ TABLE T_PRODUCT_HASH WITH KEY PBPINO = T_MODEL_HASH-PBPAPINO.

ELSE.

CONTINUE.

ENDIF.

IF SY-SUBRC = 0.

READ TABLE T_FAMILY_HASH WITH KEY PBPINO = T_PRODUCT_HASH-PBPAPINO.

ELSE.

CONTINUE.

ENDIF.

IF SY-SUBRC = 0.

READ TABLE T_LINE_HASH WITH KEY PBPINO = T_FAMILY_HASH-PBPAPINO.

ELSE.

CONTINUE.

ENDIF.

IF SY-SUBRC = 0.

READ TABLE T_TYPE_HASH WITH KEY PBPINO = T_LINE_HASH-PBPAPINO.

ELSE.

CONTINUE.

ENDIF.

IF SY-SUBRC = 0.

READ TABLE T_MARA_HASH WITH KEY MATNR = T_ZWPBPH-PBPINO.

IF SY-SUBRC = 0.

IF T_MARA_HASH-SPART <> T_TYPE_HASH-PBPAPINO+1(2).

MOVE-CORRESPONDING T_MARA_HASH TO T_ALV.

T_ALV-MATNR = T_ZWPBPH-PBPINO.

T_ALV-SPART1 = T_TYPE_HASH-PBPAPINO+1(2).

SELECT * FROM CDPOS INTO TABLE T_CDPOS WHERE OBJECTCLAS ='MATERIAL'

AND OBJECTID = T_ZWPBPH-PBPINO AND FNAME = 'SPART'.

IF SY-SUBRC = 0.

DESCRIBE TABLE T_CDPOS LINES V_COUNT.

READ TABLE T_CDPOS INDEX V_COUNT.

SELECT SINGLE * FROM CDHDR INTO T_CDHDR WHERE OBJECTCLAS ='MATERIAL'

AND OBJECTID = T_CDPOS-OBJECTID AND CHANGENR = T_CDPOS-CHANGENR.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING T_CDHDR TO T_ALV.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

IF T_ALV-MATNR <> SPACE.

APPEND T_ALV.

CLEAR T_ALV.

ENDIF.

ENDLOOP.

ENDIF.

SORT T_ALV BY MATNR.

call function 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = GD_REPID

it_fieldcat = FIELDCATALOG_BASIC[]

i_save = 'X'

TABLES

t_outtab = T_ALV

EXCEPTIONS

program_error = 1

others = 2.

ENDFORM. "POPULATE_DATA