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 Optimization

vijay_kumar134
Participant
0 Likes
920

Hi,

When i execute the program it will take minimum 30 minutes to get the output for the program.
Friends please guide me to optimize the code. Here with i have attached the getting data part of code.

Thanks in advance.

Shavisan.

8 REPLIES 8
Read only

Former Member
0 Likes
850

Hi,

From that report are you getting proper output?

Better you use inner join.

Avoid select statement as much as possible.

Regards,

vijay

Read only

Former Member
0 Likes
850

Hi,

Create one structure, place all your fields.

Create internal table and work area.

One request from my side is dont use select statement instead you use select single like that.

Regards,

vijay

Read only

vinoth_aruldass
Contributor
0 Likes
850

hi ,

Please see the link and see all the points are satisfactory?

http://wiki.sdn.sap.com/wiki/display/ABAP/ABAP+Performance+and+Tuning

hope it helps,

Vinoth

Read only

RaymondGiuseppi
Active Contributor
0 Likes
850

First execute your report with SAT or SE30 ad analyze the result to identify the steps that require the most resources.

If those steps are SQL statement, execute also a SQL trace during executnion.

Regards,

Raymond

Read only

Former Member
0 Likes
850

Hi,

Analyse your code and using SE30 and SQL trace (ST05)  find out the select queries that are consuming time.

Try adding where conditions and provide key fields for the table during selection.

Thanks,

Tooshar Bendale

Read only

0 Likes
850

Hi Friends,

Please check my code if anything i did wrong in performance side?

FORM get_data .

  SELECT SINGLE zchar FROM  zpp_alias
                      INTO  g_char
                      WHERE zelement = c_mold_line.
  IF sy-subrc = 0.
    SELECT SINGLE atinn FROM  cabn
                        INTO  g_atinn
                        WHERE atnam = g_char.
    IF sy-subrc = 0.
      SELECT objek                                      "#EC CI_NOFIRST
             atinn
             atwrt FROM ausp
                   INTO TABLE git_ausp
                   WHERE atinn = g_atinn.
    ENDIF.
  ENDIF.

  SELECT vbrk~vbeln
         vbrp~posnr
         vbrp~fkimg
         vbrp~ntgew
         vbrp~gewei
         vbrp~kursk
         vbrp~vgbel
         vbrp~vgpos
         vbrp~vgtyp
         vbrp~aubel
         vbrp~aupos
         vbrp~matnr
         vbrp~arktx
         vbrp~spart
         vbrp~werks
         vbrk~waerk
         vbrk~vkorg
         vbrk~vtweg
         vbrk~knumv
         vbrk~fkdat
         vbrk~kurrf
         vbrk~kunag
         mara~mtart
         mara~bismt
         mara~wrkst
         mara~ntgew
         mara~gewei
                    FROM vbrk
                    INNER JOIN vbrp ON vbrk~vbeln = vbrp~vbeln
                    INNER JOIN mara ON mara~matnr = vbrp~matnr  
                    INTO TABLE git_vbrk
                    WHERE vbrk~vbeln IN s_vbeln
                      AND vbrk~vbtyp NE 'N'
                      AND vbrk~vkorg IN s_vkorg
                      AND vbrk~fkdat IN s_fkdat
                      AND vbrk~kunag IN s_kunnr
                      AND vbrk~fksto NE 'X'
                      AND vbrp~werks IN s_werks.

  IF git_vbrk IS NOT INITIAL.
    DELETE git_vbrk WHERE fkimg IS INITIAL.

    SORT git_vbrk BY aupos aubel.
    DELETE ADJACENT DUPLICATES FROM git_vbrk COMPARING aupos aubel.

    SELECT vbeln
           posnr
           etenr
           edatu
           wmeng
           bmeng
           etene
           FROM vbep
           INTO TABLE git_vbep_new
           FOR ALL ENTRIES IN git_vbrk
           WHERE vbeln EQ git_vbrk-aubel
             AND posnr EQ git_vbrk-aupos.

    SELECT trntyp
           docno
           exnum
           rdoc1
           ritem1
           FROM j_1iexcdtl
           INTO TABLE git_j_1iexcdtl
           FOR ALL ENTRIES IN git_vbrk
           WHERE rdoc1 = git_vbrk-vgbel
             AND ritem1 = git_vbrk-vgpos
             AND trntyp = 'ARE1'
             AND status NOT IN ('R' , 'D' , 'B').

    SELECT trntyp
           exnum
           exbed
           rdoc
           FROM j_1iexchdr
           INTO TABLE git_j_1iexchdr
           FOR ALL ENTRIES IN git_vbrk
           WHERE rdoc = git_vbrk-vbeln
             AND trntyp = 'DLFC'
             AND status NOT IN ('R' , 'D' , 'B').

    SELECT knumv
           kposn
           stunr
           zaehk
           kwert
           kschl FROM konv
                 INTO TABLE git_konv1
                 FOR ALL ENTRIES IN git_vbrk
                 WHERE knumv = git_vbrk-knumv
                   AND kposn = git_vbrk-posnr
                   AND kschl = c_jexp.
