Vous êtes sur la page 1sur 7

What is the difference between a User Exit and Routines in SAP SD?

Routines

Routines are short sub-programs that carry out various checks during document processing. In the
SD module, you can create and process routines for copying requirements, data transfer,
requirements and formulas using transaction VOFM. Besides the routines delivered to you with the
system, you can create your own individual routines.

Transaction VOFM allows you to follow a standardized procedure for creating routines. The name
ranges are predefined for routines delivered to you with the system and for routines created by the
customer. This name convention guarantees that your own routines are not overwritten during a
Release upgrade.

Copying requirements and data transfer

The routines for coying requirements and data transfer are defined for the document types sales
orders, deliveries, billing documents, sales activities, as well as for texts. You specify copying
requirements and the data transfers when defining the document flow for each document type. You
enter the routines for texts in the access sequences for texts.

o Copying requirements determine which data is copied during the copying of documents. A copying
requirement could define, for example, that the same customer must appear in the document header
when you copy an inquiry to a quotation.

o Routines for data transfer make a detailed control of the copying of fields possible. A data transfer
could define, for example, that particular item fields can only be copied in combination with other
particular fields and can only be copied into contracts or credit and debit memos.

Requirements and formulas

Routines for requirements and formulas are used for functions using the condition technique. You
enter these routines in the pricing procedure or the condition types. Requirements are also used
for statistics.

o A requirement in pricing can determine that an access is dependent on a particular precondition. It


can carry out a check of the document currency, for example, and, depending on whether it is a
foreign or the local currency, allow or deny the access.

o Formulas are used in pricing to define various factors for pricing. Formulas are defined for scale
base value, condition base value, condition amount, group key, and rounding rules. The formula for
a rounding rule could define, for example, that all calculated amounts are rounded to two places
behind the decimal point during a price change of the condition record. The formula for a condition
base value could define, that the header discount is distributed among the order items according to
volume an not value of the item, as is the case in the standard SAP R/3 System.

Creating routines

There are two methods to create a routine


1. Creating by overwriting

When using this method, a note appears as a commentary in the routine to be newly created.

2. Creating

When creating a new routine, an ABAP with internal number assignment is created.

You always have to activate a new routine before using it. Each routine for requirements and
formulas, copying requirements and data transfers is stored in a separate program. For each new
routine an entry is added in table TFRM and TFRMT. For each routine, a long text can be stored as a
text module.

Most routines must be changed in client 000. Transaction VOFM can be transported as XPRAs,
which means that after the import all routines can be activated.

Name ranges for routines

The standard routines are to be within the number range 001-599 (for 2 digit formula numbers, 01-49)

The user routines are to be within the number range 600-999 (for 2 digit formula numbers, 50-99).

Interface to the transport system

For technical reasons, an interface to the transport system is not possible at the moment. Until up to
and including Release 3.0, developments have to be transported manually using correction numbers
and transport requests.

******** User exit*********


In this step you can implement the user exits listed below.

Note

You should carry out this step only if both of the following apply:

o The SAP standard processes does not suit your needs.

o You are a competent ABAP/4 programmer.


User exit Replaces

PBEN0001 Feature BAREA


PBEN0002 Feature BENGR
PBEN0003 Feature BSTAT
PBEN0004 Feature CSTV1
PBEN0005 Feature CRDV1
PBEN0006 Feature ELIGR
PBEN0007 Feature TRMTY
PBEN0008 Function HR_BEN_CALC_BENEFIT_COST
PBEN0009 Function HR_BEN_CALC_BENEFIT_CREDIT
PBEN0010 Function HR_BEN_CALC_BENEFIT_SALARY
PBEN0011 Function HR_BEN_CALC_COVERAGE_AMOUNT
PBEN0012 Form CALC_ELIG_DATE
PBEN0013 Form CALC_TERM_DATE
PBEN0014 Function HR_BEN_CALC_SAVE_ER_CONTRIB
PBEN0015 Form CHECK_ELIG_SERVICE
PBEN0016 Function HR_BEN_CALC_PARTICIPATION_DATE
PBEN0017 Feature EVTGR
PBEN0018 Feature COVGR
PBEN0019 Feature EECGR
PBEN0020 Feature ERCGR
PBEN0021 Funtionmodule HR_BEN_CALC_SPEN_ER_CONRIB
PBEN0022 Function HR_BEN_GET_PROCESS_DATES
PBEN0023 Function HR_BEN_CALC_CUTOFF_AGE
PBEN0024 Function HR_BEN_CALC_CUTOFF_LOS
PBEN0025 Function HR_BEN_CALC_CUTOFF_SAL
PCOB0001 COBRA Letter
PCOB0004 Form HR_BEN_COB_GET_TOTAL_COSTS

If you need to implement any of these User exits, you first create a project for the user exit, then
assign the user exit(s) to your project. Then you write the coding for the user exit, and finally activate
the project.

For general information about user exits, in the R/3 Library, go to Basis components and look at the
Enhancements section. In addition there is detailed information about each user exit that you can
access when you assign it to your project (see below).

Activities

Start by creating your project.

1. Enter a name for your project.

2. Select Modification -> Create.

3. Enter a short text for your project and select save.

Next assign the user exit to your project.

4. Select Components.

5. Enter the name(s) of the user exits you want to implement.

6. Select SAP documentation, if you want detailed information on this user exit.

7. Select save.

8. Select back.

Next make your coding modifications.


9. Select enhancement components.

10. Select change.

11. Select the user exit you want to write code for.

12. Select the include zxpbco01.

The system will then prompt you to create this include, and you can continue to write your coding in it.

Next activate your project.

13. Return to the initial screen and select activate project.

*******************

SAP User Exits Routine

