SAP BAPI - Create Reservation with authorization checks for Ext. Material Group

This abap program have similiar functionality as transaction code 'MB21'.  It make use of the ABAP BAPI functions 'BAPI_RESERVATION_CREATE'.  It have more AUTHORITY-CHECK than 'MB21'.  The purpose is to avoid changing the SAP standard program.

REPORT ZRES_311.

tables : RESB,
         T001W,
         MARA.

** Internal tables for BAPI call
data: begin of gm_header.
        include structure BAPIRKPFC.
data: end of gm_header.

data: begin of gm_item occurs 0.
        include structure BAPIRESBC.
data: end of gm_item.

data: begin of zreturn occurs 0.
        include structure BAPIRETURN.
data: end of zreturn.

DATA: AUTH_FLG(1).

PARAMETERS X_BDTER LIKE RESB-BDTER DEFAULT SY-DATUM.
PARAMETERS X_WERKS LIKE RESB-WERKS.
PARAMETERS X_BWART LIKE RESB-BWART.
PARAMETERS X_REC01 LIKE RESB-UMLGO.
PARAMETERS X_ISS01 LIKE RESB-UMLGO.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 16(10) TEXT-010.
SELECTION-SCREEN COMMENT 37(10) TEXT-020.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M01 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q01 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M02 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q02 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M03 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q03 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M04 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q04 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M05 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q05 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M06 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q06 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M07 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q07 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M08 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q08 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M09 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q09 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.
SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 05(10) TEXT-040.
PARAMETERS X_M10 LIKE RESB-MATNR.
SELECTION-SCREEN COMMENT 35(01) TEXT-050.
PARAMETERS X_Q10 LIKE RESB-ERFMG.
SELECTION-SCREEN END OF LINE.

PERFORM AUTHORITY_CHECK.
PERFORM GM_DATA.
* CHECK WHETHER TABLE IS EMPTY
IF GM_ITEM[] is initial.
   FORMAT COLOR COL_NEGATIVE.
   WRITE: / 'All Material are EMPTY'.
ELSEIF AUTH_FLG = 'X'.
   FORMAT COLOR COL_NEGATIVE.
   WRITE: / 'Please obtain all your necessary Authorization'.
ELSE.
   PERFORM BAPI_CREATE_311.
ENDIF.

FORM AUTHORITY_CHECK.
   CLEAR AUTH_FLG.
   FORMAT COLOR COL_NEGATIVE.

   AUTHORITY-CHECK OBJECT 'M_MRES_WWA'
   ID 'ACTVT' FIELD '03'
   ID 'WERKS' FIELD X_WERKS.
   IF SY-SUBRC NE 0.
      AUTH_FLG = 'X'.
      WRITE:/ 'You are not authorised for Plant :',  X_WERKS.
   ENDIF.

   AUTHORITY-CHECK OBJECT 'M_MRES_BWA'
   ID 'ACTVT' FIELD '03'
   ID 'BWART' FIELD X_BWART.
   IF SY-SUBRC NE 0.
      AUTH_FLG = 'X'.
      WRITE:/ 'You are not authorised for Movement Type :',  X_BWART.
   ENDIF.

   AUTHORITY-CHECK OBJECT 'M_MSEG_LGO'
   ID 'ACTVT' FIELD '03'
   ID 'BWART' FIELD X_REC01.
   IF SY-SUBRC NE 0.
      AUTH_FLG = 'X'.
      WRITE:/ 'You are not authorised for Storage Location :',  X_REC01.
   ENDIF.

   AUTHORITY-CHECK OBJECT 'M_MSEG_LGO'
   ID 'ACTVT' FIELD '03'
   ID 'BWART' FIELD X_ISS01.
   IF SY-SUBRC NE 0.
      AUTH_FLG = 'X'.
      WRITE:/ 'You are not authorised for Storage Location :',  X_ISS01.
   ENDIF.

   FORMAT COLOR OFF.
ENDFORM.

