[ABAP] Interne Tabellen: DEFAULT VALUE bei Table Expressions

TYPES: BEGIN OF ty_person,
         name TYPE string,
         age  TYPE i,
       END OF ty_person.

TYPES: ty_it_persons TYPE STANDARD TABLE OF ty_person WITH DEFAULT KEY.

DATA(it_persons) = VALUE ty_it_persons(
                                        ( name = 'Hugo' age = 40 )
                                        ( name = 'Ede' age = 65 )
                                        ( name = 'Ina' age = 35 )
                                      ).

* Datensatz für Person 'Heiner' ist nicht vorhanden -> Default Datensatz <empty> zurückgeben
DATA(lv_p) = VALUE #( it_persons[ name = 'Heiner' ] DEFAULT VALUE #( name = '<empty>' age = -1 ) ).

WRITE: / lv_p-name.
WRITE: / lv_p-age.

* Datensatz mit Index 5 ist nicht vorhanden -> Default Datensatz <empty> zurückgeben
DATA(lv_i) = VALUE #( it_persons[ 5 ] DEFAULT VALUE #( name = '<empty>' age = -1 ) ).

WRITE: / lv_i-name.
WRITE: / lv_i-age.

* Datensatz mit Index 4 ist nicht vorhanden -> Default Wert für age (-1) zurückgeben
DATA(lv_age) = VALUE #( it_persons[ 4 ]-age DEFAULT -1 ).

WRITE: / lv_age.

[ABAP] Parameter mit Auswahlbereich (SELECT-OPTIONS)

Variante 1 (DATA)

DATA: lv_matnr TYPE matnr.

* Parameterfeld von ... bis mit Dictionary-Type
SELECT-OPTIONS: so_matnr FOR lv_matnr DEFAULT '0000000001' TO '1000000000'.

START-OF-SELECTION.

* so_matnr ist eine itab mit Kopfzeile
  IF lines( so_matnr ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_matnr[ 1 ]-sign, so_matnr[ 1 ]-option, so_matnr[ 1 ]-low, so_matnr[ 1 ]-high.
  ENDIF.

Variante 2 (sy-datum)

* von 01.01.1999 bis Systemdatum
SELECT-OPTIONS: so_date FOR sy-datum DEFAULT '19990101' TO sy-datum.

START-OF-SELECTION.

* so_date ist eine itab mit Kopfzeile
  IF lines( so_date ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_date[ 1 ]-sign, so_date[ 1 ]-option, so_date[ 1 ]-low, so_date[ 1 ]-high.
  ENDIF.

Variante 3 (INITIALIZATION)

SELECT-OPTIONS: so_date FOR sy-datum.

INITIALIZATION.
* Initialwerte für so_date setzen
  so_date[] = VALUE #( ( sign   = 'I'
                         option = 'BT'
                         low    = sy-datum - 5
                         high   = sy-datum
                       )
                     ).

START-OF-SELECTION.
* so_date ist eine itab mit Kopfzeile
  IF lines( so_date ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_date[ 1 ]-sign, so_date[ 1 ]-option, so_date[ 1 ]-low, so_date[ 1 ]-high.
  ENDIF.

Variante 4 (TABLES)

* Zugriff Tabellenobjekt aus dem Dictionary deklarieren,
* automatische Verknüpfung der Suchilfe auch zu and. Objekten des Selektionsbildschirms
* obsolet (sollte nicht mehr verwendet werden)
TABLES: mara.

* Parameterfeld von ... bis mit Dictionary-Type
SELECT-OPTIONS: so_matnr FOR mara-matnr DEFAULT '0000000001' TO '1000000000'.

START-OF-SELECTION.

* so_matnr ist eine itab mit Kopfzeile
  IF lines( so_matnr ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_matnr[ 1 ]-sign, so_matnr[ 1 ]-option, so_matnr[ 1 ]-low, so_matnr[ 1 ]-high.
  ENDIF.