[ABAP] Änderungen der Gruppenstruktur / Gruppenwechsel – interne Tabellen durchloopen und auf Änderungen best. Elemente reagieren

* Gruppenwechsel mit AT NEW ist veraltet -> besser GROUP BY benutzen
DATA: it_spfli TYPE STANDARD TABLE OF spfli.
  
SELECT * INTO TABLE it_spfli FROM spfli.
  
LOOP AT it_spfli ASSIGNING FIELD-SYMBOL(<fs_line>).
* Gruppenwechsel prüfen
  AT NEW carrid.
* bei Änderung der carrid neue carrid ausgeben    
    WRITE: / <fs_line>-carrid.
  ENDAT.
ENDLOOP.

[ABAP] Struktur in CSV-String wandeln

Variante 1 (cl_rsda_csv_converter)

DATA: it_mara TYPE STANDARD TABLE OF mara.
  
...

* erste Zeile der iTab holen
DATA(lv_line) = it_mara[ 1 ].
DATA: lv_string TYPE c LENGTH 4096.

* Struktur mit Daten zu CSV-Zeile konvertieren
DATA(o_conv) = cl_rsda_csv_converter=>create( i_delimiter = '"' i_separator = ';' ).
o_conv->structure_to_csv( EXPORTING
                            i_s_data = lv_line
                          IMPORTING
                            e_data = lv_string ).

WRITE: / lv_string.

Variante 2 (SO_STRUCT_TO_CHAR)

SELECT FROM sflight
  FIELDS *
  WHERE carrid = 'AA'
  INTO TABLE @DATA(it_sflight).

DATA(lv_line) = it_sflight[ 1 ].
DATA(lv_string) = ||.

CALL FUNCTION 'SO_STRUCT_TO_CHAR'
  EXPORTING
    ip_struct = lv_line
  IMPORTING
    ep_string = lv_string.

WRITE: / lv_string.

[ABAP] Interne Tabelle in CSV wandeln / speichern

Variante 1 (cl_icf_csv)

DATA: it_mara TYPE STANDARD TABLE OF mara.

...

* iTab nach CSV-Datei konvertieren und speichern
cl_icf_csv=>request_for_write_into_csv( it_data = it_mara
                                        iv_hdr_struct_name = 'MARA'
                                        iv_init_dir = 'c:\temp'
                                        iv_file_name = 'test.csv' ).

Variante 2 (SAP_CONVERT_TO_CSV_FORMAT)

DATA: it_csv_output TYPE truxs_t_text_data.

SELECT FROM sflight
  FIELDS *
  WHERE CARRID = 'AA'
  INTO TABLE @DATA(it_sflight).

CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
  EXPORTING
    i_field_seperator    = ';'
*   I_LINE_HEADER        =
*   I_FILENAME           =
*   I_APPL_KEEP          = ' '
  TABLES
    i_tab_sap_data       = it_sflight
  CHANGING
    i_tab_converted_data = it_csv_output
  EXCEPTIONS
    conversion_failed    = 1
    OTHERS               = 2.

IF sy-subrc = 0.
  cl_demo_output=>write_data( it_csv_output ).
  cl_demo_output=>display( ).
ENDIF.

[ABAP] Interne Tabelle in XML wandeln und anzeigen

Variante 1 (Klassen)

DATA it_itab TYPE STANDARD TABLE OF mara.

SELECT * FROM mara INTO TABLE it_itab UP TO 10 ROWS.

DATA(o_writer_itab_xml) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_xml10 ).
CALL TRANSFORMATION id SOURCE values = it_itab RESULT XML o_writer_itab_xml.
DATA(itab_xml) = cl_abap_codepage=>convert_from( o_writer_itab_xml->get_output( ) ).

cl_abap_browser=>show_xml( xml_string = itab_xml
                           title      = 'Überschrift'
                           size       = cl_abap_browser=>large ).

Variante 2 (FuBa)

DATA lv_xml TYPE xstring.
DATA lo_dom TYPE REF TO if_ixml_document.
DATA it_itab TYPE STANDARD TABLE OF mara.

SELECT * FROM mara INTO TABLE it_itab UP TO 10 ROWS.

CALL TRANSFORMATION id SOURCE data_node = it_itab RESULT XML lv_xml.

CALL FUNCTION 'SDIXML_XML_TO_DOM'
  EXPORTING
    xml           = lv_xml
  IMPORTING
    document      = lo_dom
  EXCEPTIONS
    invalid_input = 1
    OTHERS        = 2.

IF sy-subrc = 0.
  CALL FUNCTION 'SDIXML_DOM_TO_SCREEN'
    EXPORTING
      document    = lo_dom
      title       = 'XML-Doc'
      encoding    = 'UTF-8'
    EXCEPTIONS
      no_document = 1
      OTHERS      = 2.

  IF sy-subrc = 0.

  ENDIF.
