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