*--> Fetching Customer Name
    SELECT kunnr
           name1
           bran1 FROM kna1
                 INTO TABLE git_kna1
                 FOR ALL ENTRIES IN git_vbrk
                 WHERE kunnr = git_vbrk-kunag.

*--> Fetching Super Customer
    IF git_kna1 IS NOT INITIAL.
      SELECT kunnr
             name1 FROM kna1
                   INTO TABLE git_bran
                   FOR ALL ENTRIES IN git_kna1
                   WHERE kunnr = git_kna1-bran1.
    ENDIF.

    IF s_auart IS NOT INITIAL.
      SELECT vbak~vbeln
             vbap~posnr
             vbap~matnr
             vbak~audat
             vbak~auart
             vbak~gwldt
             vbak~submi
             vbap~posex
             vbap~kdmat
             vbap~kwmeng
             vbap~zalg
             vbap~zcpn
             vbap~zcsc  FROM vbak
                        INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
                        INTO TABLE git_vbak
                        FOR ALL ENTRIES IN git_vbrk
                        WHERE vbak~vbeln = git_vbrk-aubel
                          AND vbap~posnr = git_vbrk-aupos
                          AND vbak~auart IN s_auart
                          AND vbak~augru NE 'Z22'.
*                          AND vbap~abgru NE '94'.
*                                                 

*      git_vbak_tmp = git_vbak.
*      SORT git_vbak_tmp  BY vbeln posnr. "aubel aupos.
      SORT git_vbak BY vbeln posnr.
      DELETE ADJACENT DUPLICATES FROM git_vbak COMPARING vbeln posnr." matnr. "vbeln posnr.

    ELSE.
      SELECT vbak~vbeln
             vbap~posnr
             vbap~matnr
             vbak~audat
             vbak~auart
             vbak~gwldt
             vbak~submi
             vbap~posex
             vbap~kdmat
             vbap~kwmeng
             vbap~zalg
             vbap~zcpn
             vbap~zcsc  FROM vbak
                        INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
                        INTO TABLE git_vbak
                        FOR ALL ENTRIES IN git_vbrk
                        WHERE vbak~vbeln = git_vbrk-aubel
                          AND vbap~posnr = git_vbrk-aupos
                          AND vbak~auart IN (c_zasy, c_zfrp, c_zmis, c_zprd, c_zsam, c_zsca, c_zsrv, c_ztol)
                          AND vbak~augru NE 'Z22'.
*                          AND vbap~abgru NE '94'.
    ENDIF.

    IF sy-subrc NE 0.
      MESSAGE s002 DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING.
    ENDIF.

    IF git_vbak IS NOT INITIAL.
      SELECT vbkd~vbeln
             vbkd~posnr
             vbkd~bstkd
             vbkd~ihrez
             vbkd~inco1
             vbkd~inco2
             vbkd~vsart
             t173t~bezei
             t173t~spras FROM vbkd
                         INNER JOIN t173t ON t173t~vsart = vbkd~vsart   "#EC CI_BUFFJOIN
                         INTO TABLE git_vbkd
                         FOR ALL ENTRIES IN git_vbak
                         WHERE vbkd~vbeln = git_vbak-vbeln
                           AND vbkd~posnr = git_vbak-posnr.
*                           AND t173t~spras = sy-langu.

      "IF lwa_mara-mtart = c_zfmc or lwa_mara-mtart = c_zfsf.
*      " Fetch BOM Material .
      SELECT  matnr
              werks
              stlnr FROM mast
                    INTO TABLE git_mast
                    FOR ALL ENTRIES IN git_vbak
                    WHERE matnr = git_vbak-matnr.
      IF sy-subrc = 0.
        SELECT stlnr
               idnrk FROM stpo
                     INTO TABLE git_stpo
                     FOR ALL ENTRIES IN git_mast
