Fetching segment content in IDOC

Hi,
My idoc segment contains total 16 fields but in those 16 fields I want to pick seventh field value. In the table edid4 the SDATA field contains mixing of all 16 fields data so how to pick seventh field data in that.
Please help me. I will give points.
Thanks a lot in advance.

Hi Babji, YOu can use the function modules:
1) EDI_DOCUMENT_OPEN_FOR_READ
2) EDI_SEGMENTS_GET_ALL and
3) EDI_DOCUMENT_CLOSE_READ
in the same order:
sample code:
  CALL FUNCTION 'EDI_DOCUMENT_OPEN_FOR_READ'
    EXPORTING
      DOCUMENT_NUMBER = P_DOCNUM
    IMPORTING
      IDOC_CONTROL    = F_IDOC_CONTROL
    EXCEPTIONS
      OTHERS          = 01.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
            RAISING ERROR_OPENING_IDOC.
  ENDIF.
Read IDOC data segments
  CALL FUNCTION 'EDI_SEGMENTS_GET_ALL'
    EXPORTING
      DOCUMENT_NUMBER = P_DOCNUM
    TABLES
      IDOC_CONTAINERS = T_IDOC_DATA
    EXCEPTIONS
      OTHERS          = 01.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
            RAISING ERROR_READING_IDOC.
  ENDIF.
Close IDOC
  CALL FUNCTION 'EDI_DOCUMENT_CLOSE_READ'
    EXPORTING
      DOCUMENT_NUMBER = P_DOCNUM
    IMPORTING
      IDOC_CONTROL    = F_IDOC_CONTROL
    EXCEPTIONS
      OTHERS          = 01.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
            RAISING ERROR_CLOSING_IDOC.
  ENDIF.
Then you can use teh T_idoc_data intermal table to read the element in the segment.
Regards,
Ravi Kanth Talagana

