Show TOC

Example Program for Processing an IDocLocate this document in the navigation structure

Use
FUNCTION IDOC_INPUT_XAMPLE.
*"----------------------------------------------------------------------
*"
*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED

*"----------------------------------------------------------------------

* Example function module for processing inbound IDocs for ALE or EDI.
* This example applies for processing
*
* with - one IDoc at a time
*
* without - serialization
* - customer-exits
* - calling an ALE-enabled transaction
* - mass processing (more than one IDoc at a time)

* -------------------- Naming conventions ------------------------------
* Internal tables start with 't_'
* Internal field strings start with 'f_'
* ----------------------------------------------------------------------


* >> The following line must appear in the global part of your
* >> function group:
* include mbdconwf. "Report containing the ALE constants.
* The ALE constants start with 'c_'.

DATA: SUBRC LIKE SY-SUBRC,
OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO.

* Initialize variables
SUBRC = 0.

* Read the IDoc's control record
READ TABLE IDOC_CONTRL INDEX 1.

* Process the IDoc and post the data to the database
PERFORM IDOC_PROCESS_XAMPLE TABLES IDOC_DATA
IDOC_STATUS
USING IDOC_CONTRL
CHANGING OBJECT_NUMBER
SUBRC.

* Fill the ALE export parameters
CLEAR IN_UPDATE_TASK.
CLEAR CALL_TRANSACTION_DONE. "Call Transaction is not used.

IF SUBRC <> 0. "Error occurred

WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.

ELSE. "IDoc processed successfully

WORKFLOW_RESULT = C_WF_RESULT_OK.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
APPEND RETURN_VARIABLES.

ENDIF.

ENDFUNCTION.


*---------------------------------------------------------------------*
* FORM IDOC_PROCESS_XAMPLE *
*---------------------------------------------------------------------*
* This routine creates an application document based on the IDoc's *
* contents. Object_Number contains the new document's number. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
* Note: if more than one error is detected, t_idoc_status contains *
* more than one status record. *
*---------------------------------------------------------------------*
* --> F_IDOC_CONTRL IDoc control record *
* --> T_IDOC_DATA IDoc data records *
* <-- T_IDOC_STATUS IDoc status records *
* <-- OBJECT_NUMBER Created document's number *
* <-- SUBRC Return code *
*---------------------------------------------------------------------*
FORM IDOC_PROCESS_XAMPLE
TABLES T_IDOC_DATA STRUCTURE EDIDD
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO
SUBRC LIKE SY-SUBRC.

* Internal field string for the document header.
DATA: F_XHEAD LIKE XHEAD.

* Internal table for the document items.
DATA: T_XITEM LIKE XITEM OCCURS 0 WITH HEADER LINE.

* Number given to the created document
DATA: DOCUMENT_NUMBER LIKE F_XHEAD-DOCMNT_NO.


* Move the data in the IDoc to the internal structures/tables
* f_xhead and t_xitem.
PERFORM IDOC_INTERPRET TABLES T_IDOC_DATA
T_XITEM
T_IDOC_STATUS
USING F_IDOC_CONTRL
CHANGING F_XHEAD
SUBRC.

* Create the application object if no error occurred so far.
IF SUBRC = 0.
* This fictitious function module creates a new object based on the
* data that was read from the IDoc. The new object's ID is returned
* in the parameter 'document_number'.
* The function module checks that the data is correct, and raises
* an exception if an error is detected.
CALL FUNCTION 'XAMPLE_OBJECT_CREATE'
EXPORTING
XHEAD = F_XHEAD
IMPORTING
DOCUMENT_NUMBER = DOCUMENT_NUMBER
TABLES
XITEM = T_XITEM
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'' "Field name
'idoc_process_xample'. "Form routine

ELSE.
* Fill the remaining export parameters
OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number

t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_ok.
t_idoc_status-msgty = 'S'.
t_idoc_status-msgid = your_msgid. "Global variable.
t_idoc_status-msgno = msgno_success."Global variable.
t_idoc_status-msgv1 = object_number.
APPEND T_IDOC_STATUS.
ENDIF. "if sy-subrc <> 0.
ENDIF. "if subrc = 0.

ENDFORM.


*---------------------------------------------------------------------*
* FORM IDOC_INTERPRET *
*---------------------------------------------------------------------*
* This routine checks that the correct message type is being used, *
* and then converts and moves the data from the IDoc segments to the *
* internal structure f_xhead and internal table t_xitem. *
* If an error occurs, t_idoc_status is filled an subrc <> 0. *
*---------------------------------------------------------------------*
* --> T_IDOC_STATUS *
* --> T_XITEM *
* --> F_IDOC_DATA *
* --> F_XHEAD *
* --> SUBRC *
*---------------------------------------------------------------------*
FORM IDOC_INTERPRET TABLES T_IDOC_DATA STRUCTURE EDIDD
T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC LIKE SY-SUBRC.

