[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] UTC-Zeit (TIMESTAMP) in Systemzeit wandeln

DATA: lv_utc TYPE timestamp.
DATA: lv_date TYPE d.
DATA: lv_time TYPE t.

START-OF-SELECTION.

  GET TIME STAMP FIELD lv_utc.

  TRY.
      cl_abap_tstmp=>systemtstmp_utc2syst( EXPORTING
                                             utc_tstmp = lv_utc
                                           IMPORTING
                                             syst_date = lv_date
                                             syst_time = lv_time  ).

      WRITE: / |UTC: { lv_utc TIMESTAMP = USER }|.
      WRITE: / |System-Datum: { lv_date DATE = USER }|.
      WRITE: / |System-Zeit: { lv_time TIME = USER }|.

    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.

[ABAP] Systemzeit in UTC-Zeit (TIMESTAMP) wandeln

DATA: lv_utc TYPE timestamp.
DATA: lv_date TYPE d.
DATA: lv_time TYPE t.

START-OF-SELECTION.

  lv_date = sy-datum.
  lv_time = sy-uzeit.

  TRY.
      cl_abap_tstmp=>systemtstmp_syst2utc( EXPORTING
                                             syst_date = lv_date
                                             syst_time = lv_time
                                           IMPORTING
                                             utc_tstmp = lv_utc ).

      WRITE: / |UTC: { lv_utc TIMESTAMP = USER }|.
      WRITE: / |System-Datum: { lv_date DATE = USER }|.
      WRITE: / |System-Zeit: { lv_time TIME = USER }|.

    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.

[ABAP] Elemente des Textpools (Selektionsbildtexte) lesen / schreiben

DATA: it_text TYPE STANDARD TABLE OF textpool.

PARAMETERS: p_report LIKE sy-repid DEFAULT sy-repid.
PARAMETERS: p_lang LIKE sy-langu DEFAULT sy-langu.

START-OF-SELECTION.

* Textpool lesen
  READ TEXTPOOL p_report INTO it_text LANGUAGE p_lang.

  LOOP AT it_text ASSIGNING FIELD-SYMBOL(<fs_line>).
    WRITE: / |{ <fs_line>-id } { <fs_line>-key } { <fs_line>-entry } { <fs_line>-length }|.
  ENDLOOP.

  IF lines( it_text ) > 0.
* Eintrag ändern
    it_text[ 1 ]-entry = 'Programm DEMO1'.

* Textpool schreiben
    INSERT TEXTPOOL p_report FROM it_text LANGUAGE p_lang.
  ENDIF.

[ABAP] Funkionsbausteine zum Untersuchen von ABAP-Quellcode

GET_TABLES          " Liefert alle im Prog. verw. Tabellen (TABLES, SEGMENTS, INCLUDE STRUCTURE)
GET_GLOBAL_SYMBOLS  " Liste der globalen Daten eines Programms
GET_COMPONENT_LIST  " ABAP: Komponentenliste zu einem globalen Datenobjekt
RS_GET_ALL_INCLUDES " Bestimmt alle Includes zu einem Modulpool/Report
RS_GET_MAINPROGRAMS " Alle Rahmenprogramme ermitteln, in denen eine Include vorkommt

[ABAP] SELECT-OPTIONS Auswahl vorbelegen

Beispiel 1

DATA: gv_num TYPE i.
 
SELECT-OPTIONS: p_num FOR gv_num.
 
INITIALIZATION.
 
* Zahlenwerte 3 und 9
  p_num[] = VALUE #( ( sign = 'I' option = 'EQ' low = 3 )
                     ( sign = 'I' option = 'EQ' low = 9 ) ).

Beispiel 2

DATA: gv_matnr TYPE mara-matnr.
DATA: gv_werks TYPE mard-werks.
  
SELECT-OPTIONS: so_matnr FOR gv_matnr.
SELECT-OPTIONS: so_werks FOR gv_werks.

INITIALIZATION.

* MATNR von / bis
  so_matnr[] = VALUE #( ( sign = 'I' option = 'BT' low = '000000001000000000' high = '000000002000000000' ) ).
  
* Werk 0001
  so_werks[] = VALUE #( ( sign = 'I' option = 'EQ' low = '0001' ) ).

Beispiel 3

DATA: gv_werks TYPE mard-werks.
  
SELECT-OPTIONS: so_werks FOR gv_werks.

INITIALIZATION.
  
* Ausschluss Werk 0001
  so_werks[] = VALUE #( ( sign = 'E' option = 'EQ' low = '0001' ) ).

[ABAP] Alter / obsoleter Code

Weiterführende Infos: Link

alt / obsolet                                       neu

