To process the MRESCR01 inbound IDoc (used to create material reservations), SAP typically uses the standard function module IDOC_INPUT_MRESCR or a BAPI-wrapper via process code MRES or BAPI in WE42.
Below is an ABAP program sample that reads a flat file from the application server and manually forces IDoc creation using
IDOC_INBOUND_ASYNCHRONOUSabap
*&---------------------------------------------------------------------*
*& Report Z_INBOUND_IDOC_MRESCR01
*&---------------------------------------------------------------------*
*& Sample program to generate and process MRESCR01 inbound IDoc
*&---------------------------------------------------------------------*
REPORT z_inbound_idoc_mrescr01.
* DATA DECLARATIONS
DATA: lv_file TYPE string VALUE '/usr/sap/tmp/reservation_data.txt',
lv_lines TYPE i,
ls_edidc TYPE edidc,
lt_edidd TYPE TABLE OF edidd,
ls_edidd TYPE edidd,
lt_control TYPE TABLE OF edidc,
lv_msg_text TYPE string.
* SELECTION SCREEN
PARAMETERS: p_file LIKE lgpa-filepath DEFAULT '/usr/sap/tmp/reservation_data.txt'.
START-OF-SELECTION.
" 1. Read flat file from application server
PERFORM read_flat_file CHANGING lt_edidd.
" 2. Build Control Record
PERFORM build_control_record CHANGING ls_edidc.
" 3. Call Standard Inbound Function
CALL FUNCTION 'IDOC_INBOUND_ASYNCHRONOUS'
EXPORTING
pi_edidc = ls_edidc
TABLES
pit_edidd = lt_edidd
EXCEPTIONS
error_message = 1
OTHERS = 2.
IF sy-subrc = 0.
COMMIT WORK.
WRITE: / 'IDoc successfully created and triggered for processing.'.
ELSE.
lv_msg_text = sy-msgli.
WRITE: / 'Error creating IDoc. Message:', lv_msg_text.
ENDIF.
*&---------------------------------------------------------------------*
*& Form BUILD_CONTROL_RECORD
*&---------------------------------------------------------------------*
FORM build_control_record CHANGING cs_edidc TYPE edidc.
cs_edidc-mestyp = 'MRESCR'. " Message Type
cs_edidc-idoctp = 'MRESCR01'. " Basic IDoc Type
cs_edidc-direct = '2'. " Direction: 2 = Inbound
cs_edidc-rcvprt = 'LS'. " Partner Type: Logical System
cs_edidc-rcvprn = 'SAPD01'. " Receiver Partner Number (Your SAP system)
cs_edidc-sndprt = 'LS'. " Sender Partner Type
cs_edidc-sndprn = 'LEGACY_SYS'. " Sender Partner Number (Source System)
ENDFORM.
*&---------------------------------------------------------------------*
*& Form READ_FLAT_FILE
*&---------------------------------------------------------------------*
FORM read_flat_file CHANGING ct_edidd TYPE STANDARD TABLE of edidd.
DATA: lv_string TYPE string,
ls_header TYPE e1bpresbc, " Standard BAPI segment for MRESCR01 header
ls_item TYPE e1bpresbc. " Standard BAPI segment for item
OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
WRITE: / 'Cannot open file:', p_file.
EXIT.
ENDIF.
DO.
READ DATASET p_file INTO lv_string.
IF sy-subrc NE 0. EXIT. ENDIF.
" Add file parsing logic here depending on your file structure
" Example: Split CSV by comma and populate IDoc segments
" Example for Header segment
CLEAR ls_edidd.
ls_edidd-segnam = 'E1BPRESBC'. " Segment Name
ls_header-mov_type = '201'.
ls_header-res_date = sy-datum.
ls_edidd-sdata = ls_header.
APPEND ls_edidd TO ct_edidd.
" Example for Item segment
CLEAR ls_edidd.
ls_edidd-segnam = 'E1BPRESBC'.
" Populate ls_item fields here ...
ls_edidd-sdata = ls_item.
APPEND ls_edidd TO ct_edidd.
ENDDO.
CLOSE DATASET p_file.
ENDFORM.
Next Steps for Implementation
- Define Message/IDoc Types: Ensure
MRESCR(Message) andMRESCR01(IDoc) are active in your system using transactionWE81andWE30. - Assign Inbound Function: Register your process code in
WE42(usually linked toIDOC_INPUT_MRESCRorBAPI_IDOC_INPUT1) so that the IDoc posts application data. - Background Processing: If you set your Inbound Partner Profile (
WE20) to collect IDocs instead of processing them immediately, you will need to schedule standard reportRBDAPP01to actually post the application data (status 64 to 53).