Skip to Content
Author's profile photo Former Member

Creating VOFM custom routine, functionality same as SAP standard routine 103 with Additional Functionality

1.    Introduction

1.1  Document Purpose

1.2   This is the document helps you to create custom routine for sales order for below specific requirement:

Functional description:

In case of sale order with the SD document category ‘K’ or ‘L’ or ‘H’ related to an invoice, we need to fill the fixed value date (VBKD_VALDT) with the billing reference date (VBRK_FKDAT).

For example:

Invoice 90001111, the billing date is 22.07.2013


If we create a sale order related to this invoice, we want the fixed value date equal to the billing reference date.



As per the requirement:

Sap standard routine ‘103’ triggers whenever sales order is being created with reference. Sap standard routine is configured in VOFM transaction as:



Sap standard routine ‘103’ has the functionality of copying the billing document header data and billing document line item data into the sales order header data, whenever sales order is being created using reference document.

Note: To achieve this requirement we can also enhance the SAP standard routine 103 but here they need the custom routine because it will be configured on demand basis by client whenever they need it.

About VOFM Transaction:


Transaction VOFM is a tool that was developed in R/3 to facilitate the definition of both SAP delivered as well as customer defined routines/rules used in the system during various business processes. VOFM routines are ABAP code written in Forms. VOFM provides the user with the benefit of choosing from one of the standard delivered R/3 routines or writing their own. VOFM is intended for the implementation team when configuring the system. It is not intended for the end user.

Here we have four important menus:

i)                    Copying requirements

ii)                   Data transfer

iii)                 Requirements

iv)                 Formulas

             Steps to create the custom routine:

1)     Go to transaction VOFMàData transferà Orders


2)     Provide a custom routine name


Naming Convention:

VOFM routines are organized using the Group Indicator Code. The VOFMprogram uses

the group indicator to determine the program include and subroutine names when it

dynamically creates these objects. The assignment of these names is hard coded in the program.
The valid group indicator codes are defined in data base domain GRPZE using a value range.

Go to transaction ‘VOFN’ place the cursor on class input and press ‘F1’ key.



Now double click on data element and see the domain values as:


All the fixed values are Group Indicator Code.

·         Standard SAP routine name starts from 1 to 599.

·        So all custom name starts from 600 to 999.

Now provide the custom routine name and press enter, it will ask for access key:


Once the access key provided a include program get generated with transport request as:


All include program generated from Routine has an entry in table TFRM (Form Routines for Requirements/Formulas/Data Transports) and TFRMT (FORM Routines for Reqs./Formulae/Data Transports: Texts).

1)     Double click on the custom routine 901

A modification message appears as:

Then mentioned icon in the above screen shot needs to be used for modification of the custom routine.

Now place the cursor at the end of the ENDFORM and click on the insert button to write our own code as shown below:


On clicking insert button we have the area for writing our code with *(INSERT,, *) INSERT as:

Now as per requirement above we have written following code:

Along with code for standard routine 103, the code marked in red is the additional for this specific scenario has been used.
The billing date has been copied also in VBRK value date which also gets copied into VBKD.
The standard SAP program for creating the sales order using reference document checks for all values and if found any difference between CVBRK and VBKD, it creates an additional entry for VBKD. For that reason in this scenario fixed value date is also copied into CVBRK.

Once the coding is over we need to activate the custom routine 901 and include program generated.
For confirming the same we need to check the entries in TFRM table as:


Even if any error occurs then we need to run the SAP standard program “RV80HGEN” to regenerate all VOFM routines.


The Billing Document ’90000112’ has been used to create the Sales order :



It has the fixed value date : 22.07.2013

Now following steps has been taken to create the sales order using billing document as follows:

In VA01 transaction for a given order type(ZRD) when sales order has been created with Reference


Reference document has been taken as billing document(9000112) as mentioned above.

After clicking on the copy option, a screen will open having the information of the sales order.

Capture.JPGTransporting the custom routine to different system:

Program RV80HGEN can be used to re-generate all VOFM routines. Whenever VOFM

routines are transported this program should be executed in all target systems. It is

possible to include an automatic execution of the program in the transport request by

applying OSS note 598475.

It can be added to the transport request of the custom routine include as:

Double click on the transport request


Open it in change mode and provide input as shown below:


And press enter and save.

So when this transport is sent to target system then it gets executed automatically.

Even if it does not work then we need to run SAP standard program ‘RV80HGEN’ manually in the target system.

Activation OR Deactivation Of Custom Routine:

Sometimes while transporting the entries in table TFRM or TFRMT does not exists in target system. In this case we need to run the standard SAP program RV80HGEN first and then Standard SAP program SDINVOFM used to identify and repair missing table entries in the VOFM control tables TFRM and TFRMT.

We can also activate and deactivate our custom routine from VOFM as:


