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

Code optimisation

Former Member
0 Likes
717

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
672

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.

4 REPLIES 4
Read only

Former Member
0 Likes
673

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.

Read only

0 Likes
672

Thanks Mark, It was very hepful.

Read only

Former Member
0 Likes
672

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

Read only

0 Likes
672

Thanks Pavan.