Technical Articles
Reject Purchase Requisition Item, just like FIORI does!
Hello,
When SAP® FIORI or the standard WF for Purchase requisition is releasing a item Code, they use the standard BAPI: BAPI_REQUISITION_RELEASE.
But what happens when SAP® FIORI rejects a PR item? You will search for the “REJECT” BAPI for PR item, but you’ll not find. ?
Basically, the DEMO FM below can accomplish that for you using the mmpur_purchase_req_factory class.
function z_pr_reject.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(IM_BANFN) TYPE BANFN
*" REFERENCE(IM_BNFPO) TYPE BNFPO OPTIONAL
*" TABLES
*" T_RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
data: l_factory type mmpur_purchase_req_factory,
* Header related:
lo_req type ref to if_purchase_requisition,
ls_return type bapiret2,
l_hdr_data type mereq_header,
l_document type mepo_document,
* Item related:
lo_item type ref to if_purchase_requisition_item,
lt_hdr_items_tab type mmpur_requisition_items,
ls_hdr_item like line of lt_hdr_items_tab,
ls_item_data type mereq_item,
lv_error type c,
l_allowed type mmpur_bool,
l_success type mmpur_bool.
* Get requisition factory reference:
call function 'MEREQ_GET_FACTORY'
importing
ex_factory = l_factory.
* Create header object:
clear lo_req.
l_document-trtyp = 'V'. " V is change txn type
l_document-doc_key(10) = im_banfn.
l_document-doc_type = 'B'.
l_document-initiator-initiator = mmpur_initiator_rel.
call method l_factory->create_header
exporting
im_tcode = 'ME54N' "just to read T160!!
im_document = l_document
im_protect = 'X'
importing
ex_instance = lo_req
exceptions
failure = 1
already_registered = 2.
* IF create_header() fails:
if lo_req is initial.
message i004(fmfg_mm01). return.
endif.
* Header status data
l_hdr_data = lo_req->get_data( ).
lo_req->get_transaction_state( importing ex_document = l_document ).
* Get items data
lt_hdr_items_tab = lo_req->get_items( ).
* Process Items
loop at lt_hdr_items_tab into ls_hdr_item.
* "Get Item (Model+data)
lo_item = ls_hdr_item-item.
check not lo_item is initial.
ls_item_data = lo_item->get_data( ).
if ls_item_data-bnfpo ne im_bnfpo.
continue.
endif.
l_allowed = mmpur_no.
l_success = mmpur_no.
if lo_item->if_releasable_mm~is_rejection_allowed( ) = mmpur_yes.
lo_item->if_releasable_mm~reject( exporting im_reset = mmpur_no
exceptions failed = 1 others = 2 ).
"Final checks
call method lo_req->check
importing
ex_success = l_success.
"error message occured
if l_success eq mmpur_no.
ls_return-type = 'E'.
ls_return-message = text-001.
append ls_return to t_return.
return.
endif.
"post document
call method lo_req->post
exporting
im_uncomplete = mmpur_no
importing
ex_success = l_success.
if l_success eq mmpur_yes.
call method l_factory->commit( ).
else.
ls_return-type = 'E'.
ls_return-message = text-002.
append ls_return to t_return.
return.
endif.
else.
ls_return-type = 'E'.
ls_return-message = text-003.
append ls_return to t_return.
return.
endif.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endloop.
endfunction.
001 Rejection check Error! 22 30
002 Rejection Error! 16 16
003 Rejection not allowed! 22 132
Testing:
Release Refused status, just like FIORI does.
So if you need to develop any sort of solution that rejects PR itens, that’s a way out! Enjoy!
Regards.
Good text, Jose! Simple and useful.
Hello Cristiano Marques , thanks... Working on the PO scenario as well.
Regards.
Hi Jose. I find your contribution very valuable not only from a technical point of view. It shows nicely that ABAP works under the surface (Fiori / UI5) 🙂
Thanks, stay tuned for more!
Hello Sequeira, how are you? Thank you for sharing. I used the example of the purchase order and works very well. But for purchase requisition it didn't work, this line returns false: if lo_item->if_releasable_mm~is_rejection_allowed( ) = mmpur_yes. Any more tips? Thank you very much.
Hi
Have you solved your problem yet?
Hello Sequeira,
Very important scenario.
However I am also getting the same issue as Josiane.
Please advise.
Thank you.
Hi
I am also facing same issue as Josiane and Sachin. Did you guys find any solution?
Regards
Jitendra
Try this.
DATA: lt_xeban TYPE TABLE OF ueban,
lt_xebkn TYPE TABLE OF uebkn,
lt_yeban TYPE TABLE OF ueban,
lt_yebkn TYPE TABLE OF uebkn,
ls_xeban type ueban.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_xeban
FROM eban WHERE banfn = iv_banfn.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_xebkn
FROM ebkn WHERE banfn = iv_banfn.
lt_yeban = lt_xeban.
lt_yebkn = lt_xebkn.
"update new status and update indicator
ls_xeban-kz = 'U'. "update indicator
ls_xeban-banpr = '08'. "Release Refused
MODIFY lt_xeban from ls_xeban TRANSPORTING kz banpr
where banfn = iv_banfn.
CALL FUNCTION 'ME_UPDATE_REQUISITION'
TABLES
xeban = lt_xeban
xebkn = lt_xebkn
yeban = lt_yeban
yebkn = lt_yebkn.
CALL FUNCTION 'ME_UPDATE_REQUISITION_CHNGDOC'
TABLES
xeban = lt_xeban
xebkn = lt_xebkn
yeban = lt_yeban
yebkn = lt_yebkn.