*Begin of add 0113
*                    WHERE stlnr = git_mast-stlnr.
                     WHERE stlty IN ('D', 'E', 'K', 'M', 'S', 'T', 'P') AND
                           stlnr = git_mast-stlnr.
*End of add 0113

*          IF sy-subrc = 0.
*           READ TABLE git_stpo INTO lwa_stpo INDEX 1.
*           IF sy-subrc = 0.
*            l_matnr = lwa_stpo-idnrk.
*           ENDIF.
*          ENDIF.
*        ENDIF.
*
*     clear : lwa_mara  .
*      " Fetch BOM Material net weight
        SELECT  matnr
                mtart
                wrkst
                gewei
                ntgew
                FROM mara
                INTO TABLE git_mara
                FOR ALL ENTRIES IN git_stpo
                WHERE matnr = git_stpo-idnrk.
      ENDIF.
*       IF sy-subrc EQ 0.
**      " Fetch BOM Material Plant
*        SELECT SINGLE matnr
*                      werks FROM marc
*                            INTO (lwa_marc-matnr,lwa_marc-werks)
*                            WHERE matnr = l_matnr.
    ENDIF.

    IF git_vbkd IS NOT INITIAL.
      DELETE git_vbkd WHERE ( spras NE space AND spras NE sy-langu ).
    ENDIF.

    SELECT likp~vbeln
           lips~posnr
           likp~kunnr
           likp~wadat_ist
           likp~erdat
           likp~vsart
           lips~werks       "added on 04.01.2012 by Shahanaz
           lips~vgbel
           lips~vgpos
           lips~charg
           lips~sernr
           lips~zsernr
           lips~zfiarno
            FROM likp
            INNER JOIN lips ON likp~vbeln = lips~vbeln
            INTO TABLE git_likp
            FOR ALL ENTRIES IN git_vbrk
            WHERE likp~vbeln = git_vbrk-vgbel
              AND lips~posnr = git_vbrk-vgpos.

    FIELD-SYMBOLS: <fs_likp>   TYPE gt_likp.
    LOOP AT git_likp ASSIGNING <fs_likp>.
      <fs_likp>-sernr = <fs_likp>-zsernr.
      CLEAR : <fs_likp>-zsernr.
    ENDLOOP.

    SELECT * FROM t173t
             INTO TABLE git_vsart
             WHERE spras = sy-langu.

    DELETE git_likp WHERE wadat_ist IS INITIAL.

    IF s_werks IS NOT INITIAL.
      SELECT matnr                                      "#EC CI_NOFIRST
             werks
             charg
             vbeln
             posnr FROM mska
                   INTO TABLE git_mska
                   WHERE werks = s_werks.
    ELSE.
      SELECT matnr                                      "#EC CI_NOFIRST
             werks
             charg
             vbeln
             posnr FROM mska
                   INTO TABLE git_mska
                   WHERE werks IN (c_8110,c_8120,c_8130).

    ENDIF.

    SELECT z_int_no                                     "#EC CI_NOFIRST
           zcharg
           zsernr
           zvbeln
           zvbelp
           zmatnr
           zbatch
           FROM zqm_cmtr_item
           INTO TABLE git_cmtr_item
           FOR ALL ENTRIES IN git_mska
           WHERE zcharg = git_mska-charg.

