We got the requirement from the client that to add Vendor code field in Reservation screen (Tcode-MB21/22) & Update Vendor Code against Reservation.
So I have looked all the EXIT provide by SAP but none of then contained Screen Exit. So I have looked on SCN for any further possibility to full fill this requirement. Mostly talked about same EXIT & BADI’s But strangely I could not find any particular solution which will solve my quest.
I thought it’s better to share my solution that how we solve this quest So that It might be helpful to people with the same requirement.
Let’s get started 😉 …!!!
As a developer, debugging is the best tool to find & understand the flow of the program.
After lots of debugging the standard programs, we come to the solution that we will provide a pop up to add vendor code as they need in the header level & fortunately user accepted our solution.
As there is no screen exit for ME21/22 so we fulfill the requirement by just giving the pop up during SAVE.
During debugging I have found various enhancement spot but very few spots fulfill our requirement & below is the detailed solution for that.
Program Name: MM07RFR0
Just Create Enhancement spot at the end of the subroutine: r–segmente_generieren
as shown in below screenshot:
Below is the Code Sample:
ENHANCEMENT 1 ZMB_VENDOR_POP_UP. "active version IF sy-tcode EQ 'MB21' OR sy-tcode EQ 'MB22'. DATA: it_resb TYPE STANDARD TABLE OF sval, wa_resb TYPE sval, it_resb_ext TYPE STANDARD TABLE OF resb, lv_lifnr TYPE resb-lifnr. IF it_resb IS INITIAL. wa_resb-tabname = 'RESB'. wa_resb-fieldname = 'LIFNR'. IF xresb-lifnr IS NOT INITIAL. *--Display Vendor--* wa_resb-value = xresb-lifnr. ENDIF. APPEND wa_resb TO it_resb. ENDIF. *--Pop up for Vendor--* CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Select Vendor' tables fields = it_resb EXCEPTIONS ERROR_IN_FIELDS = 1 OTHERS = 2 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. READ TABLE it_resb ASSIGNING FIELD-SYMBOL(<fs_resb>) INDEX 1. *--Fill the Vendor in RESB--* IF sy-subrc IS INITIAL. lv_lifnr = <fs_resb>-value. ENDIF. IF xresb IS NOT INITIAL. LOOP AT xresb ASSIGNING FIELD-SYMBOL(<fs_xresbz>). IF lv_lifnr IS NOT INITIAL. <fs_xresbz>-lifnr = lv_lifnr. ENDIF. ENDLOOP. ENDIF. *--For No change--* IF upd_resb IS INITIAL AND upd_rkpf IS INITIAL AND new_resb IS INITIAL AND sy-tcode EQ 'MB22'. IF xresb-rsnum IS NOT INITIAL. SELECT * FROM resb INTO TABLE it_resb_ext WHERE rsnum = xresb-rsnum. IF sy-subrc IS INITIAL. LOOP AT it_resb_ext ASSIGNING FIELD-SYMBOL(<fs_resb_update>). IF <fs_resb_update>-lifnr NE lv_lifnr. <fs_resb_update>-lifnr = lv_lifnr. *--Update the Vendor--* UPDATE resb SET lifnr = <fs_resb_update>-lifnr WHERE rsnum EQ <fs_resb_update>-rsnum AND rspos EQ <fs_resb_update>-rspos AND rsart EQ <fs_resb_update>-rsart. ENDIF. ENDLOOP. ENDIF. ENDIF. ENDIF. ENDIF. ENDENHANCEMENT.
Above solution handle both the requirement i.e. during creating (MB21) it saved the Vendor code against Reservation & during change (MB22) it should display the previous vendor & able to change the same at the SAVE moment.
When clicking on SAVE button (MB21) the user will get pop up for vendor code –
After Saved Vendor got updated against reservation in Table – RESB
Also, the same will be reflected in MIGO –
Your feedback & improvement are always welcome! 🙂