SAP Standard do not unrelease all release code after we reject any Purchase requisition. but the solutions is you can enhance using BAdI ME_PROCESS_REQ_CUST and POST Method, so after we rejected particular PR then save the data changed to run your enhancement code.
First you need to get all data item to check whether the Purchase requisition rejected or not, you can see the status rejected in field EBAN-BANPR i.e 8 for Rejected.
Get all of release codes that have been released using ABAP code below.
1 |
lt_code = lv_state->get_state( ) |
After you get those release codes, then use BAPI_REQUISITION_RESET_REL_GEN function module to unrelease those release code that have been released.
Full Source code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
DATA : lv_strategy TYPE REF TO if_release_strategy_mm, lv_state TYPE REF TO if_release_state_mm, lt_code TYPE merel_t_codes, lw_code LIKE LINE OF lt_code. DATA: lv_frgzu TYPE frgzu, lv_frgz TYPE frgzu, lv_frgke TYPE frgke, lv_is_released TYPE mmpur_bool. DATA : ld_mereq_header TYPE mereq_header, ld_mereq_item TYPE mereq_item, li_mereq_item TYPE TABLE OF mereq_item, li_item TYPE mmpur_requisition_items, lw_item TYPE mmpur_requisition_item, lv_preq TYPE REF TO if_purchase_requisition. REFRESH : li_mereq_item. IF sy-tcode = 'ME54N'. BREAK aby_rachmad. ld_mereq_header = im_header->get_data( ). li_item = im_header->get_items( ). LOOP AT li_item INTO lw_item. ld_mereq_item = lw_item-item->get_data( ). APPEND ld_mereq_item TO li_mereq_item. ENDLOOP. READ TABLE li_mereq_item INTO ld_mereq_item INDEX 1. IF ld_mereq_item-banpr = '08'. TRY. CALL METHOD im_header->if_releasable_mm~get_data IMPORTING ex_strategy = lv_strategy ex_state = lv_state. CATCH cx_sy_ref_is_initial. ENDTRY. IF NOT lv_strategy IS INITIAL . lt_code = lv_state->get_state( ). ENDIF. LOOP AT lt_code INTO lw_code. CALL METHOD lv_strategy->propagate_state EXPORTING im_frgco = lw_code-rel_code CHANGING ch_frgzu = lv_frgzu ch_frgke = lv_frgke ch_released = lv_is_released EXCEPTIONS no_authority = 1 prerequisite_missing = 2 already_released = 3 not_released = 4 not_responsible = 5 illegal_call = 6 illegal_indicator = 7 OTHERS = 8. IF sy-subrc = 0. IF lv_frgke EQ 'Y'. CALL FUNCTION 'BAPI_REQUISITION_RESET_REL_GEN' EXPORTING number = ld_mereq_header-banfn rel_code = lw_code-rel_code. ENDIF. ENDIF. ENDLOOP. ENDIF. ENDIF. |