* http://thinkdoforward.com/sap-idoc-tabellen-erfahrene-berater-kennen-diese-tabellen/
* Tabellen: EDIDC – Kontrollsatz (IDoc)
* EDIDS – Statussatz (IDoc)
* EDID4 – IDoc-Datensätze ab 4.0
* EDISDEF - IDoc Entwicklung : IDoc Segmentdefinitionen
* EDSAPPL - EDI: IDoc-Segment Anwendungsstruktur
* EDIMSGT - Kurzbeschreibung der SAP Nachrichtentypen
TYPES: BEGIN OF ty_idoc_seg_entry,
seg_name TYPE string,
comp_name TYPE string,
value TYPE string,
END OF ty_idoc_seg_entry.
* IDoc-Nummer
PARAMETERS: p_idoc TYPE edidc-docnum DEFAULT '12345'.
START-OF-SELECTION.
* Lesen Segmentdaten des IDocs
SELECT *
INTO TABLE @DATA(it_int_edid)
FROM edid4
WHERE docnum EQ @p_idoc.
IF sy-subrc = 0.
* Tabelle für aufbereitete Segmentdaten
DATA: it_segment_data TYPE STANDARD TABLE OF ty_idoc_seg_entry WITH DEFAULT KEY.
* all. Feldsymbol für Umwandlung der Daten
FIELD-SYMBOLS: <seg_data> TYPE any.
* Segmentdaten auslesen
LOOP AT it_int_edid ASSIGNING FIELD-SYMBOL(<s>).
* Typecast für Umwandlung LCHR -> Type
ASSIGN <s>-sdata TO <seg_data> CASTING TYPE (<s>-segnam).
* Typedescriptor zum Auslesen der einzelnen Datenfelder
DATA(o_type) = cl_abap_typedescr=>describe_by_data( <seg_data> ).
CASE o_type->kind.
* wenn Strukturtyp
WHEN cl_abap_typedescr=>kind_struct.
DATA(o_desc) = CAST cl_abap_structdescr( o_type ).
* Datenfelder der Struktur durchloopen
LOOP AT o_desc->get_components( ) ASSIGNING FIELD-SYMBOL(<c>).
* Wert des Feldes auslesen
ASSIGN COMPONENT <c>-name OF STRUCTURE <seg_data> TO FIELD-SYMBOL(<val>).
IF <val> IS ASSIGNED.
* Zeile für Segment erstellen mit Segmentname, Komponenten-(Feld-)name, Wert
APPEND VALUE #( seg_name = <s>-segnam
comp_name = <c>-name
value = <val>
) TO it_segment_data.
ENDIF.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
* Datenausgabe
cl_demo_output=>display( it_segment_data ).
ENDIF.