FORM GM_DATA.
     REFRESH GM_ITEM.
     CLEAR   GM_HEADER.

     GM_HEADER-RES_DATE   = X_BDTER.
     GM_HEADER-PLANT      = X_WERKS.
     GM_HEADER-MOVE_PLANT = X_WERKS.
     GM_HEADER-MOVE_STLOC = X_REC01.
     GM_HEADER-MOVE_TYPE  = X_BWART.
     GM_HEADER-CREATED_BY = SY-UNAME.
     TRANSLATE GM_HEADER TO UPPER CASE.

     GM_ITEM-REQ_DATE     = X_BDTER.
     GM_ITEM-MOVEMENT     = 'X'.
     GM_ITEM-PLANT        = X_WERKS.
     GM_ITEM-STORE_LOC    = X_ISS01.

     IF X_M01 <> SPACE.
        GM_ITEM-MATERIAL     = X_M01.
        GM_ITEM-QUANTITY     = X_Q01.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M02 <> SPACE.
        GM_ITEM-MATERIAL     = X_M02.
        GM_ITEM-QUANTITY     = X_Q02.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M03 <> SPACE.
        GM_ITEM-MATERIAL     = X_M03.
        GM_ITEM-QUANTITY     = X_Q03.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M04 <> SPACE.
        GM_ITEM-MATERIAL     = X_M04.
        GM_ITEM-QUANTITY     = X_Q04.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M05 <> SPACE.
        GM_ITEM-MATERIAL     = X_M05.
        GM_ITEM-QUANTITY     = X_Q05.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M06 <> SPACE.
        GM_ITEM-MATERIAL     = X_M06.
        GM_ITEM-QUANTITY     = X_Q06.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M07 <> SPACE.
        GM_ITEM-MATERIAL     = X_M07.
        GM_ITEM-QUANTITY     = X_Q07.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M08 <> SPACE.
        GM_ITEM-MATERIAL     = X_M08.
        GM_ITEM-QUANTITY     = X_Q08.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M09 <> SPACE.
        GM_ITEM-MATERIAL     = X_M09.
        GM_ITEM-QUANTITY     = X_Q09.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.
     IF X_M10 <> SPACE.
        GM_ITEM-MATERIAL     = X_M10.
        GM_ITEM-QUANTITY     = X_Q10.
        PERFORM AUTHORITY_MARA.
        TRANSLATE GM_ITEM TO UPPER CASE.
        APPEND GM_ITEM.
     ENDIF.

ENDFORM.

FORM AUTHORITY_MARA.
   FORMAT COLOR COL_NEGATIVE.

   CLEAR MARA.
   SELECT SINGLE * FROM MARA WHERE MATNR = GM_ITEM-MATERIAL.

   AUTHORITY-CHECK OBJECT 'Z:EXTWG'
   ID 'ACTVT' FIELD '03'
   ID 'EXTWG' FIELD MARA-EXTWG.
   IF SY-SUBRC NE 0.
      AUTH_FLG = 'X'.
      WRITE:/ 'You are not authorised for this Parts :',
              MARA-MATNR, MARA-EXTWG.
   ENDIF.

   FORMAT COLOR OFF.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM bapi_create_311                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
form bapi_create_311.
  data: RES_NO like BAPIRKPFC-RES_NO,
        TLINES TYPE I.

  REFRESH ZRETURN.
  CLEAR   RES_NO.

call function 'BAPI_RESERVATION_CREATE'
  exporting
    reservation_header       = GM_HEADER
*   NO_COMMIT                =
  IMPORTING
    RESERVATION              = RES_NO
  tables
    reservation_items        = GM_ITEM
    RETURN                   = ZRETURN.

  COMMIT WORK.

  DESCRIBE TABLE ZRETURN LINES TLINES.
  IF TLINES GT 0.
    format color col_negative.
    write : / 'Update Failed.', zreturn-message(200), 255 ' '.
  ELSE.
    format color col_normal.
    WRITE : / RES_NO,
    'Reservation created successfully ', 255 ' '.
  ENDIF.
  FORMAT COLOR OFF.

* Delay
  CALL FUNCTION 'FMCT_WAIT_FOR_UPDATE'
         EXPORTING
              I_SEC = 4.

endform.

INITIALIZATION.
  CLEAR:
         X_M01, X_Q01,
         X_M02, X_Q02,
         X_M03, X_Q03,
         X_M04, X_Q04,
         X_M05, X_Q05.

  CASE SY-UNAME.

     WHEN 'USR01'.
         X_ISS01 = 'AAA'.

     WHEN 'USR02'.
         X_ISS01 = 'BBB'.

     WHEN OTHERS.
         X_ISS01 = 'CCC'.

  ENDCASE.

More Function Module
Functions / SAP Script / ALV

Tables
Database Table

ABAP Books List
ABAP/4 Certification, Programming, Smartforms, Sapscripts and Object Oriented Programming Books

Smart Forms
SAP Smartforms

ABAP Menu:
ABAP Example Hints and Tips

Return to Index:-
SAP ABAP/4 Programming, Basis Administration, Configuration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.  The site www.gotothings.com is in no way affiliated with SAP AG.
Any unauthorised copying or mirroring is prohibited.