* Check that the IDoc contains the correct message type.
* Note: if your message-type is reducible, check field 'idoctp'
* (IDoc type) instead of 'mestyp'.
IF F_IDOC_CONTRL-MESTYP <> 'XAMPLE'.

MESSAGE ID YOUR_MSGID "Global variable
TYPE 'E'
NUMBER MSGNO_WRONG_FUNCTION "Global variable
WITH F_IDOC_CONTRL-MESTYP "message type
'IDOC_INPUT_XAMPLE' "Your function module.
F_IDOC_CONTRL-SNDPRT "Sender partner type
F_IDOC_CONTRL-SNDPRN "Sender number.
RAISING WRONG_FUNCTION_CALLED.

ENDIF.

* Loop through the IDoc's segments and convert the data from the IDoc
* format to the internal format.
LOOP AT T_IDOC_DATA WHERE DOCNUM = F_IDOC_CONTRL-DOCNUM.

CASE T_IDOC_DATA-SEGNAM.

WHEN 'E1XHEAD'.
PERFORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS
USING T_IDOC_DATA
CHANGING F_XHEAD
SUBRC.
WHEN 'E1XITEM'.
PERFORM E1XITEM_PROCESS TABLES T_XITEM
T_IDOC_STATUS
USING F_XHEAD-CURRENCY
T_IDOC_DATA
CHANGING SUBRC.


ENDCASE.

ENDLOOP.

ENDFORM.


*---------------------------------------------------------------------*
* FORM E1XHEAD_PROCESS *
*---------------------------------------------------------------------*
* This routine fills 'f_xhead' out of segment e1xhead. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
*---------------------------------------------------------------------*
* --> F_IDOC_DATA IDoc segment containing e1xhead fields *
* <-- F_XHEAD Internal structure containing doc. header *
* <-- T_IDOC_STATUS Status fields for error handling *
* <-- SUBRC Return code: non-zero if an error occurred *
*---------------------------------------------------------------------*
FORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC LIKE SY-SUBRC.

DATA: F_E1XHEAD LIKE E1XHEAD.


F_E1XHEAD = F_IDOC_DATA-SDATA.

* Process fields that need conversion from ISO-codes to SAP-codes
PERFORM E1XHEAD_CODES_ISO_TO_SAP
TABLES T_IDOC_STATUS
USING F_E1XHEAD
F_IDOC_DATA
CHANGING F_XHEAD
SUBRC.

* Process fields containing dates or times
PERFORM E1XHEAD_DATE_TIME USING F_E1XHEAD
CHANGING F_XHEAD.

ENDFORM. "e1xhead_process


*---------------------------------------------------------------------*
* FORM E1XITEM_PROCESS *
*---------------------------------------------------------------------*
* This routine converts the data in the segment 'e1xitem' for *
* to the format of table 't_xitem' and appends it to the table. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
*---------------------------------------------------------------------*
* --> F_IDOC_DATA IDoc segment *
* <-- T_XITEM Document items to be updated to database *
* <-- T_IDOC_STATUS Status fields filled if an error occurred *
* <-- SUBRC Return code: 0 if all OK *
*---------------------------------------------------------------------*
FORM E1XITEM_PROCESS TABLES T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING CURRENCY LIKE XHEAD-CURRENCY
F_IDOC_DATA STRUCTURE EDIDD
CHANGING SUBRC LIKE SY-SUBRC.


DATA: F_E1XITEM LIKE E1XITEM.

F_E1XITEM = F_IDOC_DATA-SDATA.

* Fields of type CHAR, NUMC, QUAN need no conversion.
T_XITEM-ITEM_NO = F_E1XITEM-ITEM_NO.
T_XITEM-MATERIALID = F_E1XITEM-MATERIALID.
T_XITEM-DESCRIPT = F_E1XITEM-DESCRIPT.
T_XITEM-QUANTITY = F_E1XITEM-QUANTITY.

* Process fields that need conversion from ISO-codes to SAP-codes
PERFORM E1XITEM_CODES_ISO_TO_SAP TABLES T_IDOC_STATUS
USING F_E1XITEM
F_IDOC_DATA
CHANGING T_XITEM
SUBRC.

* Process fields that contain monetary values
PERFORM E1XITEM_VALUE_IDOC_TO_SAP TABLES T_IDOC_STATUS
USING F_E1XITEM
CURRENCY
F_IDOC_DATA
CHANGING T_XITEM
SUBRC.

APPEND T_XITEM.