Depending upon the action the TRFM or TRFMT entries gets updated automatically as:

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo venu gopal
      venu gopal

      Hai wonderful document you have shared , really this is very helpful for functional consultants

      thanks a lot

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      You are always welcome

      Author's profile photo Pradeep Mani
      Pradeep Mani

      Good work,thanks for posting this.

      What will be the use of having fixed value date equal to billing date.

      Author's profile photo Ravin NK
      Ravin NK

      That way we are just controlling that the customer's due date to pay the invoice starts on the day he was billed.

      Author's profile photo Debopriya Ghosh
      Debopriya Ghosh

      Helpful document.....

      Author's profile photo Former Member
      Former Member

      good work.. really helpful

      Author's profile photo VIJAYA SIMHA CHINTARLAPALLI REDDY

      Very good.Can you please let me me know more about this VOFM's if you have any document please share it with me 🙂 .

      Author's profile photo Eduardo Hinojosa
      Eduardo Hinojosa


      I can suggest you these notes

      SAP Note 156230 - Requirements: What is permitted, what is not?

      SAP Note 22808 - Transferring formulas

      SAP Note 326560 - Various problems when using VOFM functions

      SAP Note 356737 - Customer name range for VOFM routines

      SAP Note 381348 - Using user exit, customer exit, VOFM in SD

      SAP Note 327220 - VOFM function and its objects



      Author's profile photo Former Member
      Former Member

      Thank you very much your suggession and it is really helpful ....

      Author's profile photo Deep K
      Deep K

      Hi Mohammed,

      Very useful document for those are not worked with copying routine.



      Author's profile photo Eduardo Hinojosa
      Eduardo Hinojosa

      Good job, but your document needs a comment. The range for VOFM according Note 327220 - VOFM function and its objects in "2.2 Namespaces" is for FOFU (this case from 900 to 999), in detail:

      Subsequent functions from 900 to 999 (FOFU this case)

      Group key routines from 50 to 99

      Data transfer routines f. texts from 50 to 99

      all other indicators from 600 to 999



      Author's profile photo varun yadav
      varun yadav



      Author's profile photo Rampe V
      Rampe V

      Hello Mohammed Khurshed,

      Useful document.

      Thank You.

      Author's profile photo Shiva Vasireddy
      Shiva Vasireddy

      This is Very Helpful Document

      Author's profile photo Former Member
      Former Member

      Hello Mohammed Khurshed,

      Your Explanation is very clear and easily understandable and Document is very helpful.

      Continue the good work.....

      Thanks and Best Regards,


      Author's profile photo Former Member
      Former Member

      very useful document

      Author's profile photo Syed Mehtab
      Syed Mehtab


      very helpful document.

      i look forward to other scenarios based VOFM


      Author's profile photo Former Member
      Former Member

      Very good and helpfull document.

      Author's profile photo SANJIT BHATTACHARYA

      Very good document waiting for more such kind of documents.

      Author's profile photo Former Member
      Former Member

      Very good document, thanks for sharing, it was usefull.

      Author's profile photo Former Member
      Former Member

      Hi Mohammed,

      Thank you for the well illustrated document. It would be helpful for newbie's like myself. But I am  unable to understand the business need to fill the fixed value date (VBKD_VALDT) with the billing reference date (VBRK_FKDAT).

      In what scenario, the business would like to have this kind of requirement.. since we have a field called service rendered date..

      sap sd 1.JPG

      Author's profile photo Tanmay Verma
      Tanmay Verma

      Very well documented. Thanks a lot.

      Author's profile photo Former Member
      Former Member

      Hi ,

      very usfull document . thanks alot for sharing ..


      venkata rami reddy konduri

      Author's profile photo Aspire WF
      Aspire WF


      Extremely helpful. Great post! Thanks a lot for sharing.



      Author's profile photo Santhanakrishnan Arumugam
      Santhanakrishnan Arumugam


      Great post keep going, Good Luck 🙂

      Author's profile photo Former Member
      Former Member

      Dear Mohammed Khurshed,

      Thank you for posting such a detailed document.

      Could you also tell me how to segregate customer line item in billing document into different business areas?

      Author's profile photo Sandeep Kumar
      Sandeep Kumar


      Thank you so much.

      Right document what I was looking for.

      Very helpful.


      Sandeep Kumar S

      Author's profile photo Christian Tapia Sabogal
      Christian Tapia Sabogal

      Thanks for this post!!

      Just an aclaration, when adding the program RV80HGEN to the Transport Request, it should be of type XPRA, and not PROG. As the description says: "Program executed after transport"

      Author's profile photo Pappu Kumar
      Pappu Kumar

      Fatastic document. Thanks for sharing this ..

      Author's profile photo Abel Dicka
      Abel Dicka

      Great thanks