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.
RameshHi,
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 Dieterwhen 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 RamirezHi,
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
SenthiilHello,
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 -
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 dont 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 -
Dear all,
I want to use a user exit in IW22 screen to add notification time.
pls help me.
ThankxNo 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 PMDear,
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 BAPIshttp://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 aHi,
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 -
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
-
Do I need to run DNS on a colo server being accessed remotely via VPN?
My Mac Mini Server is located in a colo site. We generally use it for Web, email and a couple of application-specific services. It has a dedicated IP address. We have a separate DNS service we use to point to the domains on the server located remotel
-
Premiere element 9: How can I get rid of a disc menus without replacing it?
Premiere element 9: How can I get rid of a disc menus without replacing it?
-
Authorization Issue for Transaction Codes PA10,PA20,PA30 &PA40
Hi Experts, I have created Custom role for accessing ALL HR Transaction codes in IDES System and added to the user & Tested. All transactions codes are working except PA10,PA20,PA30 &PA40 Please help me regading this. Advance Thanks, BBC
-
How can i pass an array to a java script function??
-
View video files in my browser cache
how do I locate and view video file in my browsers cache? I'm running WinXP and Firefox 9.0.1. thanks, Steve [email protected]