ENDFORM.

*---------------------------------------------------------------------*
* FORM E1XHEAD_CODES_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO-Codes in f_e1xhead to SAP-codes in f_xhead. *
* f_idoc_data, t_idoc_status and subrc are used for error handling. *
*---------------------------------------------------------------------*
FORM E1XHEAD_CODES_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_E1XHEAD STRUCTURE E1XHEAD
F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC.

* f_xhead-currency Type CUKY => convert ISO-Code to SAP-Code.
PERFORM CURRENCY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS
USING F_E1XHEAD-CURRENCY
F_IDOC_DATA
'CURRENCY'
CHANGING F_XHEAD-CURRENCY
SUBRC.

CHECK SUBRC = 0.

* f_xhead-country Contains a country => convert from ISO to SAP code.
PERFORM COUNTRY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS
USING F_E1XHEAD-COUNTRY
F_IDOC_DATA
'COUNTRY'
CHANGING F_XHEAD-COUNTRY
SUBRC.

ENDFORM.

*---------------------------------------------------------------------*
* FORM E1XITEM_CODES_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO-Codes in f_e1xitem to SAP-codes in f_xitem *
* f_idoc_data, t_idoc_status and subrc are used for error handling. *
*---------------------------------------------------------------------*
FORM E1XITEM_CODES_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_E1XITEM STRUCTURE E1XITEM
F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XITEM STRUCTURE XITEM
SUBRC LIKE SY-SUBRC.

* f_xitem-unit Type UNIT => convert ISO-Code to SAP-Code.
PERFORM UNIT_OF_MEASURE_ISO_TO_SAP
TABLES T_IDOC_STATUS
USING F_E1XITEM-UNIT
F_IDOC_DATA
'unit'
CHANGING F_XITEM-UNIT
SUBRC.

* f_xitem-ship_inst Contains shipping instructions => ISO to SAP code.
PERFORM SHIPPING_INSTRUCT_ISO_TO_SAP
TABLES T_IDOC_STATUS
USING F_E1XITEM-SHIP_INST
F_IDOC_DATA
'ship_inst'
CHANGING F_XITEM-SHIP_INST
SUBRC.

ENDFORM.


*---------------------------------------------------------------------*
* FORM E1XITEM_VALUE_IDOC_TO_SAP *
*---------------------------------------------------------------------*
* Converts fields containing monetary values in f_e1xitem to *
* the internal representation in f_xitem. *
* f_idoc_data, t_idoc_status and subrc are used for error handling. *
*---------------------------------------------------------------------*
FORM E1XITEM_VALUE_IDOC_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_E1XITEM STRUCTURE E1XITEM
CURRENCY LIKE XHEAD-CURRENCY
F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XITEM STRUCTURE XITEM
SUBRC LIKE SY-SUBRC.

* f_xitem-value Type CURR => convert IDoc amount to internal amount.
* N.B. the currency code used here must be the SAP-internal one, not
* the one contained in the IDoc!
CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP'
EXPORTING
CURRENCY = CURRENCY
IDOC_AMOUNT = F_E1XITEM-VALUE
IMPORTING
SAP_AMOUNT = F_XITEM-VALUE
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
'value' "Field name
'e1xitem_value_idoc_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.

ENDFORM.


*---------------------------------------------------------------------*
* FORM E1XHEAD_DATE_TIME *
*---------------------------------------------------------------------*
* Moves date and time fields in f_e1xhead to the fields in f_xhead. *
*---------------------------------------------------------------------*
FORM E1XHEAD_DATE_TIME USING F_E1XHEAD STRUCTURE E1XHEAD
CHANGING F_XHEAD STRUCTURE XHEAD.

* f_xhead-date Type DATS => initial value is not 'blank'.
IF E1XHEAD-DATE IS INITIAL.
CLEAR F_XHEAD-DATE.
ELSE.
F_XHEAD-DATE = F_E1XHEAD-DATE.
ENDIF.

ENDFORM.


*---------------------------------------------------------------------*
* FORM CURRENCY_CODE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO currency code 'iso_currency_code' to SAP code in *
* 'sap_currency_code' *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM CURRENCY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_CURRENCY_CODE LIKE TCURC-ISOCD
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_CURRENCY_CODE LIKE TCURC-WAERS
SUBRC LIKE SY-SUBRC.

IF ISO_CURRENCY_CODE IS INITIAL.
CLEAR SAP_CURRENCY_CODE.
ELSE.
CALL FUNCTION 'CURRENCY_CODE_ISO_TO_SAP'
EXPORTING
ISO_CODE = ISO_CURRENCY_CODE
IMPORTING
SAP_CODE = SAP_CURRENCY_CODE
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'currency_code_iso_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.