User exits are routine which SAP allows you to add in additional customized programs process
without affecting the standard SAP programs.

SAP user exit are usually declare as a form routine :-

form userexit_xxxxx
........................
endform

In VL01 - Create Delivery Order, standard program SAPMV50A, the standard program did not
check for storage location equal to space, and delivery quantity less than one when the user click
the save button. Therefore I have to insert the additional checking into the userexit routine.

Steps:-

Goto transaction VL01 to pick a Sales Order for delivery (you don't have to save the data)
In the initial screen, click System -> Status -> Double click on Program (Screen)
In the dialog program SAPMV50A, click Edit -> Search/replace
Type userexit in the Find field, then click the In program radio button and hit Enter
A number of userexit routine will be display. You'll have to roughly decide which is the
correct userexit routine to used.

form userexit_save_document_prepare.
case xlips-pstyv.
when 'TAX' or 'REX'.
* Accept this two Delivery item category

when 'REN'.
if xlips-lgort = space.
* Reject this Delivery item category
message e001.
endif.

when others.
if xlips-matnr <> space.
* Check storage location not space
if xlips-lgort = space.
message e002.
endif.
* Check delivery quantity not zero
if xlips-pikmg < 1.
message e003.
endif.
endif.
endcase.
endform.

What is the use of user-exit and all?


Is it about modifying SAP program?

Suppose that you need some functionality which is not provided in sap what do you do. Sap has
provided you with three options.

1) Customizing.
2) Modifications.
3) User Exits.

So what are these three in the first case when you take Customization is nothing but you are
customizing SAP according to your need and requirement for example you want the Purchase
Order Numbers to start with <Co_Name><seq_no>(sequential no) this kind of stuff is done in
customization.

Modification is nothing but you are modifying SAP std code which is written during developing
your SAP std programms or screens.

Thirdly to avoid modifications SAP has provide you with some exit points like for example after
the PBO event in module pool programming comes the PAI. so in between these two events you
wanted the change something so SAP has provided with an exit point. that exit point is called user
exits. for example user exits for me21 PO Create is MM06005 if I am not wrong. they are nothing
but simple function module within which you write your code which functions just like normal
program and executes between the PAI and PBO events.

**********
Inbound processing is widely the reverse process of an outbound.. The received IDoc
has to be unpacked, interpreted and transferred to an application for further
processing.
Below is the example of an inbound function module. This module
Inbound processing function expects an IDoc with rows of plain text and will save this text under a
module given name to SAP's text database. The procedure will extract the text
name and the text line from the IDoc and hand over the text data to the
function module READ_TEXT which will store the text in the text
pool.
FUNCTION
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWFAP_PAR-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWFAP_PAR-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*"----------------------------------------------------------------------
DATA: XTHEAD LIKE THEAD .
DATA: TLINES LIKE TLINE OCCURS 0 WITH HEADER LINE.

CLEAR XTHEAD.
REFRESH TLINES.

* *** --- Unpacking the IDoc --- ***


LOOP AT IDOC_DATA.
CASE IDOC_DATA-SEGNAM.
WHEN 'YAXX_THEAD'.
MOVE IDOC_DATA-SDATA TO XTHEAD.
WHEN 'YAXX_TLINE'.
MOVE IDOC_DATA-SDATA TO TLINES.
ENDCASE.
ENDLOOP.

* *** --- Calling the application to process the received data --- ***
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
HEADER = XTHEAD
SAVEMODE_DIRECT = 'X'
TABLES
LINES = TLINES.

ADD SY-SUBRC TO OK.

* fllen IDOC_Status
* fill IDOC_Status
IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
IDOC_STATUS-MSGV1 = IDOC_CONTRL-IDOCTP.
IDOC_STATUS-MSGV2 = XTHEAD.
IDOC_STATUS-MSGID = '38'.
IDOC_STATUS-MSGNO = '000'.
IF OK NE 0.
IDOC_STATUS-STATUS = '51'.
IDOC_STATUS-MSGTY = 'E'.
ELSE.
IDOC_STATUS-STATUS = '53'.
IDOC_STATUS-MSGTY = 'S'.
CALL_TRANSACTION_DONE = 'X'.
ENDIF.
APPEND IDOC_STATUS.

ENDFUNCTION.
The received IDoc data is processed record by record and unpacking
Unpacking the IDoc data is a simple discrimination by case according the segment name
provided with each record..
* *** --- Unpacking the IDoc --- ***
LOOP AT IDOC_DATA.bb
CASE IDOC_DATA-SEGNAM.
WHEN 'YAXX_THEAD'.
PERFORM UNPACK_IDOC TABLES IDOC_DATA USING XTHEAD.
WHEN 'YAXX_TLINE'.
PERFORM UNPACK_TAB TABLES IDOC_DATA TLINES.
ENDCASE.
ENDLOOP.
When the IDoc is unpacked it needs to be passed to the application. In
Application processing our case this will be a simple call to a standard function which is
going to store the data to the text database.
* *** --- Calling the application to process the received data --- ***
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
HEADER = XTHEAD
SAVEMODE_DIRECT = 'X'
TABLES
LINES = TLINES.
Finally the processing routine needs to pass a status record to the IDoc
Writing a status log processor. This status indicates successful or unsuccessful processing
and will be added as a log entry to the table EDIDS.
* fill IDOC_Status
IF OK NE 0.
IDOC_STATUS-STATUS = '51'.
...
ELSE.
IDOC_STATUS-STATUS = '53'.
...
ENDIF.
APPEND IDOC_STATUS.
The status value '51' indicates a general error during application
processing and the status '53' indicates everything is OK. There are
numerous other status values, with distinct meanings, but '51' and '53'
are the most common ones.