DATA: f1(8) TYPE d. (Längenangaben bei Datentypen)  DATA: f1 TYPE d.
FORM, PERFORM (obsolete Modularisierung)            CLASS DEFINITION, CLASS IMPLEMENTATION + Methoden (Kapselung)
CALL FUNCTION func EXCEPTIONS ...                   CLASS DEFINITION, CLASS IMPLEMENTATION + Methoden (Kapselung)
LIKE, STRUCTURE                                     TYPE, außer bei LIKE LINE OF
LOCAL                                               Verzichten auf Zugriff auf globalen Daten des Rahmenprogramms
FIELD-SYMBOLS: ...                                  LOOP AT ... ASSIGNING FIELD-SYMBOL(<...>)
READ TABLE ... INDEX 1                              itab[ 1 ]
READ TABLE ... ASSIGNING ...                        itab[ ... ]
READ TABLE ... WITH KEY type = '1'                  itab[ type = '1' ]
READ TABLE ... INTO ...                             DATA(var) = itab[ ... ].
READ TABLE ... REFERENCE INTO ...                   DATA(oref) = REF type( itab[ ... ] ).
READ TABLE ... TRANSPORTING NO FIELDS               IF line_exists( itab[ ... ] ). ... ENDIF.
REFRESH                                             CLEAR, FREE
DATA name TYPE ...                                  DATA(name) = VALUE type( ... ).
CLASS class DEFINITION LOAD.                        CLASS class DEFINITION.
INTERFACE intf LOAD.                                INTERFACE intf.
CREATE OBJECT oref EXPORTING ...                    DATA(oref) = NEW class( ... ).
OCCURS                                              Tabellen mit Kopfzeilen sind obsolet, im OO nicht mehr unterstützt
WITH HEADER LINE                                    Tabellen mit Kopfzeilen sind obsolet, im OO nicht mehr unterstützt
RANGES                                              DATA rg_name = TYPE|LIKE RANGE OF type.
MOVE                                                =
COMPUTE                                             weglassen, komplett überflüssig
PACK src TO dest                                    dest = src
TABLES                                              weglassen, komplett überflüssig, außer TABLES sscrfields.
TYPE-POOLS                                          weglassen, komplett überflüssig
DATA - COMMON PART                                  weglassen, komplett überflüssig
TABLES *                                            weglassen, komplett überflüssig
TYPE TABLE                                          TYPE ... TABLE WITH ... KEY (explizite Typisierung)
CHECK SELECT-OPTIONS.                               wird im OO nicht mehr unterstützt

READ, LOOP, INSERT, COLLECT,
APPEND, MODIFY, DELETE                              ohne INTO im OO nicht mehr unterstützt
SELECT * FROM tab.                                  ohne INTO im OO nicht mehr unterstützt, neu: SELECT ... INTO wa
LOOP AT itab.                                       ohne INTO im OO nicht mehr unterstützt, neu: LOOP AT ... INTO wa, ASSIGNING ... oder TRANSPORTING NO FIELDS
LOOP AT screen.                                     nur noch LOOP AT SCREEN INTO DATA(screen_wa).
MODIFY screen.                                      nur noch MODIFY SCREEN FROM screen_wa.
FIELDS obj.                                         ##NEEDED
"#EC ... (Pseudokommentare)                         ## ... (Pragmas)
CALL TRANSACTION ...                                CALL TRANSACTION ... WITH|WITHOUT AUTHORITY-CHECK.
CALL METHOD ...                                     weglassen, nur noch direkter Methodenaufruf
CALL DIALOG ...                                     globale Klassen oder FuBa
CALL CUSTOMER-FUNCTION ...                          CALL BADI ...
LEAVE                                               LEAVE PROGRAM, LEAVE TO TRANSACTION, LEAVE [TO] SCREEN, LEAVE LIST-PROCESSING.
><, =>, =<                                          <>, >=, <=, NE, GE, LE
IS REQUESTED                                        IS SUPPLIED
CATCH SYSTEM-EXCEPTIONS ...                         TRY ... CATCH
SEARCH itab                                         FIND IN TABLE

SELECT a b FROM tbl                                 SELECT a, b FROM tbl
  INTO CORRESPONDING FIELDS OF TABLE itab             INTO CORRESPONDING FIELDS OF TABLE @itab
  WHERE c = v1                                        WHERE c = @v1
  ORDER BY a, b.                                      ORDER BY a, b.

GUID_CREATE                                         cl_system_uuid
GUID_CONVERT                                        cl_system_uuid
SYSTEM_UUID_CREATE                                  cl_system_uuid
SYSTEM_UUID_C_CREATE                                cl_system_uuid
SYSTEM_UUID_C22_CREATE                              cl_system_uuid

[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