Performance tuning of User Exit in 2LIS_03_BF.

Hai,
I have an user exit in 2LIS_03_BF,because of this user exit the system is taking so much time to extract the data of inventory.
Please suggest me the better way to tune this user exit.
The below is my code.
**To populate the value of vbelv from table vbfa comparing vbeln with mseg-mblnr
  WHEN '2LIS_03_BF'.
    TYPES:BEGIN OF ty_vbfa,
           vbeln TYPE vbfa-vbeln,
           vbelv TYPE vbfa-vbelv,
             END OF ty_vbfa.
    DATA:git_vbfa TYPE TABLE OF ty_vbfa,
         gs_vbfa LIKE LINE OF git_vbfa.
    DATA:c_data1 LIKE ls_mc03bf0 OCCURS 0 .
    c_data1[] = c_t_data[].
    SELECT vbeln
           vbelv
      FROM vbfa
      INTO TABLE git_vbfa
      FOR ALL ENTRIES IN c_data1
      WHERE vbeln = c_data1-mblnr.
    SORT git_vbfa BY vbeln ASCENDING.
    REFRESH: c_data1.
    FREE: c_data1.
    LOOP AT c_t_data INTO ls_mc03bf0.
      l_tabix = sy-tabix.
      READ TABLE git_vbfa INTO gs_vbfa WITH KEY vbeln = ls_mc03bf0-mblnr BINARY SEARCH.
      IF sy-subrc = 0.
        ls_mc03bf0-vbelv = gs_vbfa-vbelv.
        MODIFY c_t_data FROM ls_mc03bf0 INDEX l_tabix.
      ENDIF.
    ENDLOOP.
    REFRESH: git_vbfa.
    FREE: git_vbfa.
Regards,
Harsha.

Please Put a check before the FOR ALL ENTRIES for verifying that the Driver Internal Table should not be empty. Your SELECT might be going in the Table Scan.
If Not c_data1[] is initial.
SELECT vbeln
vbelv
FROM vbfa
INTO TABLE git_vbfa
FOR ALL ENTRIES IN c_data1
WHERE vbeln = c_data1-mblnr.
SORT git_vbfa BY vbeln ASCENDING.
endif.
You can also remove the SORT statement form this SELECT and Sort yout Internal Table as seperate statement.

