Inbound  idoc handling

How can we handle the inbound idoc, for the status 51 and 52, plz help me rewards will be there

Go to BD87 and execute the IDoc again.
51     Application document not posted
52     Application document not fully posted
In case of these errors the reason may be wrong data or locking problem.
In case of locking prob, if you execute them again then the IDoc will post.
in case of erroneous data.. you have to change data and post again.... You can check that through BD87 in debugging mode...

Similar Messages

  • Custom inbound Idoc error handling/ Workflow

    Dear Experts,
            I have a requirement where in I created a custom inbound idoc, but now i need to handle the errors in the workflow and notify the users thru workflow on an error.
    Can some one please provide me a step by step guide on how to create a organizational unit, position and assign users to the position... and any other steps that need to be configured to notify the user on the error.
    I'm pretty new to all these organizational uints and workflow related stuff. Any step by step would really be helpful.
    Thanks for your time.
    -Amit.
    Moderator message: sorry, these forums cannot replace proper training, if there is step by step guides out there, then please use the search functions.
    Edited by: Thomas Zloch on Oct 31, 2010 11:50 AM

    Vittal,
    1. If your requirement is for a SAP Standard Basic Message type and a Z extension: Then you simply have to find out the 'Standard Task' associated with basic type. You shouldn't worry about extensions. The standard task will be triggered at input error.
    2. If your requirement is for a Z basic type i.e. you have created a customer IDOC for a custom processing: There are many dependencies on how you can achieve this. Firstly, you need to know how you're are processing this Z_IDOC. Are you using a standard FM or custom workflow or custom FM? There should be some triggering event within the processing of this Z_IDOC which will raise a certain flag when the error you want to capture happens (or when there is a generic error). You can configure this event in binding objects to trigger a workflow task. If you take a look at any standard tasks, you'll get an idea how the triggering event happens.
    Once the workflow task (you can use custom task or use a standard task i.e. by triggering a standard event within the IDOC processing program) is triggered, you can either send it to SAP inbox, e-mail, trigger another processing etc. This is altogether another story.
    So bottomline: For custom IDOC processing, you need to trigger an event when error happens. This can be a custom event or a standard event. This event should be linked to a task (custom/standard - check in SWETYPV). Bind all of these in PFTC. Once the task is triggered, you can do whatever you want to do with it.

  • Handling of Error(s) for Inbound IDOCs

    Hi Gurus,
      I have an requirement where we need to handle and correct the error if inbound IDOC fails. This inbound will be for Account Document posting.
    Please let me know how to handle this issue.
    Thanks in advance.
    Regards,
    Gajanan

    <b>Hi,
    smells like workflow task.
    DI Information
    Message type
    INVOIC
    IDOC type
    INVOIC01, INVOIC02
    X12 transaction set
    810
    Edifact message type
    INVOIC
    Workflow in case of error
    TS 0000 8056</b>
    Executable program
    IDOC_INPUT_INVOIC_FI
    Regards,
    Clemens

  • Creation of Sales Order and Service Contract from Inbound IDOC

    Hi Experts,
    My requirement is to create a Sales Order as well as a Service Contract from one Inbound IDOC. I am getting the Inbound IDOC from a third Party. The message type is ORDERS and Basic Type is ORDERS02. How ever i am using an extension type IDOC which carries all the required data for Sales Order and Service Contract. My requirement is like, to create a Sales Order first.
    I have created a Z FM which is attached to the Process Code and subsequently to the message type. Inside the FM i an calling FM 'IDOC_INPUT_ORDERS' for creation of Sales Order. After that i am changing the IDOC data for the Document Type. I am changing the document type which is responsible for Contract Creation.
    Then I am again calling the FM 'IDOC_INPUT_ORDERS' for creation of Contract with the help of IDOC data. But here the Contract is not getting created. It's getting failed during the Batch input session.
    I need to solve this problem as soon as possible. Please help me. If there are any other options also please share.
    Thanks in Advance.
    Regards,
    Priyabrata

    Actually there is problem with BDCDATA. Inside the FM it's calling transaction with help of BDCDATA. If i am creating a Sales order or contract alone its creating successfully. But when i am trying to create both, it's retuning sy-subrc '1001' after calling the transaction on the second attempt. Is there any problem with BDCDATA like we can't handle with less time gap? Please help and give your inputs.
    Regards,
    Priyabrata

  • Creation of Service Contract from Inbound IDOC

    Hi Experts,
    I am using Inbound IDOC type ORDERS02 with message type ORDERS for creation of Sales Order. Now my requirement is like to create a  Service Contract from that Inbound IDOC. The IDOC type contains all the data require to create a Service Contract. The scenario is like, after creation of Sales Order it will check for the corresponding Service Contract exits or not by querying on a Z table which contains all those entries.
    So my idea is to create a Z Program, in which it will check for the Service Contract and will create the same by reprocessing the same IDOC or by calling some Function Module. Please suggest how shall i proceed to create a Service Contract.
    Is there any way to reprocess the IDOC or to collect the Data from the IDOC segments pass them to a FM which is responsible for creation of Inbound IDOC. Please suggest if this is feasible.
    Thanks in Advance.
    Regards,
    Priyabrata.

    Actually there is problem with BDCDATA. Inside the FM it's calling transaction with help of BDCDATA. If i am creating a Sales order or contract alone its creating successfully. But when i am trying to create both, it's retuning sy-subrc '1001' after calling the transaction on the second attempt. Is there any problem with BDCDATA like we can't handle with less time gap? Please help and give your inputs.
    Regards,
    Priyabrata

  • Scheduling agreement inbound idoc error.

    Hi Experts,
    I am creating an Scheduling Agreement with DELFOR02 inbound idoc, while creation the Scheduling Agreement system is giving error regarding Scheduling Agreement not found. In fact I have create the Scheduling agreement by T-code VA31. And I check the table VLPKM, there are relevant record stored.
    Then I maintain the view V_T663A to not check everything when inbound idoc recevie. and tried agan in t-code BD87. the system give me another message Make an entry in all required fields.
    How can I handle these error messages?
    Thanks..
    Regards....

    Does any one has ideas for that?
    Thanks.

  • Send mail to a specific user group when an Inbound Idoc processing fails

    I am using standard Message type DEBMAS, but the process code is customed (say ZDEBM as the function module is customed). Can you tell me what configurations are required to activate the error notification message to a user when the inbound idoc fails?

    hi,
    i think u need to check tcode swu3 for automatic workflow customizing and check in we40 (error AND STATUS PROCESSING) whether the processing code is assigned to the workflow task.
    if it is assigned,the workflow will be automatically triggered and the mail will be sent to the user by itself.
    ALE error handling uses workflow. A standard task is provided for each message type. Task TS20000051 is used for all BAPIs.
    Workflow functions as follows:
    A task (work item) is generated for the error handling and stored as a message in the inboxes of the employees responsible.
    If one of these employees processes the work item, the standard task method for error handling is started. The user can, for example, restart IDoc processing.
    If the IDoc is processed successfully, the work item is deleted from the inboxes of all the employees involved.
    For this procedure to function, the employees responsible for a particular message type and partner (sender or receiver) must be defined as follows:
    1. A hierarchy of organizational units (for example, "sales office") and positions (for example, "customer officer for customer X") is created and employees are assigned to it.
    2. The standard tasks for error handling (for example, an error related to an inbound sales order) are assigned to the relevant organizational units or positions (for example, "sales office").
    3. The organizational unit, position or employee responsible for dealing with the error are specified for each partner and message type in the partner profiles.
    If an error occurs, the system determines:
    1. The employees responsible using the staffing schedule of the organizational unit or position linked to the standard task.
    2. The employees defined in the partner profiles (using position, user ID, or organizational unit).
    3. The employees appearing in both groups represent those who will receive a work item in their inboxes.
    regards,
    pankaj singh

  • How to get Get IDOC Number for Inbound IDOCS

    Hi,
    I am using the FM -- IDOC_INPUT_HRMD for creating Inbound IDOCS.
    I populate the values for Control Record and Data Record and the IDOC is posted successfully and i get the status 53 in the status Table.
    But the problem is the field for IDOC number(DOCNUM in IDOC_STATUS Table of the FM ) is empty.
    How can i get the DOCNUM for the IDOC posted as a result of this FM ?
    regards,
    Siddhartha

    Hi Siddhartha,
    I think you cannot call IDOC_INPUT_HRMD fm directly from the external program as this fm only handles the application logic part and not the idoc number generation and save part.
    So I think you have to call IDOC_INBOUND_SINGLE from your external program and then get the IDOC number.
    Then if you need the status records then you need to call another fm and feed IDOC number that you have got from IDOC_INBOUND_SINGLE (there is one IDOC_READ_COMPLETELY but it is not a remote enabled fm)
    <b>OK, I just found one RFC enabled fm which you can use,
    <b>EDI_DOCUMENT_READ_ALL_STATUS</b></b>
    Hope this helps..
    Sri
    Message was edited by: Srikanth Pinnamaneni

  • Help required in posting inbound idocs

    Hi,
    We are facing a problem during integration testing to post inbound idocs.
    The scenario is :
    A custom FM is written to process the inbound idocs, which does the following processes in sequence.
    1. BAPI used to create Goods Receipt
    2. BDC used to create Delivery using VL01N
    3. BDC used to create Handling Unit using VL02N
    4. BDC used to create Post Goods Issue using VL02N
    The VL01N creates a deivery, and using that delivery BDC calls VL02N to create HU.
    In unit testing the idocs are success, but when multiple idocs are used in integration testing, all fails either during delivery creation or HU creation.
    The error message we often get when HU is failed is  : "Runtime error RAISE_EXCEPTION has occured ".
    We have also incorporated a commit work and wait of 5 seconds after each BDC to avoid locking problem if any.
    The partner profile is set to ' trigger by background program'.
    Standard program RBDAPP01 is scheduled to collect the IDocs in status 64 and then to be processed.
    The package size used is 1,  inorder to process idocs one by one to avoid locking.
    Should any object type be given in RBDAPP01 ?
    If so, is it required to maintain any record for that object type in table TBD55 to process idocs serially in RBDAPP01 ?
    Any help in this regard is appreciated.
    Thanks in advance
    Regards
    Meena George

    Hi,
    We are facing a problem during integration testing to post inbound idocs.
    The scenario is :
    A custom FM is written to process the inbound idocs, which does the following processes in sequence.
    1. BAPI used to create Goods Receipt
    2. BDC used to create Delivery using VL01N
    3. BDC used to create Handling Unit using VL02N
    4. BDC used to create Post Goods Issue using VL02N
    The VL01N creates a deivery, and using that delivery BDC calls VL02N to create HU.
    In unit testing the idocs are success, but when multiple idocs are used in integration testing, all fails either during delivery creation or HU creation.
    The error message we often get when HU is failed is  : "Runtime error RAISE_EXCEPTION has occured ".
    We have also incorporated a commit work and wait of 5 seconds after each BDC to avoid locking problem if any.
    The partner profile is set to ' trigger by background program'.
    Standard program RBDAPP01 is scheduled to collect the IDocs in status 64 and then to be processed.
    The package size used is 1,  inorder to process idocs one by one to avoid locking.
    Should any object type be given in RBDAPP01 ?
    If so, is it required to maintain any record for that object type in table TBD55 to process idocs serially in RBDAPP01 ?
    Any help in this regard is appreciated.
    Thanks in advance
    Regards
    Meena George

  • Inbound IDOC Posting

    I am developing a function module in ECC that will be used to post inbound IDOC for customer creation DEBMAS07
    The logic is as follows -
    The function receives an IDOC structure
    It then invokes function module 'IDOC_INPUT_DEBITOR'
    IDOC_INPUT_DEBITOR takes care of creating a new customer in table KNA1. But I was expecting IDOC_INPUT_DEBITOR to also handle the IDOC posting. This way I can go to WE02 and see a new IDOC record. What am I missing? Is there some more code I need to write after the function module call?
    Thank you.
    * IDOC structures for using ALE
         data       lc_no_display         type bdwfap_par-inputmethd value ' '.
         data       lt_idoc_control       type standard table of edidc.
         data       ls_idoc_control       type edidc.
         data       lt_idoc_data          type standard table of edidd.
         data       lt_idoc_data_knvi     type standard table of edidd.
         data       lt_idoc_status        type standard table of bdidocstat.
         data       ls_idoc_status        type bdidocstat.
         data       lt_return_variables   type standard table of bdwfretvar.
         data       lt_serialization_info type standard table of bdi_ser.
         data       lv_workflow_result    type bdwf_param-result.
         data       pi_idoctyp            type edi_iapi00-idoctyp.
         data       pt_segments           type standard table of edi_iapi11.
         data       lw_segments           type edi_iapi11.
         data       ls_idoc_data          type edidd.
         data       ls_e1kna1m            type  zdebmas07_e1kna1m.
         data       e1kna1m               type e1kna1m.
    *** CONTROL DATA
         ls_idoc_control-mandt  = input-idoc-edi_dc40-mandt.
         ls_idoc_control-status = input-idoc-edi_dc40-status.
         ls_idoc_control-doctyp = input-idoc-edi_dc40-idoctyp.
         ls_idoc_control-direct = input-idoc-edi_dc40-outmod.
         ls_idoc_control-rcvprt = input-idoc-edi_dc40-rcvprt.
         ls_idoc_control-rcvprn = input-idoc-edi_dc40-rcvprn.
         ls_idoc_control-stdmes = input-idoc-edi_dc40-stdmes.
         ls_idoc_control-outmod = input-idoc-edi_dc40-outmod.
         ls_idoc_control-sndpor = input-idoc-edi_dc40-sndpor.
         ls_idoc_control-sndprt = input-idoc-edi_dc40-sndprt.
         ls_idoc_control-sndprn = input-idoc-edi_dc40-sndprn.
         ls_idoc_control-mestyp = input-idoc-edi_dc40-mestyp.
         ls_idoc_control-idoctp = input-idoc-edi_dc40-idoctyp.
         append ls_idoc_control to lt_idoc_control.
    *** READ SEGMENTS
         pi_idoctyp = ls_idoc_control-idoctp.
         call function 'IDOCTYPE_READ_COMPLETE'
           exporting
             pi_idoctyp         = pi_idoctyp
           tables
             pt_segments        = pt_segments
           exceptions
             object_unknown     = 1
             segment_unknown    = 2
             relation_not_found = 3
             others             = 4.
         loop at pt_segments into lw_segments.
           case lw_segments-segmenttyp.
             when 'E1KNA1M'.
               ls_idoc_data-segnam = 'E1KNA1M'.
               ls_idoc_data-mandt  = sy-mandt.
               ls_idoc_data-segnum = lw_segments-nr.
               ls_idoc_data-psgnum = lw_segments-parpno.
               ls_e1kna1m          = input-idoc-e1kna1m.
               move-corresponding ls_e1kna1m to e1kna1m.
               move e1kna1m to ls_idoc_data-sdata.
               append ls_idoc_data to lt_idoc_data.
               exit.
           endcase.
         endloop.
    *** IDOC INPUT CALL FUNCTION
         data: response type zsi_create_customer_is_res_tab.
         data: response_lwa type zsi_create_customer_is_respons.
         data: lwa_error_message type string.
         call function 'IDOC_INPUT_DEBITOR'
           exporting
             input_method          = lc_no_display
             mass_processing       = space
           importing
             workflow_result       = lv_workflow_result
           tables
             idoc_contrl           = lt_idoc_control
             idoc_data             = lt_idoc_data
             idoc_status           = lt_idoc_status
             return_variables      = lt_return_variables
             serialization_info    = lt_serialization_info
           exceptions
             wrong_function_called = 1
    others                = 2.

    Hello Megan,
    Check with the function modules
    EDI_DATA_INCOMING
    IDOC_WRITE_AND_START_INBOUND
    Program:
    RBDAPP01
    I guess this would answer your query.
    Regards,
    TP

  • Mails whenevr an inbound idoc fails

    Hi Experts,
    Is there any way I can trigger mails whenevr an inbound idoc fails to update in r3.With reference to workflow etc
    Regards,
    Arnab

    Hello Arnab
    On SAP release >= 6.20 you have the standard report RSEIDOCA available which can be scheduled in background.
    Unfortunately SAP did not provide an e-mail notification mechanism for this report but only workflow. For our company I created a ZRSEIDOCA report having this e-mail function. For more details please refer to
    ALE Error Message Handling
    e-mailing: How to sent out an email to the Managers OUTLOOK express account
    Regards
      Uwe

  • Triggering a mail when ever a perticular inbound IDOC fails

    Hi Experts,
          Is there any way I can trigger mails whenevr an inbound idoc fails to update in r3.With reference to workflow etc
    Regards,
    Arnab

    hi,
    i think u need to check tcode swu3 for automatic workflow customizing and check in we40 (error AND STATUS PROCESSING) whether the processing code is assigned to the workflow task.
    if it is assigned,the workflow will be automatically triggered and the mail will be sent to the user by itself.
    ALE error handling uses workflow. A standard task is provided for each message type. Task TS20000051 is used for all BAPIs.
    Workflow functions as follows:
    A task (work item) is generated for the error handling and stored as a message in the inboxes of the employees responsible.
    If one of these employees processes the work item, the standard task method for error handling is started. The user can, for example, restart IDoc processing.
    If the IDoc is processed successfully, the work item is deleted from the inboxes of all the employees involved.
    For this procedure to function, the employees responsible for a particular message type and partner (sender or receiver) must be defined as follows:
    1. A hierarchy of organizational units (for example, "sales office") and positions (for example, "customer officer for customer X") is created and employees are assigned to it.
    2. The standard tasks for error handling (for example, an error related to an inbound sales order) are assigned to the relevant organizational units or positions (for example, "sales office").
    3. The organizational unit, position or employee responsible for dealing with the error are specified for each partner and message type in the partner profiles.
    If an error occurs, the system determines:
    1. The employees responsible using the staffing schedule of the organizational unit or position linked to the standard task.
    2. The employees defined in the partner profiles (using position, user ID, or organizational unit).
    3. The employees appearing in both groups represent those who will receive a work item in their inboxes.
    regards,
    pankaj singh

  • Inbound IDOC not Triggering Immediately

    I am processing an inbound idoc using startrfc, EDI_DATA_INCOMING.  It posts the idoc, but stuck with status 64.  Partner profile set to Trigger immediately.  Why will it not process immediately?  I can execute the RBDAPP01 to handle, but prefer immediately.  Is there something on the EDI_DC that needs to be set?

    Oh, unfortunately not with startrfc. I overlooked the startrfc word in your post.
    You can check this SAP note 168276. It talks about The event receiver linkage not activated in Customizing. (t-code OYEB)
    regards,
    Advait

  • Help in inbound idoc posting using bdc

    Hi,
    We are facing a problem during integration testing to post inbound idocs.
    The scenario is :
    A custom FM is written to process the inbound idocs, which does the following processes in sequence.
    1. BAPI used to create Goods Receipt
    2. BDC used to create Delivery using VL01N
    3. BDC used to create Handling Unit using VL02N
    4. BDC used to create Post Goods Issue using VL02N
    The VL01N creates a deivery, and using that delivery BDC calls VL02N to create HU.
    In unit testing the idocs are success, but when multiple idocs are used in integration testing, all fails either during delivery creation or HU creation.
    The error message we often get when HU is failed is  : "Runtime error RAISE_EXCEPTION has occured ".
    We have also incorporated a commit work and wait of 5 seconds after each BDC to avoid locking problem if any.
    The partner profile is set to ' trigger by background program'.
    Standard program RBDAPP01 is scheduled to collect the IDocs in status 64 and then to be processed.
    The package size used is 1,  inorder to process idocs one by one to avoid locking.
    Should any object type be given in RBDAPP01 ?
    If so, is it required to maintain any record for that object type in table TBD55 to process idocs serially in RBDAPP01 ?
    Any help in this regard is appreciated.
    Thanks in advance
    Regards
    Meena George

    Refer these links and see if they are useful:
    http://help.sap.com/saphelp_nw04/helpdata/en/0b/2a66c9507d11d18ee90000e8366fc2/content.htm
    Regards,
    Ravi

  • Please  send one exicuted program example of inbound idoc process

    Dear Friends,
            I am facing one problem to process inbound idoc process.Please example send anybody ?
           I have faced problem in standalone process to do inbound idoc process.
            iam waiting for your valuble response.
      Definitly best answer will get best reward.
    Regards.
    Sridhar Menda.

    Hi Sridhar,
    Here is a example of program for inbound idoc process.
    Example Program to Process an IDoc  
    The Example Program to Process an IDoc shows how the fictitious message type XAMPLE, communicated with IDocs of type XAMPLE01, is processed using the inbound function module Idoc_Input_Xample. The IDoc type has a header segment, E1xhead, and any number of item segments E1xitem. The data from the IDoc is written to two database tables, XHEAD and XITEM respectively. XHEAD and XITEM contain the same field names as E1xhead and E1xitem respectively. The fields names and data types are shown in the following two tables:
    Field Name in XHEAD
    Docmnt_no
    Date
    Currency
    Country
    Description
    Document number
    Date
    Currency
    Country
    Type in e1xhead
    CHAR
    CHAR
    CHAR
    CHAR
    Type in XHEAD
    NUMC
    DATS
    CUKY
    CHAR
    Field Name in XITEM
    Item_no
    Materialid
    Descript
    Unit
    Quantity
    Value
    Ship_Inst
    Description
    Item number
    Material number
    Material description
    Unit of measure
    Quantity
    Value
    Shipping instructions
    Type in e1xitem
    CHAR
    CHAR
    CHAR
    CHAR
    CHAR
    CHAR
    CHAR
    Type in xitem
    NUMC
    CHAR
    CHAR
    UNIT
    QUAN
    CURR
    UNIT
    The data on the database is assigned a new document number (field DOCMNT_NO) using number assignment. The field DOCMNT_NO is not stored in the newly created table XHEAD.
    FUNCTION·IDOC_INPUT_XAMPLE.
    *"Local·interface:
    *"·······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
    ·05·July·1996·----
    *·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.
    ··ELSE.
    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·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·E1XHEAD_CODES_ISO_TO_SAP
    ·········TABLES···T_IDOC_STATUS
    ·········USING····F_E1XHEAD
    ··················F_IDOC_DATA
    ·········CHANGING·F_XHEAD
    ··················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.
    ····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·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·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.
    Also Check out these docs.
    http://help.sap.com/saphelp_nw04/helpdata/en/dc/6b7ee143d711d1893e0000e8323c4f/frameset.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/1a/178ad32d3011d3bc3500105a6588b2/frameset.htm
    Dont forget to reward pts, if it helps ;>)
    Regards,
    Rakesh.

Maybe you are looking for