ENDIF. "if iso_currency_code is initial.

ENDFORM.


*---------------------------------------------------------------------*
* FORM COUNTRY_CODE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO country code 'iso_country_code' to SAP code in *
* 'sap_country_code' *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM COUNTRY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_COUNTRY_CODE LIKE T005-INTCA
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_COUNTRY_CODE LIKE T005-LAND1
SUBRC LIKE SY-SUBRC.

* Only convert if the field is not initial.
IF ISO_COUNTRY_CODE IS INITIAL.
CLEAR SAP_COUNTRY_CODE.
ELSE.
CALL FUNCTION 'COUNTRY_CODE_ISO_TO_SAP'
EXPORTING
ISO_CODE = ISO_COUNTRY_CODE
IMPORTING
SAP_CODE = SAP_COUNTRY_CODE
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'country_code_iso_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.

ENDIF. "if iso_country_code is initial.

ENDFORM.

*---------------------------------------------------------------------*
* FORM UNIT_OF_MEASURE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO unit of measure code 'iso_unit_of_measure' to SAP *
* code in 'sap_unit_of_measure'. *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM UNIT_OF_MEASURE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_UNIT_OF_MEASURE LIKE T006-ISOCODE
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_UNIT_OF_MEASURE LIKE T006-MSEHI
SUBRC LIKE SY-SUBRC.

* Only convert the field if it is not empty.
IF ISO_UNIT_OF_MEASURE IS INITIAL.
CLEAR SAP_UNIT_OF_MEASURE.
ELSE.
CALL FUNCTION 'UNIT_OF_MEASURE_ISO_TO_SAP'
EXPORTING
ISO_CODE = ISO_UNIT_OF_MEASURE
IMPORTING
SAP_CODE = SAP_UNIT_OF_MEASURE
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'unit_of_measure_iso_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.

ENDIF. "if iso_unit_of_measure_code is initial.

ENDFORM.

*---------------------------------------------------------------------*
* FORM SHIPPING_INSTRUCT_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO package code 'iso_package_type' to SAP code for *
* purchasing shipping instructions in 'sap_shipping_instructions'. *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM SHIPPING_INSTRUCT_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_PACKAGE_TYPE LIKE T027A-IVERS
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_SHIPPING_INSTRUCTIONS LIKE T027A-EVERS
SUBRC LIKE SY-SUBRC.

* Only convert the field if it is not empty.
IF ISO_PACKAGE_TYPE IS INITIAL.
CLEAR SAP_SHIPPING_INSTRUCTIONS.
ELSE.
CALL FUNCTION 'ISO_TO_SAP_PACKAGE_TYPE_CODE'
EXPORTING
ISO_CODE = ISO_PACKAGE_TYPE
IMPORTING
SAP_CODE = SAP_SHIPPING_INSTRUCTIONS
EXCEPTIONS
OTHERS = 1.

IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'shipping_instruct_iso_to_sap'. "Form rout.
ENDIF. "if sy-subrc <> 0.

ENDIF. "if iso_unit_of_measure_code is initial.

ENDFORM.


*---------------------------------------------------------------------*
* FORM STATUS_FILL_SY_ERROR *
*---------------------------------------------------------------------*
* Fills the structure t_idoc_status with the import parameters *
* plus the relevant sy fields. *
*---------------------------------------------------------------------*
* --> IDOC_NUMBER IDoc number *
* --> SEGNUM Segment number *
* --> SEGFLD Field in segment *
* --> ROUTID Name of routine *
* <-- T_IDOC_STATUS Status fields *
*---------------------------------------------------------------------*
FORM STATUS_FILL_SY_ERROR TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_DATA STRUCTURE EDIDD
VALUE(F_SY) STRUCTURE SY
SEGFLD LIKE BDIDOCSTAT-SEGFLD
ROUTID LIKE BDIDOCSTAT-ROUTID.

t_idoc_status-docnum = f_idoc_data-docnum.
t_idoc_status-status = c_idoc_status_error.
t_idoc_status-msgty = f_sy-msgty.
t_idoc_status-msgid = f_sy-msgid.
T_IDOC_STATUS-MSGNO = F_SY-MSGNO.
t_idoc_status-msgv1 = f_sy-msgv1.
t_idoc_status-msgv2 = f_sy-msgv2.
t_idoc_status-msgv3 = f_sy-msgv3.
t_idoc_status-msgv4 = f_sy-msgv4.
t_idoc_status-segnum = f_idoc_data-segnum.
t_idoc_status-segfld = segfld.
t_idoc_status-repid = f_sy-repid.
t_idoc_status-routid = routid.
APPEND T_IDOC_STATUS.

ENDFORM.