Similar Messages

  • User Exits or BADIs!!!

    Hi,
    I have a concern on BADI and USER EXITS.
    1.See in my program, I don't find the user exits using perform statement. However if i take the development class, I have found 4-5 user exits. is it possible to use any one of them in my standard program for modifications?
    2. In BADI defination while defining the parameters, they are using some tables and parameters for exporting and importing.
    But in my program, the data is getting stored in some other internal table which was not used as a parameter in BADI definition as export or import parameters.
    My Question is, can I use my internal table which was defined globally in the particular BADI to have the required modifications in standard programs?
    Please let me know if any one is having an idea on the above.
    Thanks in advance.
    Ramesh

    Hi,
    The "perform" style of user exits is very old and you can reference any global data within these. They have since been replaced with a call customer-function '001' , which is a function module or a BADI.
    In a user exit or BADI you are restricted to using and changing the data as passed in the interface.
    Darren

  • SYNTAX Problem in User-Exit (Perform/Form)

    Hi,
    i use this User-Exit:
    FUNCTION EXIT_SAPLAD15_010.
    *"*"Lokale Schnittstelle:
    *"  IMPORTING
    *"     VALUE(I_DLISRC) LIKE  AD01DLIA-DLISRC
    *"     VALUE(I_KOKRS) LIKE  TKA01-KOKRS
    *"  TABLES
    *"      T_COVP STRUCTURE  COVP OPTIONAL
    *"      T_COSPA STRUCTURE  COSPA OPTIONAL
    *"      T_COSSA STRUCTURE  COSSA OPTIONAL
    *"      T_COVPR STRUCTURE  COVPR OPTIONAL
    *"      T_COSRA STRUCTURE  COSRA OPTIONAL
    *"      T_V_COFP STRUCTURE  V_COFP OPTIONAL
    *"      T_FMSUA STRUCTURE  FMSUA OPTIONAL
    *"      T_CKF_DIP_CUSTOMER_EXIT STRUCTURE  CKF_DIP_CUSTOMER_EXIT
    *"       OPTIONAL
    *"      IT_OBJECTS STRUCTURE  AD01OBJ OPTIONAL
      INCLUDE ZXAD1U10.
    ENDFUNCTION.
    *   INCLUDE ZXAD1U10                                                   *
    CASE I_DLISRC.
      WHEN '0001'. "Istkosten
        PERFORM DP90.
      WHEN '0021'. "Plankosten
        PERFORM DP80.
    ENDCASE.
    FORM DP80.
    BREAK-POINT.
    ENDFORM.                                                    "DP90
    FORM DP90.
    BREAK-POINT.
    ENDFORM.                                                    "DP90
    I get this syntax-error:
    Incorrect nesting: Before the statement "FORM", the structure
    introduced by "FUNCTION" must be concluded by "ENDFUNCTION
    Isn't it possible to use own Forms in includes of exits?
    Thanks, Regards Dieter

    when you do this:
    function.
      include zx
    endfuncion.
    include ZXAD1U10
    form aaa.
    endform.
    the abap engine see this:
    function.
      form aaa. " this is because the incorrect nesting error apperars
      endform.
    endfuncion.
    so, you can do two things:
    1° put your include sentence in the top of the function group, not inside the exit.
    2° try with dinamyc sencentes include (zx...)  perform (routine).

  • USER EXITs/BADis in VA05 transaction. Performing extra checks

    Hello gurus
    I need to perform an extra authority check in VA05 transaction. I need a USER EXTI/BADi/BTE in which I can perform the extra authority check and if the authority check fails the line shouldn´t be displayed on the starndard ALV.
    My boss does not want to create a copy of the program so I need a user exit or another way to perform this.
    Anyone can help me?
    Thank you veri much and kind regards
    Ibai Ramirez

    Hi,
    Here mentioned some of badi's and user exits,hope it will help you....
    Badi : FTR_TR_FIMA_CALLBACK
    User Exits
    FTRINCON  User exits  for confirmation status
    RFTBB001  Treasury: Posting interface
    RFTBB010  Treasury: Posting Interface Due to Cust.-Spec. Acct Determtn
    RFTBB011  Treasury: Post.Interface due to SCB Indic. and Deliver.Cntry
    RFTXX301  Customer Exit mt300 header
    RFTXX302  Customer Exit mt300 trailer
    RFTXX321  Customer Exit mt320 header
    RFTXX322  Customer Exit mt320 trailer
    SAPMFTD1  User Exit Treasury data carrier management

  • When bapi perform, user exit perform or not

    Hi,
    TCODE VA01,
    i am going to use BAPI(SD_SALESDOCUMENT_CREATE) in order to create or change sales order .
    but  there is user exit on VA01, so i want to know if user-exit execute or not  when i use BAPI on abap code.
    thanks
    venjamin.

    Hi,
    As far as i remember bapi will execute the user exit as once i tried to call the bapi in the user exit and in turn the bapi called back the user exit again. at that i used the same said bapi "SD_SALES_DOCUMENT_CREATE". and hence i changed my code accordingly
    Regards
    Satya

  • User exit/BADI for tracing change of User Status in IW22

    Hello,
    I am looking for a user exit or BADI that triggers whenever ther's a change made to User status field.
    eg. changing user status to APTC(Approved to be executed)
    I then need the exit/badi to trigger my workflow to send mails to list of reviewers. I can handle that but I am not able to find the suitable exit.
    I have seen BADI IQS0_STATUS_MAINTAIN, but no use.
    Can anyone help?

    Hi..
    Transaction Code - IW22                     Change PM Notification
    Enhancement/ Business Add-in            Description
    Enhancement
    IWO10026                                User check on setting status 'Do not perform'
    IWO10027                                User exit: Generate user-defined settlement rule
    IWOC0001                                Create PM/SM notification: Determine reference object
    IWOC0002                                PM/SM notification: Check whether status change is allowed
    IWOC0003                                PM/SM authorization check of ref. object and planner group
    IWOC0004                                Change single-level list editing PM/QM/SM ALV settings
      Business Add-in
    WOC_FL_DETERMINE                        Determine Date for Determining Installation Loc. Equi.
    NOTIF_AUTHORITY_01                      Additional Authorization Checks for the Notification
    IWOC_OBJECTINFO_CHNG                    Changes to Data of Object Info Screen
    IWOC_LIST_TUNING                        Performance Tuning for Lists in PM/CS
    IWO1_SUBSCREEN_0170                     Display Additional Data on Object Screen 0170 PhysicalSample
    IQS_MASS_CHANGE                         BadI for Mass Changes to Notifications
    IQS0_STATUS_MAINTAIN                    Control of Changeability of User Status
    No.of Exits:          6
    No.of BADis:          7
    Arunima

  • User Exit for IW51-Create Notifcation

    Hi Friends
    I want to capture User or System Status when Notifcation - IW51 is saved. Kindly help me finding the exact user exit for this requirement,
    Thanks
    Senthiil

    Hello,
    Below are the list of Exits and BADI,
    Enhancement/ Business Add-in            Description
    Enhancement
    IWO10026                                User check on setting status 'Do not perform'
    IWO10027                                User exit: Generate user-defined settlement rule
    IWOC0001                                Create PM/SM notification: Determine reference object
    IWOC0002                                PM/SM notification: Check whether status change is allowed
    IWOC0003                                PM/SM authorization check of ref. object and planner group
    IWOC0004                                Change single-level list editing PM/QM/SM ALV settings
    Business Add-in
    IQS_MASS_CHANGE                         BadI for Mass Changes to Notifications
    IQS0_STATUS_MAINTAIN                    Control of Changeability of User Status
    WOC_FL_DETERMINE                        Determine Date for Determining Installation Loc. Equi.
    NOTIF_AUTHORITY_01                      Additional Authorization Checks for the Notification
    IWOC_OBJECTINFO_CHNG                    Changes to Data of Object Info Screen
    IWOC_LIST_TUNING                        Performance Tuning for Lists in PM/CS
    IWO1_SUBSCREEN_0170                     Display Additional Data on Object Screen 0170 PhysicalSample
    Regards,
    Sujeet

  • Performance Tuning Tips

    Dear All,
    In our project we are facing lot of problems with the Performance, users are compaining about the poor performance of the few reports and all, we are in the process of fine tuning the reports by following the all methods/suggestions provided by SAP ( like removing the select queries from Loops, For all entries , Binary serach etc )
    But still I want to know from you people what can we check from BASIS percpective ( all the settings ) and also ABAP percpective to improve the performance.
    And also I have one more query that what is " Table Statistics " , what is the use of this ...
    Please give ur valueble suggestions to us in improving the performance .
    Thanks in Advance !

    Hi
    <b>Ways of Performance Tuning</b>
    1.     Selection Criteria
    2.     Select Statements
    •     Select Queries
    •     SQL Interface
    •     Aggregate Functions
    •     For all Entries
    Select Over more than one Internal table
    <b>Selection Criteria</b>
    1.     Restrict the data to the selection criteria itself, rather than filtering it out using the ABAP code using CHECK statement. 
    2.     Select with selection list.
    <b>Points # 1/2</b>
    SELECT * FROM SBOOK INTO SBOOK_WA.
      CHECK: SBOOK_WA-CARRID = 'LH' AND
             SBOOK_WA-CONNID = '0400'.
    ENDSELECT.
    The above code can be much more optimized by the code written below which avoids CHECK, selects with selection list
    SELECT  CARRID CONNID FLDATE BOOKID FROM SBOOK INTO TABLE T_SBOOK
      WHERE SBOOK_WA-CARRID = 'LH' AND
                  SBOOK_WA-CONNID = '0400'.
    <b>Select Statements   Select Queries</b>
    1.     Avoid nested selects
    2.     Select all the records in a single shot using into table clause of select statement rather than to use Append statements.
    3.     When a base table has multiple indices, the where clause should be in the order of the index, either a primary or a secondary index.
    4.     For testing existence , use Select.. Up to 1 rows statement instead of a Select-Endselect-loop with an Exit. 
    5.     Use Select Single if all primary key fields are supplied in the Where condition .
    <b>Point # 1</b>
    SELECT * FROM EKKO INTO EKKO_WA.
      SELECT * FROM EKAN INTO EKAN_WA
          WHERE EBELN = EKKO_WA-EBELN.
      ENDSELECT.
    ENDSELECT.
    The above code can be much more optimized by the code written below.
    SELECT PF1 PF2 FF3 FF4 INTO TABLE ITAB
        FROM EKKO AS P INNER JOIN EKAN AS F
          ON PEBELN = FEBELN.
    Note: A simple SELECT loop is a single database access whose result is passed to the ABAP program line by line. Nested SELECT loops mean that the number of accesses in the inner loop is multiplied by the number of accesses in the outer loop. One should therefore use nested SELECT loops  only if the selection in the outer loop contains very few lines or the outer loop is a SELECT SINGLE statement.
    <b>Point # 2</b>
    SELECT * FROM SBOOK INTO SBOOK_WA.
      CHECK: SBOOK_WA-CARRID = 'LH' AND
             SBOOK_WA-CONNID = '0400'.
    ENDSELECT.
    The above code can be much more optimized by the code written below which avoids CHECK, selects with selection list and puts the data in one shot using into table
    SELECT  CARRID CONNID FLDATE BOOKID FROM SBOOK INTO TABLE T_SBOOK
      WHERE SBOOK_WA-CARRID = 'LH' AND
                  SBOOK_WA-CONNID = '0400'.
    <b>Point # 3</b>
    To choose an index, the optimizer checks the field names specified in the where clause and then uses an index that has the same order of the fields . In certain scenarios, it is advisable to check whether a new index can speed up the performance of a program. This will come handy in programs that access data from the finance tables.
    <b>Point # 4</b>
    SELECT * FROM SBOOK INTO SBOOK_WA
      UP TO 1 ROWS
      WHERE CARRID = 'LH'.
    ENDSELECT.
    The above code is more optimized as compared to the code mentioned below for testing existence of a record.
    SELECT * FROM SBOOK INTO SBOOK_WA
        WHERE CARRID = 'LH'.
      EXIT.
    ENDSELECT.
    <b>Point # 5</b>
    If all primary key fields are supplied in the Where condition you can even use Select Single.
    Select Single requires one communication with the database system, whereas Select-Endselect needs two.
    <b>Select Statements           contd..  SQL Interface</b>
    1.     Use column updates instead of single-row updates
    to update your database tables.
    2.     For all frequently used Select statements, try to use an index.
    3.     Using buffered tables improves the performance considerably.
    <b>Point # 1</b>
    SELECT * FROM SFLIGHT INTO SFLIGHT_WA.
      SFLIGHT_WA-SEATSOCC =
        SFLIGHT_WA-SEATSOCC - 1.
      UPDATE SFLIGHT FROM SFLIGHT_WA.
    ENDSELECT.
    The above mentioned code can be more optimized by using the following code
    UPDATE SFLIGHT
           SET SEATSOCC = SEATSOCC - 1.
    <b>Point # 2</b>
    SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA
      WHERE CARRID = 'LH'
        AND CONNID = '0400'.
    ENDSELECT.
    The above mentioned code can be more optimized by using the following code
    SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA
      WHERE MANDT IN ( SELECT MANDT FROM T000 )
        AND CARRID = 'LH'
        AND CONNID = '0400'.
    ENDSELECT.
    <b>Point # 3</b>
    Bypassing the buffer increases the network considerably
    SELECT SINGLE * FROM T100 INTO T100_WA
      BYPASSING BUFFER
      WHERE     SPRSL = 'D'
            AND ARBGB = '00'
            AND MSGNR = '999'.
    The above mentioned code can be more optimized by using the following code
    SELECT SINGLE * FROM T100  INTO T100_WA
      WHERE     SPRSL = 'D'
            AND ARBGB = '00'
            AND MSGNR = '999'.
    <b>Select Statements       contd…           Aggregate Functions</b>
    •     If you want to find the maximum, minimum, sum and average value or the count of a database column, use a select list with aggregate functions instead of computing the aggregates yourself.
    Some of the Aggregate functions allowed in SAP are  MAX, MIN, AVG, SUM, COUNT, COUNT( * )
    Consider the following extract.
                Maxno = 0.
                Select * from zflight where airln = ‘LF’ and cntry = ‘IN’.
                 Check zflight-fligh > maxno.
                 Maxno = zflight-fligh.
                Endselect.
    The  above mentioned code can be much more optimized by using the following code.
    Select max( fligh ) from zflight into maxno where airln = ‘LF’ and cntry = ‘IN’.
    <b>Select Statements    contd…For All Entries</b>
    •     The for all entries creates a where clause, where all the entries in the driver table are combined with OR. If the number of entries in the driver table is larger than rsdb/max_blocking_factor, several similar SQL statements are executed to limit the length of the WHERE clause.
         The plus
    •     Large amount of data
    •     Mixing processing and reading of data
    •     Fast internal reprocessing of data
    •     Fast
         The Minus
    •     Difficult to program/understand
    •     Memory could be critical (use FREE or PACKAGE size)
    <u>Points to be must considered FOR ALL ENTRIES</u> •     Check that data is present in the driver table
    •     Sorting the driver table
    •     Removing duplicates from the driver table
    Consider the following piece of extract
    Loop at int_cntry.
           Select single * from zfligh into int_fligh
    where cntry = int_cntry-cntry.
    Append int_fligh.
    Endloop.
    The above mentioned can be more optimized by using the following code.
    Sort int_cntry by cntry.
    Delete adjacent duplicates from int_cntry.
    If NOT int_cntry[] is INITIAL.
                Select * from zfligh appending table int_fligh
                For all entries in int_cntry
                Where cntry = int_cntry-cntry.
    Endif.
    <b>Select Statements    contd…  Select Over more than one Internal table</b>
    1.     Its better to use a views instead of nested Select statements.
    2.     To read data from several logically connected tables use a join instead of nested Select statements. Joins are preferred only if all the primary key are available in WHERE clause for the tables that are joined. If the primary keys are not provided in join the Joining of tables itself takes time.
    3.     Instead of using nested Select loops it is often better to use subqueries.
    <b>Point # 1</b>
    SELECT * FROM DD01L INTO DD01L_WA
      WHERE DOMNAME LIKE 'CHAR%'
            AND AS4LOCAL = 'A'.
      SELECT SINGLE * FROM DD01T INTO DD01T_WA
        WHERE   DOMNAME    = DD01L_WA-DOMNAME
            AND AS4LOCAL   = 'A'
            AND AS4VERS    = DD01L_WA-AS4VERS
            AND DDLANGUAGE = SY-LANGU.
    ENDSELECT.
    The above code can be more optimized by extracting all the data from view DD01V_WA
    SELECT * FROM DD01V INTO  DD01V_WA
      WHERE DOMNAME LIKE 'CHAR%'
            AND DDLANGUAGE = SY-LANGU.
    ENDSELECT
    <b>Point # 2</b>
    SELECT * FROM EKKO INTO EKKO_WA.
      SELECT * FROM EKAN INTO EKAN_WA
          WHERE EBELN = EKKO_WA-EBELN.
      ENDSELECT.
    ENDSELECT.
    The above code can be much more optimized by the code written below.
    SELECT PF1 PF2 FF3 FF4 INTO TABLE ITAB
        FROM EKKO AS P INNER JOIN EKAN AS F
          ON PEBELN = FEBELN.
    <b>Point # 3</b>
    SELECT * FROM SPFLI
      INTO TABLE T_SPFLI
      WHERE CITYFROM = 'FRANKFURT'
        AND CITYTO = 'NEW YORK'.
    SELECT * FROM SFLIGHT AS F
        INTO SFLIGHT_WA
        FOR ALL ENTRIES IN T_SPFLI
        WHERE SEATSOCC < F~SEATSMAX
          AND CARRID = T_SPFLI-CARRID
          AND CONNID = T_SPFLI-CONNID
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.
    The above mentioned code can be even more optimized by using subqueries instead of for all entries.
    SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
        WHERE SEATSOCC < F~SEATSMAX
          AND EXISTS ( SELECT * FROM SPFLI
                         WHERE CARRID = F~CARRID
                           AND CONNID = F~CONNID
                           AND CITYFROM = 'FRANKFURT'
                           AND CITYTO = 'NEW YORK' )
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.
    <b>Internal Tables</b>
    1.     Table operations should be done using explicit work areas rather than via header lines.
    2.     Always try to use binary search instead of linear search. But don’t forget to sort your internal table before that.
    3.     A dynamic key access is slower than a static one, since the key specification must be evaluated at runtime.
    4.     A binary search using secondary index takes considerably less time.
    5.     LOOP ... WHERE is faster than LOOP/CHECK because LOOP ... WHERE evaluates the specified condition internally.
    6.     Modifying selected components using “ MODIFY itab …TRANSPORTING f1 f2.. “ accelerates the task of updating  a line of an internal table.
    <b>Point # 2</b>
    READ TABLE ITAB INTO WA WITH KEY K = 'X‘ BINARY SEARCH.
    IS MUCH FASTER THAN USING
    READ TABLE ITAB INTO WA WITH KEY K = 'X'.
    If TAB has n entries, linear search runs in O( n ) time, whereas binary search takes only O( log2( n ) ).
    <b>Point # 3</b>
    READ TABLE ITAB INTO WA WITH KEY K = 'X'. IS FASTER THAN USING
    READ TABLE ITAB INTO WA WITH KEY (NAME) = 'X'.
    <b>Point # 5</b>
    LOOP AT ITAB INTO WA WHERE K = 'X'.
    ENDLOOP.
    The above code is much faster than using
    LOOP AT ITAB INTO WA.
      CHECK WA-K = 'X'.
    ENDLOOP.
    <b>Point # 6</b>
    WA-DATE = SY-DATUM.
    MODIFY ITAB FROM WA INDEX 1 TRANSPORTING DATE.
    The above code is more optimized as compared to
    WA-DATE = SY-DATUM.
    MODIFY ITAB FROM WA INDEX 1.
    7.     Accessing the table entries directly in a "LOOP ... ASSIGNING ..." accelerates the task of updating a set of lines of an internal table considerably
    8.    If collect semantics is required, it is always better to use to COLLECT rather than READ BINARY and then ADD.
    9.    "APPEND LINES OF itab1 TO itab2" accelerates the task of appending a table to another table considerably as compared to “ LOOP-APPEND-ENDLOOP.”
    10.   “DELETE ADJACENT DUPLICATES“ accelerates the task of deleting duplicate entries considerably as compared to “ READ-LOOP-DELETE-ENDLOOP”.
    11.   "DELETE itab FROM ... TO ..." accelerates the task of deleting a sequence of lines considerably as compared to “  DO -DELETE-ENDDO”.
    <b>Point # 7</b>
    Modifying selected components only makes the program faster as compared to Modifying all lines completely.
    e.g,
    LOOP AT ITAB ASSIGNING <WA>.
      I = SY-TABIX MOD 2.
      IF I = 0.
        <WA>-FLAG = 'X'.
      ENDIF.
    ENDLOOP.
    The above code works faster as compared to
    LOOP AT ITAB INTO WA.
      I = SY-TABIX MOD 2.
      IF I = 0.
        WA-FLAG = 'X'.
        MODIFY ITAB FROM WA.
      ENDIF.
    ENDLOOP.
    <b>Point # 8</b>
    LOOP AT ITAB1 INTO WA1.
      READ TABLE ITAB2 INTO WA2 WITH KEY K = WA1-K BINARY SEARCH.
      IF SY-SUBRC = 0.
        ADD: WA1-VAL1 TO WA2-VAL1,
             WA1-VAL2 TO WA2-VAL2.
        MODIFY ITAB2 FROM WA2 INDEX SY-TABIX TRANSPORTING VAL1 VAL2.
      ELSE.
        INSERT WA1 INTO ITAB2 INDEX SY-TABIX.
      ENDIF.
    ENDLOOP.
    The above code uses BINARY SEARCH for collect semantics. READ BINARY runs in O( log2(n) ) time. The above piece of code can be more optimized by
    LOOP AT ITAB1 INTO WA.
      COLLECT WA INTO ITAB2.
    ENDLOOP.
    SORT ITAB2 BY K.
    COLLECT, however, uses a hash algorithm and is therefore independent
    of the number of entries (i.e. O(1)) .
    <b>Point # 9</b>
    APPEND LINES OF ITAB1 TO ITAB2.
    This is more optimized as compared to
    LOOP AT ITAB1 INTO WA.
      APPEND WA TO ITAB2.
    ENDLOOP.
    <b>Point # 10</b>
    DELETE ADJACENT DUPLICATES FROM ITAB COMPARING K.
    This is much more optimized as compared to
    READ TABLE ITAB INDEX 1 INTO PREV_LINE.
    LOOP AT ITAB FROM 2 INTO WA.
      IF WA = PREV_LINE.
        DELETE ITAB.
      ELSE.
        PREV_LINE = WA.
      ENDIF.
    ENDLOOP.
    <b>Point # 11</b>
    DELETE ITAB FROM 450 TO 550.
    This is much more optimized as compared to
    DO 101 TIMES.
      DELETE ITAB INDEX 450.
    ENDDO.
    12.   Copying internal tables by using “ITAB2[ ] = ITAB1[ ]” as compared to “LOOP-APPEND-ENDLOOP”.
    13.   Specify the sort key as restrictively as possible to run the program faster.
    <b>Point # 12</b>
    ITAB2[] = ITAB1[].
    This is much more optimized as compared to
    REFRESH ITAB2.
    LOOP AT ITAB1 INTO WA.
      APPEND WA TO ITAB2.
    ENDLOOP.
    <b>Point # 13</b>“SORT ITAB BY K.” makes the program runs faster as compared to “SORT ITAB.”
    <b>Internal Tables         contd…
    Hashed and Sorted tables</b>
    1.     For single read access hashed tables are more optimized as compared to sorted tables.
    2.      For partial sequential access sorted tables are more optimized as compared to hashed tables
    Hashed And Sorted Tables
    <b>Point # 1</b>
    Consider the following example where HTAB is a hashed table and STAB is a sorted table
    DO 250 TIMES.
      N = 4 * SY-INDEX.
      READ TABLE HTAB INTO WA WITH TABLE KEY K = N.
      IF SY-SUBRC = 0.
      ENDIF.
    ENDDO.
    This runs faster for single read access as compared to the following same code for sorted table
    DO 250 TIMES.
      N = 4 * SY-INDEX.
      READ TABLE STAB INTO WA WITH TABLE KEY K = N.
      IF SY-SUBRC = 0.
      ENDIF.
    ENDDO.
    <b>Point # 2</b>
    Similarly for Partial Sequential access the STAB runs faster as compared to HTAB
    LOOP AT STAB INTO WA WHERE K = SUBKEY.
    ENDLOOP.
    This runs faster as compared to
    LOOP AT HTAB INTO WA WHERE K = SUBKEY.
    ENDLOOP.
    <b>Reward if usefull</b>

  • User Exit for default values in IW51

    Hi All,
    Can any suggest User Exit or BADI for default values like Cause code in IW51 Tcode.
    Regards,
    Samatha.

    Hi,
    Please check these
    Exits
    IWO10026                                User check on setting status 'Do not perform'
    IWO10027                                User exit: Generate user-defined settlement rule
    IWOC0001                                Create PM/SM notification: Determine reference object
    IWOC0002                                PM/SM notification: Check whether status change is allowed
    IWOC0003                                PM/SM authorization check of ref. object and planner group
    IWOC0004                                Change single-level list editing PM/QM/SM ALV settings
    Business Add-in
    IQS_MASS_CHANGE                         BadI for Mass Changes to Notifications
    IQS0_STATUS_MAINTAIN                    Control of Changeability of User Status
    NOTIF_AUTHORITY_01                      Additional Authorization Checks for the Notification
    WOC_FL_DETERMINE                        Determine Date for Determining Installation Loc. Equi.
    IWOC_OBJECTINFO_CHNG                    Changes to Data of Object Info Screen
    IWOC_LIST_TUNING                        Performance Tuning for Lists in PM/CS
    IWO1_SUBSCREEN_0170                     Display Additional Data on Object Screen 0170 PhysicalSample

  • User Exit in iw22 screen

    Dear all,
    I want to use a user exit in IW22 screen to add notification time.
    pls help me.
    Thankx

    No Screen Exit for IW22 i think it has only Function Exits
    Custom Exits
    IWO10026      User check on setting status 'Do not perform'
    IWO10027      User exit: Generate user-defined settlement rule
    IWOC0001      Create PM/SM notification: Determine reference object
    IWOC0002      PM/SM notification: Check whether status change is allowed
    IWOC0003      PM/SM authorization check of ref. object and planner group
    IWOC0004      Change single-level list editing PM/QM/SM ALV settings
    BADIs
    IQS0_STATUS_MAINTAIN                 Control of Changeability of User Status
    IWO1_SUBSCREEN_0170                  Display Additional Data on Object Screen 0170 PhysicalSample
    IWOC_LIST_TUNING                     Performance Tuning for Lists in PM/CS
    IWOC_OBJECTINFO_CHNG                 Changes to Data of Object Info Screen
    NOTIF_AUTHORITY_01                   Additional Authorization Checks for the Notification
    WOC_FL_DETERMINE                     Determine Date for Determining Installation Loc. Equi.
    Edited by: Bala Krishna on Aug 20, 2008 4:00 PM

  • User Exits for IW21 - Notification Type

    Hi ,
    I need to access User Exit related to IW21 , IW22 Transactions.
    I require the user exit to customize process for a specific Notification type 'KS'.
    User exit when a notificatrion Type is created & when it is modified.

    User Exits and Badi's For IW21 & IW22
    BADI's
    IQS0_STATUS_MAINTAIN Control of Changeability of User Status
    IWO1_SUBSCREEN_0170  Display Additional Data on Object Screen 0170 PhysicalSample
    IWOC_LIST_TUNING     Performance Tuning for Lists in PM/CS
    IWOC_OBJECTINFO_CHNG Changes to Data of Object Info Screen
    NOTIF_AUTHORITY_01   Additional Authorization Checks for the Notification
    WOC_FL_DETERMINE     Determine Date for Determining Installation Loc. Equi.
    USER EXITS
    IWO10026  User check on setting status 'Do not perform'
    IWO10027  User exit: Generate user-defined settlement rule
    IWOC0001  Create PM/SM notification: Determine reference object
    IWOC0002  PM/SM notification: Check whether status change is allowed
    IWOC0003  PM/SM authorization check of ref. object and planner group
    IWOC0004  Change single-level list editing PM/QM/SM ALV settings

  • User exit/ badi needed for planned order create/change,collective ATP check

    Dear All,
    I'm looking for a user exit/ badi which can be used for planned orders at the stage of
    mass collective availability check (COMAC tcode) update; or at some other relevant stages of mass update of planned orders.
    I need after collective availability check to perform the following:
    1) to copy date from "total comitment" field on header tab of planned order and paste it (replace old date) to order finish date on header screen
    then
    2) to start a scheduling.
    Very appreciate your help.
    Best Regards,
    Andrey
    Edited by: Andrey Kruglov on Apr 15, 2010 3:06 PM
    Edited by: Andrey Kruglov on Apr 15, 2010 3:07 PM

    Dear,
    Use the BAPI : BAPI_PLANNEDORDER_CHANGE
    Or use the function module MD_SET_ACTION_PLAF for Schedule planned order.
    and the transaction MDAC Execute action for planned order
    This function module includes the following actions:
    Explode BOM
    Explode BOM, check availability
    Check availability, only explode BOM in the case of a requirement
    Check availability, do not explode BOM
    Reset availability
    Change planned order data
    Schedule planned order
    Delete planned order
    Assign the key for the respective action control to the materials in the material master (MRP 4 view).
    Please refer this thread,
    Re: MDVP for collective orders
    Regards,
    R.Brahmankar

  • What is difference between User Exits and BAPI

    hello sap gurus
    what is difference between User Exits and BAPIs

    http://www.sap-img.com/abap/what-is-user-exits.htm
    www.****************
    Where as this customer exits are again divided into:
    1. Menu Exits.
    2. Field Exits.
    3. Screen Exits.
    4. Function module exits.
    These all the things comes under Enhancements.
    User exits
    1.A user exit is a three character code that instructs the system to access a program during system processing.SXX: S is for standard exits that are delivered by SAP.
    XX represents the 2-digit exit number.UXX: U is for user exits that are defined by the user. XX represents the 2-digit exit number
    2.USER EXITS are FORMS and are called by SAP standard programs
    using PERFORM.
    3.Inside the form (user exit) you can read and change almost
    any global data from host program.
    4. User exits are more flexible because you have more information to use in your code but on the other hand , it is very easy to manipulate erroneously global data and lead the standard program to a dump or even to make database inconsistent.
    5.While changing User-exit,Access Key is required,
    BAPI is nothing function module but which is remote enabled, means you can access this fm through other SAP or non-SAP system by assingning to business object,which we can crea in SWO1 transaction.
    more details see WWW.****************
    reward if helpful

  • Difference between bex user exit and macros in functionality?

    Hi all,
    I need to create a report on material master data. I created an infoset on 0material and 0mat_plant. In the requirem
    ent, I have a report containing different material numbers followed by attributes in each row. the final column in each
    row should be calculated using logic. the logic involves comparing different row values and arrive at final conclusion.
    the logic comprises of large number of if conditions. so should i use bex user exit or excel macros?
    what is the difference between user exit and macros in funcitonalilty?
    is there an issue transporting the macro to Prod for end users to use?
    any performance criteria?
    Any how to documents ..will be of a lot of help
    plz send them to [email protected]
    Message was edited by:
            ravi a

    Hi,
    Macros offer a powerful and flexible way to extend the features of MS Excel. You can either create a macro using VB code or Record a macro. Use Alt+F11 for creating macro using VB code.
    You can refer to Microsoft help site or this link for more details:
    http://www.taltech.com/support/sw_tricks/exmacros.htm
    User-exits are empty subroutines that SAP Developers have provided for you.You can fill them with your own source code.Technically this is a modification.Customer exits are nothing but a include in customer name space will be provided in the function module which starts with CALL CUSTOMER.You can fill them with your own source code.Technically this is an enhancement.
    look into following links for procedure to find and use user-exits transaction for finding user-exits is 'SMOD'
    http://www.sapbrain.com/TUTORIALS/TECHNICAL/user_exits_tutorial.html
    http://www.sap-img.com/abap/a-short-tutorial-on-user-exits.htm

  • How to implement F4IF_INT_TABLE_VALUE_REQUEST in search help User Exit?

    Hi,
    I need to enhanse search help and add F4 functionality to display list of company codes when cursor is in PBUKR field. I put F4IF_INT_TABLE_VALUE_REQUEST
    into the user exit but nothing works.
    I get error that PROCESS is not defined. If I remove that line there is no error but nothing works.
    Can someone tell me what is wrong in the code below.
    Thank you.
    FUNCTION z_hr_shlp_wbs_element.
    ""Local interface:
    *"  TABLES
    *"      SHLP_TAB TYPE  SHLP_DESCR_TAB_T
    *"      RECORD_TAB STRUCTURE  SEAHLPRES
    *"  CHANGING
    *"     VALUE(SHLP) TYPE  SHLP_DESCR_T
    *"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
      TABLES: prps.
      DATA: it_prps LIKE prps OCCURS 0 WITH HEADER LINE.
      DATA: status_tab LIKE jstat OCCURS 0 WITH HEADER LINE.
      DATA: l_posid LIKE prps-posid.
      DATA: l_subrc LIKE sy-subrc.
      DATA: l_pbukr LIKE prps-pbukr,   " Added by vr
            value TYPE DDSHIFACE-VALUE.
    EXIT immediately, if you do not want to handle this step
      IF callcontrol-step <> 'SELONE' AND
         callcontrol-step <> 'SELECT' AND
                                           " AND SO ON
         callcontrol-step <> 'DISP'.
        EXIT.
      ENDIF.
    ------------------------------------------------------ added by vr
    PROCESS ON VALUE-REQUEST.
    FIELD PRPS-PBUKR MODULE PBUKR.
      DATA: BEGIN OF VALUE_TAB OCCURS 0,
      LPBUKR LIKE PRPS-PBUKR,
      LPOSID LIKE PRPS-POSID,
      END OF VALUE_TAB.
    DATA: BEGIN OF RETURN_TAB OCCURS 0.
    INCLUDE STRUCTURE DDSHRETVAL.
    DATA END OF RETURN_TAB.
    SELECT PBUKR POSID FROM PRPS UP TO 20 ROWS
    INTO TABLE VALUE_TAB WHERE SLWID = 'QLT UDF'.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
    RETFIELD = 'PBUKR'
    WINDOW_TITLE = 'Statusselektion'
    VALUE_ORG = 'S' "hierdurch kann die Struktur genommen werden
    TABLES
    VALUE_TAB = VALUE_TAB
    RETURN_TAB = RETURN_TAB
    EXCEPTIONS
    PARAMETER_ERROR = 1
    NO_VALUES_FOUND = 2
    OTHERS = 3.
    end of additions
    STEP SELONE  (Select one of the elementary searchhelps)
    This step is only called for collective searchhelps. It may be used
    to reduce the amount of elementary searchhelps given in SHLP_TAB.
    The compound searchhelp is given in SHLP.
    If you do not change CALLCONTROL-STEP, the next step is the
    dialog, to select one of the elementary searchhelps.
    If you want to skip this dialog, you have to return the selected
    elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
    either to 'PRESEL' or to 'SELECT'.
      IF callcontrol-step = 'SELONE'.
      PERFORM SELONE .........
        EXIT.
      ENDIF.
    STEP PRESEL  (Enter selection conditions)
    This step allows you, to influence the selection conditions either
    before they are displayed or in order to skip the dialog completely.
    If you want to skip the dialog, you should change CALLCONTROL-STEP
    to 'SELECT'.
    Normaly only SHLP-SELOPT should be changed in this step.
      IF callcontrol-step = 'PRESEL'.
      PERFORM PRESEL ..........
        EXIT.
      ENDIF.
    STEP SELECT    (Select values)
    This step may be used to overtake the data selection completely.
    To skip the standard seletion, you should return 'DISP' as following
    step in CALLCONTROL-STEP.
    Normally RECORD_TAB should be filled after this step.
    Standard function module F4UT_RESULTS_MAP may be very helpfull in this
    step.
      IF callcontrol-step = 'SELECT'.
    Maximum records are set to 0 because the counter for Max records keeps
    running, even if you filter out certain records. This is a similar
    problem as described in OSS Note 148525.
    Feb 3, 2004 LS: devk907353
                    (maxrecords = 0 defaults to maxrecords 500)
                    As of release 4.7, it appears that maxrecords is
                    being considered on the read of the view, rather
                    than prior to presenting the selection list.
                    When only 500 records are passed into this exit,
                    the subsequent evaluation yields very few records
                    in the selection list.  By setting maxrecords to
                    8000, the entire contents of the view are passed
                    to this user exit, and therefor the search help
                    yields a reasonable selection list to the user
                    (as was the case in release 4.6b).
      callcontrol-maxrecords = 0.        " devk907353
        callcontrol-maxrecords = 8000.     " devk907353
      PERFORM STEP_SELECT TABLES RECORD_TAB SHLP_TAB
                          CHANGING SHLP CALLCONTROL RC.
      IF RC = 0.
        CALLCONTROL-STEP = 'DISP'.
      ELSE.
        CALLCONTROL-STEP = 'EXIT'.
      ENDIF.
        EXIT. "Don't process STEP DISP additionally in this call.
      ENDIF.
    Added by vr, Nov. 2007 ---------------------------
      CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'
      EXPORTING
        PARAMETER               = 'PBUKR' " Reference to search help parameter
      IMPORTING
        VALUE                   = value
      TABLES
        SHLP_TAB                = shlp_tab
        RECORD_TAB              = record_tab
      CHANGING
        SHLP                    = shlp
        CALLCONTROL             = callcontrol.
      l_pbukr = value.
    End of additions by vr ---------------------------
    STEP DISP     (Display values)
    This step is called, before the selected data is displayed.
    You can e.g. modify or reduce the data in RECORD_TAB
    according to the users authority.
    If you want to get the standard display dialog afterwards, you
    should not change CALLCONTROL-STEP.
    If you want to overtake the dialog on you own, you must return
    the following values in CALLCONTROL-STEP:
    - "RETURN" if one line was selected. The selected line must be
      the only record left in RECORD_TAB. The corresponding fields of
      this line are entered into the screen.
    - "EXIT" if the values request should be aborted
    - "PRESEL" if you want to return to the selection dialog
    Standard function modules F4UT_PARAMETER_VALUE_GET and
    F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
      IF callcontrol-step = 'DISP'.
    DEVK909420 Begin
      SELECT * FROM prps INTO TABLE it_prps
         WHERE belkz = 'X'.
    Changed by vr, Nov. 2007
      IF l_pbukr <> ''.
        SELECT * FROM prps INTO TABLE it_prps
           WHERE belkz =  'X'
             AND fkstl <> ''
             AND pbukr = l_pbukr.
        ELSE.
        SELECT * FROM prps INTO TABLE it_prps
           WHERE belkz =  'X'
             AND fkstl <> ''.
        ENDIF.
    End of changes
    DEVK909420 End
        SORT it_prps BY posid.
        LOOP AT record_tab.
          l_posid = record_tab+96(24).
          READ TABLE it_prps WITH KEY posid = l_posid.
          IF sy-subrc = 0.
            CALL FUNCTION 'STATUS_READ'
                 EXPORTING
                      objnr       = it_prps-objnr
                      only_active = 'X'
                 TABLES
                      status      = status_tab.
    DEVK909329 Begin
            read table status_tab with key inact = ''
                                           stat  = 'E0001'.
            if sy-subrc is initial.
              read table status_tab with key inact = ''         "DEVK909345
                                             stat  = 'I0002'.   "DEVK909345
            endif.
    DEVK909329 End
          ENDIF.
          IF sy-subrc NE 0.
            DELETE record_tab.
          ELSE.
           IF record_tab+114(1) EQ '.' AND
              record_tab+115(1) EQ '9'.
             DELETE record_tab.
           ELSE.
    DEVK909420 Begin
            IF record_tab+102(1) EQ '9'.
              DELETE record_tab.
            ELSEIF record_tab+104(1) EQ '9'.
              DELETE record_tab.
            ENDIF.
    DEVK909420 End
           ENDIF.
          ENDIF.
        ENDLOOP.
        EXIT.
      ENDIF.
    ENDFUNCTION.

    Hi Vitaly,
    Process on Value Request and search help exit is entirely two idea to display the f4 values.please remove the PROCESS ON VALUE REQUEST from the function module.write the required select statements after   CHECK callcontrol-step EQ 'SELECT' . and pass the value to the function module
    CALL FUNCTION 'F4UT_RESULTS_MAP'
          TABLES
            shlp_tab          = shlp_tab
            record_tab        = record_tab
            source_tab        = l_record
          CHANGING
            shlp              = shlp
            callcontrol       = callcontrol
          EXCEPTIONS
            illegal_structure = 1
            OTHERS            = 2.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        IF ( sy-subrc = 0 AND l_record IS INITIAL ).
          MESSAGE 'No values found' TYPE 'S'.
        ENDIF.
        callcontrol-step = 'DISP'.
    Find the documentaion for this function module for further help
    message edited by
    shibu

Maybe you are looking for