Similar Messages

  • Get the value of a particular field in a segment of an Idoc

    Hi All,
    I have a requirement where I need to write a report which will fetch the value of a particular field in a segment of an idoc.
    I have the idoc number segment and field name as input parameters by which I can fetch Sdata from EDID4 but the confusion is how to find the exact field value from that Sdata. How to Map the SDATA to the segment structure.
    Please advice...

    Hi,
    I have one last doubt that may be you people can help with... The user will be giving the segment name and field name as input. So by following Kesav's code while i can get all the values in the segment structure at runtime please suggest how to display any one field from that structure given that that particular field will come at runtime.
    EX: user gives an idoc number 123 (say belonging to Orders basic type)
                                 segment E1EDK01
                                 field  BELNR.
    So i need to display the value of E1EDK01-BELNR of idoc number 123.
    Please suggest how to achieve this....

  • Average segment size of iDoc?

    We want to integrate 2 systems by using iDoc across WAN. So far we know the iDoc volumes and average iDoc segments, for example 6000 SO iDoc/hour and 250 segments of each iDoc. My understanding is that we need to know the average iDoc segment size to performance network sizing.
    I know the size varies from case to case. But is there a BEST PRACTICE value we can use?
    TIA
    James

    Hi Jinquin,
    >>I happen to find something interesting at http://msg-ibexi.wikispaces.com/message/view/home/10780864, "Maximun size of IDOC segment is 1000 bytes", is it true?
    Yes
    SDATA contains segment data and it is 1000 character long check here
    http://help.sap.com/saphelp_47x200/helpdata/en/1a/0e3842539911d1898b0000e8322d00/content.htm
    Also see the last statement in the link
    http://help.sap.com/saphelp_nw04/Helpdata/EN/78/21740f51ce11d189570000e829fbbd/frameset.htm
    Regards
    suraj

  • How to add a custom segment in standard IDoc?

    Hi,
    I want to add a custom segment in stanard IDoc type (eg. MATMAS). I don't want to go for extended idoc (copying stanard idoc into zidoc and adding custom segment).
    Please tell me.

    Hello
    Transaction BD10 uses fm MASTERIDOC_CREATE_REQ_MATMAS which in turn uses MASTERIDOC_CREATE_MATMAS to create and distribute material master IDocs.
    Fm MASTERIDOC_CREATE_MATMAS belongs to function group MV01 in package MGV. Here you will find the user-exit function group XMGV.
    Perhaps EXIT_SAPLMV01_002 might be useful for you.
    Regards
      Uwe

  • Error when Adding a segment to an IDOC

    Hi I have added one segment to an IDOC through one user exit and it is giving the error with status 26.
    Here I am pasting the error details,
    The segment E1IDT02 does not occur at the current level of the basic type PEXR2001 (extension ).
    This error can have several reasons:
    The segment E1IDT02 is assigned to a group whose header segment does not occur.
    The segment E1IDT02 does not exist in the syntax description of the basic type PEXR2001 (extension ).
    The sequence of segments in the group in which the segment appears is incorrect.
    Previous errors ('mandatory' segment or group missing) may be due to this error.
    Can any body help me, and let me know what can I do to avoid this.
    Thanks,
    Deepak.

    Actually in the basic type of IDOC, there is no segment with this name. But I am adding this directly in an user exit. Can you tell me what is the actual procedure to add a new segment to the basic type of IDOC
    Thanks
    ravi

  • IDOC-Segment Created a idoc document against Billing document

    Dear All,
    Thanks in  advance.
    Already created a idoc document against Billing document and one of the IDOC segment is not in the IDOC document output segments(WE05) actually it missed the segment.
    so i want to add the segment which it was missed during generation of IDOC document against billing document.
    Example:
    a) IDOC document misses one segment let suppose "Seg1".
    b) In "Seg1" it have only one field let suppose "Field1".
    c) But "Field1" does not have any value while generation of IDOC document so it doesn't create the respective segment in IDOC document.
    d) so here, i want to edit the IDOC document to add the "Seg1" in the IDOC document and reprocessing the IDOC document.
    Please help on this issue.
    Regards,
    Sridhar.

    Hello,
              If your requirement is to have the Segment even with only 1 Field, you'll have to create an Idoc Extension in WE30.
             In order to populate the Custom Segment, Use the Customer Function '002' in the IDOC_OUTPUT_INVOIC which is EXIT_SAPLVEDF_002 where you can actually insert the Segment as a Child Segment of an Appropriate Segment.
            You can go for Custom segment with the IDoc Extension so that you dont have to manually insert the Segment again and again while reprocessing it.
    Thanks and Regards,
    Venkat Phani Prasad Konduri

  • Field name while fetching its content from db table dynamically.

    Hi Experts,
    I am new to ABAP and I  have a situation as follows.
    I have a table say ztable where there are seven fields monday,tuesday,wednesday,thursday,friday and saturday.
    Depending on the current calender day i have to fetch the content.
    Suppose for monday, i have to fetch ztable-monday.
    Is there any other way other than using if statements 7 times ? Like i wanna capture the day and substitute it in the place of z_table-"day".
    Please help.
    Thanks,

    Hi,
    In the below code you can pass any field of the table in W_FIELD.... It will fetch the particular field from the table....
    w_block should be of same data element of your field in W_FIELD
    PARAMETER : w_field TYPE NAME_FELD.
    DATA w_block(1) TYPE c.
    Select single (w_field) FROM RSEG INTO w_block
      WHERE belnr EQ '5105701294'.
      IF sy-subrc EQ 0.
        WRITE / w_block.
      ENDIF.
    Thanks and regards,
    Senthil Kumar Anantham.
    Edited by: Senthil Kumar on Jul 2, 2010 5:37 PM

  • Populating the SEGMENT attribute for  IDocs

    When mapping to an IDoc, each IDoc data element has a corresponding SEGMENT attribute, which I assume is the sequential segment number of the segment in the IDoc.
    Does that value need to be set, or does the IDoc adapter take care of it? If I do need to map it, how can I do it, because I would need to find a way of generating a running number either in the mapper, or externally in an XSL mapping file.

    Hi,
    OK thanks for explicitly stating thae answer! I was hoping for that.
    BR,
    Tony.

  • How to include segments to  standard idoc PEXR2002 ..

    How to include the below segments to the standard  idoc PEXR2002 ..
    E2EDK02
    E2EDK12
    I want to map the check number to E2EDK12-BELNR depending on the document number.
    I have a recording in shdb..but my real question is it where to have this logic..
    Any suggestion would be highly appreciated.
    Thanks,

    U will have to create IDoc Extension for this.
    Goto WE30 select the Radio button Extension.
    Link it with the basic Idoc Type.
    Then attach the new segments in the IDoc.

  • Use of segment E1KONP in IDOC COND_A01

    We are today using the VARKEY field in segment E1KOMG in IDOC COND_A01 with all the fields in the spesified condition table for a condition type.
    Instead of generating X quantity of IDOC´s we would like to repeat the segment E1KONP with different customers. All the other fields in the condition table have the same values.
    The field customer is available in segment E1KONP.
    What can we do with the IDOC or other configuration to tell the IDOC using customer from segment E1KONP and not from field VARKEY in segment E1KOMG? We still need to use VARKEY for the other fields in the condition table, since we use som Z fields in our condition table.
    I am struggling findig documentation according to our problem.
    Best regards,
    Terje

    Hi Terje Pedersen,
    Did you get a solution to your problem?? I too am facing similar kind of problem. Instead of multiple IDOCS for COND_A01, I need to create only one.
    Please suggest.
    Thanks & Regards,
    Abhishek

  • Add segments to an idoc already in the database?

    Hi All,
    I have a requirement to add segments to idocs that are already in the database.  I had hoped to use Function Group EDI1 to do so, but the FM EDI_SEGMENTS_ADD_BLOCK only works for creating idocs from scratch.  There is a FM EDI_CHANGE_DATA_SEGMENTS, but it appears to only allow changing segments that already exist, not adding new segments.
    How would you handle this one?  This is the first time I've been tasked with adding segments to an idoc OUTSIDE of a user exit during create, and I'm unsure how to proceed.
    Thanks,
    Bryan

    If it is standard IDoc segment, i am sure you can use this FM
    FU EDI_SEGMENTS_ADD_BLOCK
    Short Text
    EDI interface: Add block of data records
    Each call of the function module 'EDI_SEGMENTS_ADD_BLOCK' inserts a block of data records into the IDoc. In each case the EDI interface records the current position in the IDoc and appends the block of records at the end.
    The data records are transferred to the function module in an internal table. This table is NOT initialized in the function module, that is, the parent program must carry out an initialization (REFRESH) during a repeated call.
    Application data is transferred to the data record. The data record consists of a general administration part and of the field 'SDATA', which contains the application data.
    The administration part contains information that describes the data record in the context of the Intermediate Document (for example, the IDoc number).
    The fields 'SEGNAM' and 'HLEVEL' must be filled by the parent program.
    The fields 'SEGNUM' and 'PSGNUM' can be filled by the function module or can be transfered during the function module call. They are checked for consistency in this case.
    With the help of an ABAP/4 Dictionary structure, the field 'SDATA' can be split up and interpreted. The documentation for these structures can be found using the program 'RSEIDOC1'.
    The function module can only be called in 'CREATE' mode.
    Parameters
    IDENTIFIER
    IDOC_CONTAINERS
    Exceptions
    IDENTIFIER_INVALID
    IDOC_CONTAINERS_EMPTY
    PARAMETER_ERROR
    SEGMENT_NUMBER_NOT_SEQUENTIAL
    Function Group
    EDI1

  • Problem filling segment E1BPADR1 in idoc Salesorder_createfromdat201

    Ladies and Gentlemen,
    I have a problem with populating segment E1BPADR1 in idoc SALESORDER_CREATEFROMDAT201.  My client is already using the idoc to successfully post Inbound Sales orders.  Now, they wish to add additional address data to the Sales Order Partner Address screen.  The standard partner segment (E1BPPARNR) permits them to fill some data which they are presently filling (i.e. Name 1, Street 1, Country, etc), but they have a requirement to fill additional fields Street2, Street3, etc. 
    When I add fill segment E1BPADR1, the data in segment E1BPPARNR is removed from the created Sales Order so that the data from segment E1BPPARNR is deleted, and no new data from E1BPADR1 is updated. 
    Has anyone experienced similar problems, and any ideas on how to get around it?  Points rewarded for useable suggestions.
    Regards,
    Steve

    Done

  • Idoc segment version in idoc type

    hi,
    we have just upgraded our R/3 system from 4.6c to SAP ECC 6.0. We then tried to send idocs to SAP XI 3.0 SP 20. However the idocs failed due to wrong segment version of idoc. It did not match the loaded metadata in XI. I know that in WE20 you can control the segment version used to send to XI. In the communication channel in XI you can also set the segment version.
    So my question is: Is the correct way to handle sytems requiring diffenrent verions to import the newest metadat in idx2 and then  control the versions asper the above paragraph?
    Any comments are apreciated.
    kr Rasmus

    Hi,
    for sending IDocs to XI no adapter is necessary. It should be enough to reload the metadata in idx2:
    http://help.sap.com/saphelp_nw04/helpdata/en/ab/bdb13b00ae793be10000000a11402f/frameset.htm
    Regards
    Patrick

  • Error when segment of an IDOC is edited in we31

    Hi All,
    I want to edit an segment of an idoc in we31, I want to add new fields to a segment. When I try to do this i get an error message "Segment type E1BP****** is flagged as generated". How can i edit the segment in this case now?. Is there any customizing related to it.
    When i see this segment type in table EDISEGMENT, it is marked as generated (field generated is set to X)
    Edited by: Devendra A M on Feb 5, 2009 7:03 AM

    I guess you can do one thing ... you can CANCEL RELEASE the segment and then make necesasry changes and then again RELEASING the segment.
    you can also visit this link
    http://help.sap.com/saphelp_erp2005/helpdata/en/0b/2a60bb507d11d18ee90000e8366fc2/frameset.htm
    in that you go to the "Change Segment" sub-topic.
    Edited by: Premal Mistry on Feb 5, 2009 11:47 AM

  • How to include a new segment in FIDCCP02 idoc (OUTBOUND)

    Hi,
    I would like to know in which EXIT or BADI I should append my new segment to the idoc data.  I have created the new segment to add new Z fields that I added before on the BSEG, and I have created the enhancement of the idoc and put the new segment in the correct place.
    Best Regards

    Adrian,
    Isn't the BADI IDOC_DATA_INSERT the correct answer?
    Regards,
    Ashvin

Maybe you are looking for