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.
START-OF-SELECTION.
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.
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
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'
TABLES
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.
ENDLOOP.
** 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.
ENDLOOP.
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
EXPORTING
prheader = ls_hdr
prheaderx = ls_hdr_x
IMPORTING
number = pr_num
TABLES
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.
ENDIF.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDCASE.
ENDIF.
ENDFORM. "CRT_PR
_________________________________________________________________________________
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 Cretae Pur Requisition.
Step16. The BAPI is executed and the Pur Req. is generated which can be viewed in Tx- ME53N.
_________________________________________________________________________________
No comments:
Post a Comment