‎2007 Dec 04 5:36 PM
Hi, can anyone help me optimise this code...and elemenate the redundancy ?
DATA: t_display TYPE TABLE OF zstatchng ,
lt_display LIKE LINE OF t_display ,
BEGIN OF t_ekbe OCCURS 0,
ebeln TYPE ebeln,
belnr TYPE mblnr,
END OF t_ekbe,
BEGIN OF t_ser01 OCCURS 0,
obknr TYPE objknr,
END OF t_ser01,
BEGIN OF t_objk OCCURS 0,
sernr TYPE gernr,
matnr TYPE matnr,
END OF t_objk,
SELECT * FROM ekbe INTO CORRESPONDING FIELDS OF TABLE t_ekbe
WHERE ebeln IN s_po[] AND bewtp = 'L'.
LOOP AT t_ekbe.
SELECT * FROM ser01 INTO CORRESPONDING FIELDS OF TABLE t_ser01
WHERE lief_nr = t_ekbe-belnr.
IF sy-subrc = 0.
LOOP AT t_ser01.
SELECT * FROM objk INTO CORRESPONDING FIELDS OF TABLE t_objk
WHERE obknr = t_ser01-obknr.
LOOP AT t_objk.
MOVE t_objk-sernr TO lt_display-sernr.
MOVE t_objk-matnr TO lt_display-matnr.
SELECT * FROM equi WHERE sernr = t_objk-sernr.
ENDSELECT.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
client = sy-mandt
objnr = equi-objnr
only_active = 'X'
spras = sy-langu
IMPORTING
line = risa0-statusline
EXCEPTIONS
object_not_found = 1.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
MOVE risa0-statusline TO lt_display-STATUSLINE.
move equi-werk to lt_display-werk.
ENDLOOP.
MOVE t_ekbe-ebeln TO lt_display-ebeln.
MOVE t_ekbe-belnr TO lt_display-vbeln.
APPEND lt_display TO t_display.
ENDLOOP.
ENDIF.
ENDLOOP.
Is there a better way to code the same ?Please reply.Urgent..Thanks.
‎2007 Dec 04 8:05 PM
Try using this code and make the necessary adjustments
TYPES: BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln,
belnr TYPE ekbe-belnr,
END OF ty_ekbe,
BEGIN OF ty_ser01,
obknr TYPE ser01-obknr ,
lief_nr TYPE ser01-lief_nr,
END OF ty_ser01,
BEGIN OF ty_objk,
obknr TYPE objk-obknr,
obzae TYPE objk-obzae,
sernr TYPE objk-sernr,
matnr TYPE objk-matnr,
END OF ty_objk,
BEGIN OF ty_equi,
equnr TYPE equi-equnr,
sernr TYPE equi-sernr,
matnr TYPE equi-matnr,
objnr TYPE equi-objnr,
werks TYPE equi-werks,
END OF ty_equi.
DATA: w_ekbe TYPE ty_ekbe ,
w_ser01 TYPE ty_ser01,
w_objk TYPE ty_objk ,
t_ekbe TYPE TABLE OF ty_ekbe ,
t_ekbe_tmp TYPE TABLE OF ty_ekbe ,
t_ser01 TYPE SORTED TABLE OF ty_ser01
WITH NON-UNIQUE KEY lief_nr,
t_objk TYPE SORTED TABLE OF ty_objk
WITH NON-UNIQUE KEY obknr,
t_objk_tmp TYPE TABLE OF ty_objk ,
t_equi TYPE SORTED TABLE OF ty_equi
WITH NON-UNIQUE KEY sernr matnr.
SELECT ebeln
belnr
FROM ekbe
INTO TABLE t_ekbe
WHERE ebeln IN s_po
AND bewtp EQ 'L'.
IF sy-subrc EQ 0.
t_ekbe_tmp[] = t_ekbe[].
SORT t_ekbe_tmp BY belnr.
DELETE ADJACENT DUPLICATES FROM t_ekbe_tmp COMPARING belnr.
SELECT obknr
lief_nr
FROM ser01
INTO TABLE t_ser01
FOR ALL ENTRIES IN t_ekbe_tmp
WHERE lief_nr EQ t_ekbe_tmp-belnr.
IF sy-subrc EQ 0.
SELECT obknr
obzae
sernr
matnr
FROM objk
INTO TABLE t_objk
FOR ALL ENTRIES IN t_ser01
WHERE obknr EQ t_ser01-obknr.
IF sy-subrc EQ 0.
t_objk_tmp[] = t_objk[].
SORT t_objk_tmp BY sernr matnr.
DELETE ADJACENT DUPLICATES FROM t_objk_tmp COMPARING sernr matnr.
SELECT equnr
sernr
matnr
objnr
werks
FROM equi
INTO TABLE t_equi
FOR ALL ENTRIES IN t_objk_tmp
WHERE sernr EQ t_objk_tmp-sernr
AND matnr EQ t_objk_tmp-matnr.
ENDIF.
ENDIF.
LOOP AT t_ekbe INTO w_ekbe.
LOOP AT t_ser01 INTO w_ser01
WHERE lief_nr EQ w_ekbe-belnr.
LOOP AT t_objk INTO w_objk
WHERE obknr EQ w_ser01-obknr.
LOOP AT t_equi INTO w_equi
WHERE sernr EQ w_objk-sernr
AND matnr EQ w_objk-matnr.
MOVE: w_objk-sernr TO lt_display-sernr,
w_objk-matnr TO lt_display-matnr.
CLEAR risa0-statusline.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
objnr = w_equi-objnr
spras = sy-langu
IMPORTING
line = risa0-statusline
EXCEPTIONS
OTHERS = 0.
MOVE: risa0-statusline TO lt_display-statusline,
w_equi-werk TO lt_display-werk ,
w_ekbe-ebeln TO lt_display-ebeln ,
w_ekbe-belnr TO lt_display-vbeln .
APPEND lt_display TO t_display.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDIF.
‎2007 Dec 04 8:05 PM
Try using this code and make the necessary adjustments
TYPES: BEGIN OF ty_ekbe,
ebeln TYPE ekbe-ebeln,
belnr TYPE ekbe-belnr,
END OF ty_ekbe,
BEGIN OF ty_ser01,
obknr TYPE ser01-obknr ,
lief_nr TYPE ser01-lief_nr,
END OF ty_ser01,
BEGIN OF ty_objk,
obknr TYPE objk-obknr,
obzae TYPE objk-obzae,
sernr TYPE objk-sernr,
matnr TYPE objk-matnr,
END OF ty_objk,
BEGIN OF ty_equi,
equnr TYPE equi-equnr,
sernr TYPE equi-sernr,
matnr TYPE equi-matnr,
objnr TYPE equi-objnr,
werks TYPE equi-werks,
END OF ty_equi.
DATA: w_ekbe TYPE ty_ekbe ,
w_ser01 TYPE ty_ser01,
w_objk TYPE ty_objk ,
t_ekbe TYPE TABLE OF ty_ekbe ,
t_ekbe_tmp TYPE TABLE OF ty_ekbe ,
t_ser01 TYPE SORTED TABLE OF ty_ser01
WITH NON-UNIQUE KEY lief_nr,
t_objk TYPE SORTED TABLE OF ty_objk
WITH NON-UNIQUE KEY obknr,
t_objk_tmp TYPE TABLE OF ty_objk ,
t_equi TYPE SORTED TABLE OF ty_equi
WITH NON-UNIQUE KEY sernr matnr.
SELECT ebeln
belnr
FROM ekbe
INTO TABLE t_ekbe
WHERE ebeln IN s_po
AND bewtp EQ 'L'.
IF sy-subrc EQ 0.
t_ekbe_tmp[] = t_ekbe[].
SORT t_ekbe_tmp BY belnr.
DELETE ADJACENT DUPLICATES FROM t_ekbe_tmp COMPARING belnr.
SELECT obknr
lief_nr
FROM ser01
INTO TABLE t_ser01
FOR ALL ENTRIES IN t_ekbe_tmp
WHERE lief_nr EQ t_ekbe_tmp-belnr.
IF sy-subrc EQ 0.
SELECT obknr
obzae
sernr
matnr
FROM objk
INTO TABLE t_objk
FOR ALL ENTRIES IN t_ser01
WHERE obknr EQ t_ser01-obknr.
IF sy-subrc EQ 0.
t_objk_tmp[] = t_objk[].
SORT t_objk_tmp BY sernr matnr.
DELETE ADJACENT DUPLICATES FROM t_objk_tmp COMPARING sernr matnr.
SELECT equnr
sernr
matnr
objnr
werks
FROM equi
INTO TABLE t_equi
FOR ALL ENTRIES IN t_objk_tmp
WHERE sernr EQ t_objk_tmp-sernr
AND matnr EQ t_objk_tmp-matnr.
ENDIF.
ENDIF.
LOOP AT t_ekbe INTO w_ekbe.
LOOP AT t_ser01 INTO w_ser01
WHERE lief_nr EQ w_ekbe-belnr.
LOOP AT t_objk INTO w_objk
WHERE obknr EQ w_ser01-obknr.
LOOP AT t_equi INTO w_equi
WHERE sernr EQ w_objk-sernr
AND matnr EQ w_objk-matnr.
MOVE: w_objk-sernr TO lt_display-sernr,
w_objk-matnr TO lt_display-matnr.
CLEAR risa0-statusline.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
objnr = w_equi-objnr
spras = sy-langu
IMPORTING
line = risa0-statusline
EXCEPTIONS
OTHERS = 0.
MOVE: risa0-statusline TO lt_display-statusline,
w_equi-werk TO lt_display-werk ,
w_ekbe-ebeln TO lt_display-ebeln ,
w_ekbe-belnr TO lt_display-vbeln .
APPEND lt_display TO t_display.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDIF.
‎2007 Dec 04 9:47 PM
‎2007 Dec 04 8:23 PM
Hi Deepti,
First of all in your code try to get rid of LOOP in SELECT and ENDSELECT.
and it's preferable to use SELECT INTO TABLE, instead of CORRESPONDING FIELDS
try to use INNER JOIN or use FOR ALL ENTRIES instead of this.
Pavan
‎2007 Dec 04 9:48 PM