**        IF sy-subrc eq 0.
**          delete git_cmtr_item where zsernr is  initial.
**        ENDIF.

    IF git_likp IS NOT INITIAL.

      SELECT kunnr
             name1
             FROM kna1
             INTO TABLE git_kna1_new
             FOR ALL ENTRIES IN git_likp
             WHERE kunnr = git_likp-kunnr
               AND spras = 'EN'.

      SELECT zfiarno                                    "#EC CI_NOFIELD
             delivery_no
             FROM zpp_fiar
             INTO TABLE git_zppfiar
             FOR ALL ENTRIES IN git_likp
             WHERE delivery_no = git_likp-vbeln.

      SELECT zfiarno                                    "#EC CI_NOFIELD
             delivery_no
             FROM zpp_fiar_asy
             INTO TABLE git_zppfiar
             FOR ALL ENTRIES IN git_likp
             WHERE delivery_no = git_likp-vbeln.
      IF git_zppfiar IS NOT INITIAL.
        SORT git_zppfiar BY zfiarno DESCENDING delivery_no.
      ENDIF.

      IF git_zppfiarasy IS NOT INITIAL.
        SORT git_zppfiar BY zfiarno DESCENDING delivery_no.
      ENDIF.

      SELECT z_cert_no                                  "#EC CI_NOFIRST
             prueflos
             zcharge
             zsernr
             zserial
             zwerks  FROM zqm_rgt_header
                     INTO TABLE git_rgt_header
                     FOR ALL ENTRIES IN git_likp
                     WHERE zcharge = git_likp-charg.

      IF sy-subrc EQ 0.                                  
        DELETE git_rgt_header WHERE zsernr IS  INITIAL.
      ENDIF.

      SELECT z_mt_int                                   "#EC CI_NOFIRST
              charg
              ztester
              werks
              zmpino FROM zqm_mt_cert
                     INTO TABLE git_mt_cert
                     FOR ALL ENTRIES IN git_likp
                     WHERE charg = git_likp-charg.


      SELECT charg
             werks 
             sernr
             vbeln
             posnr
             ebeln
             ebelp
             FROM zpp_pegg_n
             INTO TABLE git_pegg_n
             FOR ALL ENTRIES IN git_likp
             WHERE charg = git_likp-charg
               AND sernr = git_likp-zsernr.

      IF sy-subrc EQ 0.
        SELECT ebeln
             ebelp
             vbeln
             vbelp
             FROM ekkn
             INTO TABLE git_ekkn
             FOR ALL ENTRIES IN git_pegg_n
             WHERE ebeln = git_pegg_n-ebeln
               AND ebelp = git_pegg_n-ebelp.

      ENDIF.

    ENDIF.

    SELECT knumv
           kposn
           stunr
           zaehk
           kwert
           kschl FROM konv
                 INTO TABLE git_konv
                 FOR ALL ENTRIES IN git_vbrk
                 WHERE knumv = git_vbrk-knumv
                   AND kposn = git_vbrk-posnr
                   AND kschl IN (c_znsr , c_zr00 , c_zr01 , c_za03 , c_za04 , c_za05 , c_za06 , c_za10 , c_zscg , c_zstc , c_zrtc ,
                                 c_zptc , c_kf00 , c_zpac , c_z0cd , c_jass ,
                                 "c_zocd , "Commented by Shahanaz on 29.11.2011 requested by Sujay for updating Discount.
                                 c_z007 , c_zoth , c_zwhc ,
                                 "c_zwhs , "Commented by Shahanaz on 29.11.2011 requested by Sujay for updating Ware house charges.
                                 c_zk01 , c_zk02).

  ELSE.
    MESSAGE s002 DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  DELETE git_cmtr_item WHERE zvbeln EQ ' '.

  SORT git_kna1 BY kunnr ASCENDING.
  SORT git_bran BY kunnr ASCENDING.
  SORT git_ausp BY objek atinn ASCENDING.
  SORT git_vbrk BY vbeln posnr ASCENDING.
  SORT git_vbak BY vbeln posnr ASCENDING.
  SORT git_vbkd BY vbeln posnr ASCENDING.
  SORT git_likp BY vbeln posnr ASCENDING.
  SORT git_mt_cert    BY charg ASCENDING.
  SORT git_konv BY knumv kposn kschl    ASCENDING.
  SORT git_rgt_header BY zcharge zsernr ASCENDING.
  SORT git_cmtr_item  BY zcharg  zsernr  ASCENDING.

  DELETE ADJACENT DUPLICATES FROM git_ausp COMPARING objek atinn. " Added 0113
  DELETE ADJACENT DUPLICATES FROM git_konv COMPARING knumv kposn kschl. " Added 0113
  DELETE ADJACENT DUPLICATES FROM git_cmtr_item COMPARING zcharg  zsernr. " Added 0113

  SORT git_mt_cert BY charg ASCENDING.
  SORT git_pegg_n BY charg werks sernr vbeln posnr ASCENDING.
  SORT git_ekkn BY ebeln ebelp ASCENDING.
  DELETE ADJACENT DUPLICATES FROM git_pegg_n COMPARING charg werks sernr vbeln posnr.
  DELETE ADJACENT DUPLICATES FROM git_vbrk COMPARING vbeln posnr.                    

ENDFORM.                    " GET_DATA

Read only

0 Likes
850

Hi Vijay,

Try to modularize code to maximum extent..use for all entries and create function modules and declare global data objecs in the top include of the function group. Also, u can use object oriented concept like creating methods, class etc according to ur requirement..

Read only

0 Likes
850

hi vijay ,

run se30 , check for yourself , where you need the code to be optimized , moreover create secondary index for table