2006 Dec 07 3:07 PM
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
2006 Dec 07 3:42 PM
Try this:
SORT: t_model_hash BY pbpino,
t_product_hash BY pbpino,
t_family_hash BY pbpino,
t_line_hash BY pbpino,
t_type_hash BY pbpino.
READ TABLE t_model_hash WITH KEY pbpino = t_zwpbph-pbpapino
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_product_hash WITH KEY pbpino = t_model_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_family_hash WITH KEY pbpino = t_product_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_line_hash WITH KEY pbpino = t_family_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_type_hash WITH KEY pbpino = t_line_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
Rob
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
2006 Dec 07 3:11 PM
These two select statements are inside a loop,
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.
If they are outside the loop it will boost the performance.
Regards
Kathirvel
2006 Dec 07 3:12 PM
hi,
1. Before for all entries statement of all the select statements check whether the table has any value or not i.,e if not t_ekbe[] is initial.
2. Avoid using select statements within a loop .
Regards,
Santosh
2006 Dec 07 3:42 PM
Try this:
SORT: t_model_hash BY pbpino,
t_product_hash BY pbpino,
t_family_hash BY pbpino,
t_line_hash BY pbpino,
t_type_hash BY pbpino.
READ TABLE t_model_hash WITH KEY pbpino = t_zwpbph-pbpapino
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_product_hash WITH KEY pbpino = t_model_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_family_hash WITH KEY pbpino = t_product_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_line_hash WITH KEY pbpino = t_family_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
IF sy-subrc = 0.
READ TABLE t_type_hash WITH KEY pbpino = t_line_hash-pbpapino
BINARY SEARCH.
ELSE.
CONTINUE.
ENDIF.
Rob
2006 Dec 07 4:12 PM
There is a secondary index for BDCP on CRETIME and CDOBJCL so, so long as your range on CRETIME is not empty and mot too large, you should be OK there.
Rob
2006 Dec 07 4:00 PM
The Table BDCP select is causing the performance issue , as you are not passing the primary key field.
insted you can use the Functional modules for reading the change pointers.
Try FM : CHANGE_POINTERS_READ.
Hope this will be helpful !!
Thanks,
Sudheer
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |