Using Standard BAPI-1

Business Scenario: Suppose in an Organization for some Maintenance activity they need a Grinder Machine . It might be the case that the Machine is already there and they can reserve the machine for some day(why reservation of  the machine like in a big org they can have multiple maintenance activities and some of them may need the same machine) but what if the Machine is not there. That time the Org takes the decision to get it from Vendors for which the Purchasing dept should raise a Purchase requisition ,then Purchase order and at last the vendor supplies the goods.

In SAP R/3 the issue can be replicated by Creating a Reservation(Tx-MB21) which says that there is a requirement for some material and then they go to Tx-ME51N and Create the Purchase Requisition and then Pur Order . This all needs front end interaction with the SAP GUI.

Here the Org can take the Decision that when ever there is any requirement for a Material the Purchase Requisition should generate automatically and also the Purchase Order by some background job.

In such case we can use the Standard BAPI: ‘BAPI_PR_CREATE’ to generate the Purchase Requisition from the Reservation .

Step1. Go to Tx- MB21 to create a reservation of material.

Step2. Provide the details and click on Create Button.

Step3. Provide the cost center and Material number, quantity, plant and storage location. It signifies that this plant needs material for the Maintenance activity.

Step4. Save it.

Step5. Teh Reservation Number is generated.

Step6. The Reservations are stored in the Table: RESB.

Step7. Then the User Run the Tx: ME51N to cretae a purchase requisition for the required material quantity .

Step8. Pur Req- Doc type is NB. Provides the material number and quantity and creates a purchase requisition.

Step9. The below Pur Requisition is generated which can be displayed in ME53N.

Step10. Lets Automate the process by Using BAPI fm. The Bapi: BAPI_PR_CRETAE can be used to create the bapi in  background.

Step11. Create a message class to show our message.


Step12. Below report creates the Purchase requisition for the selected Reservation.

REPORT  zres_pr_create MESSAGE-ID ZPR_CRT.

TYPE-POOLS : slis.

DATA :             lt_resb TYPE TABLE OF resb.


  SELECT * FROM resb INTO TABLE lt_resb WHERE bdter = sy-datum. ” Get all reservation 

                                                                                                                      ” created on the current date

  SORT lt_resb BY rsnum rspos.




      i_callback_program       = sy-cprog

      i_callback_pf_status_set = ‘FM_STATUS’

      i_callback_user_command  = ‘CRT_PR’

      i_structure_name         = ‘RESB’

      i_grid_title             = ‘Showing Todays Material Reservation’


      t_outtab                 = lt_resb.


*&      Form  FM_status


*       text


FORM fm_status USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS ‘STATUS_PR’ EXCLUDING rt_extab. ” Create Pf status for appl toolbar Button

ENDFORM.                    “fm_status


*&      Form  crt_pr


*       text


*      –>R_UCOMM      text

*      –>RS_SELFIELD  text


FORM crt_pr USING r_ucomm LIKE sy-ucomm

                                   rs_selfield TYPE slis_selfield.

  DATA : it_resb     TYPE TABLE OF resb,

                ls_resb    TYPE resb,

                pos          TYPE rspos .

  DATA : ls_hdr           TYPE bapimereqheader,

               ls_hdr_x        TYPE bapimereqheaderx,

               pr_num          TYPE bapimereqheader-preq_no,

               t_ret               TYPE TABLE OF bapiret2,

               s_ret              TYPE  bapiret2,

               t_pritm          TYPE TABLE OF bapimereqitemimp,

               s_pritm         TYPE  bapimereqitemimp,

               t_pritmx        TYPE TABLE OF bapimereqitemx,

               s_pritmx        TYPE  bapimereqitemx.

  IF rs_selfield-sel_tab_field  = ‘1-RSNUM’. ” CHeck if the User Single-click on the Reservation No.

    LOOP AT lt_resb INTO ls_resb WHERE rsnum = rs_selfield-value . ” Read the Reservation Value

      APPEND ls_resb TO it_resb.

      CLEAR ls_resb.


** The Reservation Records are Ready in the Internal Table it_resb**

** FILL Header ****

    ls_hdr-pr_type = ‘NB’.   ” Pur Requisition Document type

    ls_hdr_x-pr_type = ‘X’.

****fill item***

    LOOP AT it_resb INTO ls_resb .

      pos                              = 10 + ls_resb-rspos – 1.

      s_pritm-preq_item      = pos.

      s_pritm-pur_group      = ‘011’.               ” pur group

      s_pritm-preq_name     = ‘SHIPPING’.   ” requisitioner name

      s_pritm-material          = ls_resb-matnr. ” material Number

      s_pritm-plant               = ls_resb-werks. ” plant number

      s_pritm-store_loc        = ls_resb-lgort.   ” storage loc

      s_pritm-quantity          = ls_resb-bdmng. ” quantity

      s_pritm-unit                 = ls_resb-meins. ” unit

      s_pritm-deliv_date      = sy-datum + 10 . ” delivery date of goods

      s_pritm-reserv_no       = ls_resb-rsnum.  ” reservation number

      APPEND s_pritm TO t_pritm.

      CLEAR : ls_resb, s_pritm.

*****fill item text ***

      s_pritmx-preq_item      = pos.    

      s_pritmx-preq_itemx    = ‘X’.

      s_pritmx-pur_group      = ‘X’.

      s_pritmx-preq_name     = ‘X’.

      s_pritmx-material          = ‘X’.

      s_pritmx-plant              = ‘X’.

      s_pritmx-store_loc       = ‘X’.

      s_pritmx-quantity          = ‘X’.

      s_pritmx-unit                = ‘X’.

      s_pritmx-deliv_date     = ‘X’.

      APPEND s_pritmx TO t_pritmx.

      CLEAR s_pritmx.


    CASE r_ucomm.

      WHEN ‘CRT_PR’. ” Fcode when the user clicks on the Appl Tool Bar Button “Create Pur Req” .

        CALL FUNCTION ‘BAPI_PR_CREATE’  ” Call this bapi and pass the values


            prheader  = ls_hdr

            prheaderx = ls_hdr_x


            number    = pr_num


            return    = t_ret  ” return message is store in this table

            pritem    = t_pritm

            pritemx   = t_pritmx.

        IF sy-subrc = 0.

          READ TABLE t_ret INTO s_ret WITH KEY type = ‘S’.

          IF sy-subrc  = 0.

            MESSAGE  I000 WITH s_ret-message_v1 rs_selfield-value.

            COMMIT WORK.



          ROLLBACK WORK.






Step13. Create the PF status with below application tool bar Button.

Step14. Run the report and we can see all the Reservations created for the current date.

Step15. Select any one and click on the Button Create Pur Requisition.

Step16. The BAPI is executed and the Pur Req. is generated which can be viewed in Tx- ME53N.



  1. You made some really good points there. I checked on the internet for additional information about the issue and found most people will go along with your views on this site. ggdagkdefbff


Leave a Reply to Johnd510 Cancel reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s