ENDIF.

[ABAP] Daten mit dem VALUE-Operator in eine interne Tabelle einfügen

TYPES: BEGIN OF t_line,
         vorname TYPE char255,
         name    TYPE char255,
         alter   TYPE i,
       END OF t_line.

DATA: it_names TYPE STANDARD TABLE OF t_line WITH DEFAULT KEY.

INITIALIZATION.

  INSERT VALUE #( vorname = 'Horst' name = 'Müller' alter = '35' ) INTO TABLE it_names.
  INSERT VALUE #( vorname = 'Udo' name = 'Schulze' alter = '50' ) INTO TABLE it_names.
  INSERT VALUE #( vorname = 'Heinz' name = 'Lehmann' alter = '45' ) INTO TABLE it_names.

START-OF-SELECTION.

  LOOP AT it_names ASSIGNING FIELD-SYMBOL(<fs_line>).
    WRITE: / <fs_line>-vorname, <fs_line>-name, <fs_line>-alter.
  ENDLOOP.

[ABAP] Datensätze einer internen Tabelle mit FOR … WHERE kopieren

TYPES: ty_spfli TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.

DATA: it_spfli TYPE ty_spfli.

SELECT * FROM spfli INTO TABLE @it_spfli.

* Daten mit carrid = LH in neue iTab kopieren
* es werden nur die Daten in carrid, connid, cityfrom, cityto übertragen
DATA(it_for) = VALUE ty_spfli( FOR l IN it_spfli WHERE ( carrid = 'LH' )
                               ( carrid = l-carrid
                                 connid = l-connid
                                 cityfrom = l-cityfrom
                                 cityto = l-cityto ) ).

[ABAP] interne Tabelle performant kopieren

komplette Tabelle durch Zuweisung

itab2 = itab1.

nur bestimmte Spalten – MOVE-CORRESPONDING

MOVE-CORRESPONDING itab1 TO itab2.

nur bestimmte Spalten – CORRESPONDING

itab2 = CORRESPONDING #( itab1 ).

manuell mit Feldsymbolen (~30% langsamer als die beiden vorherigen Varianten)

LOOP AT itab1 ASSIGNING FIELD-SYMBOL(<wa_1>).
  APPEND INITIAL LINE TO itab2 ASSIGNING FIELD-SYMBOL(<wa_2>).
  MOVE-CORRESPONDING <wa_1> TO <wa_2>.
ENDLOOP.

[ABAP] Text-Editor (Textanzeige, Texteingabe) als Popup-Fenster anzeigen

Variante 1 (führt Wordwrap bei Pos. 72 durch)

DATA: it_textlines TYPE STANDARD TABLE OF string.

...

CALL FUNCTION 'TERM_CONTROL_EDIT'
  EXPORTING
    titel          = 'Titel'
    langu          = sy-langu
  TABLES
    textlines      = it_textlines
  EXCEPTIONS
    user_cancelled = 1
    OTHERS         = 2.

IF sy-subrc = 0.

ENDIF.

Variante 2 (maximale Zeilenlänge sind 72 Zeichen)

DATA: it_text TYPE catsxt_longtext_itab.

...

CALL FUNCTION 'CATSXT_SIMPLE_TEXT_EDITOR'
  EXPORTING
    im_title        = 'Title'
    im_display_mode = ' ' " 'X' -> ReadOnly
    im_start_column = 10
    im_start_row    = 10
  CHANGING
    ch_text         = it_text.         " Tabelle mit Text

[ABAP] Inhalt einer internen Tabelle in einem PopUp-Fenster anzeigen

Variante 1 (Rechtsklick im PopUp zeigt Funktionsmenü)

CALL FUNCTION 'POPUP_WITH_TABLE'
  EXPORTING
    endpos_col   = 160
    endpos_row   = 40
    startpos_col = 1
    startpos_row = 1
    titletext    = 'Titel'
*           IMPORTING
*             CHOICE       =
  TABLES
    valuetab     = itab " darf nur eine Spalte beinhalten 
  EXCEPTIONS
    break_off    = 1
    OTHERS       = 2.
IF sy-subrc = 0.

ENDIF.

Variante 2 (Darstellung max. 80 Zeichen breit)

CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
  EXPORTING
    endpos_col   = 160
    endpos_row   = 40
    startpos_col = 1
    startpos_row = 1
    titletext    = 'Titel'
  tables
    valuetab     = itab " darf nur eine Spalte beinhalten 
  EXCEPTIONS
    break_off    = 1
    OTHERS       = 2.
IF sy-subrc = 0.

ENDIF.