ABAP CONSTANTS: Syntax, Deklaration und Anwendungsbeispiele

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die CONSTANTS-Anweisung dient dazu, in ABAP Konstanten zu deklarieren. Eine Konstante ist ein benanntes Datenobjekt, dessen Wert bei der Deklaration festgelegt wird und während der gesamten Programmlaufzeit nicht mehr verändert werden kann.

Die Verwendung von Konstanten hat mehrere Vorteile:

  1. Lesbarkeit: Code wird verständlicher, wenn statt “magischer” Werte (z. B. Zahlen oder einzelne Buchstaben) selbsterklärende Namen verwendet werden (z. B. c_status_freigegeben statt 'F').
  2. Wartbarkeit: Wenn sich ein fester Wert ändert (z. B. ein Grenzwert oder ein Steuersatz), muss er nur an einer zentralen Stelle – in der CONSTANTS-Deklaration – angepasst werden, nicht an jeder Stelle im Code, wo er verwendet wird.
  3. Sicherheit: Sie schützen davor, dass feste Werte versehentlich im Programmablauf geändert werden. Jeder Versuch, einer Konstante einen neuen Wert zuzuweisen, führt zu einem Syntaxfehler.

Syntax

Es gibt verschiedene Möglichkeiten, Konstanten zu deklarieren:

1. Deklaration einer einzelnen Konstante

CONSTANTS <konstantenname> TYPE <datentyp> [LENGTH <länge>] [DECIMALS <dezimalstellen>]
VALUE <wert> | IS INITIAL.
  • <konstantenname>: Der Name, den die Konstante erhalten soll (muss den ABAP-Namenskonventionen folgen).
  • TYPE <datentyp>: Der ABAP-Datentyp (z. B. I, P, C, STRING, D, T, ein Dictionary-Typ wie T001-BUTXT oder ein selbst definierter Typ).
  • LENGTH <länge>: Optionale Längenangabe für Typen wie C, N, X, P.
  • DECIMALS <dezimalstellen>: Notwendig für gepackte Zahlen (Typ P), um die Anzahl der Nachkommastellen festzulegen.
  • VALUE <wert>: Obligatorisch (außer bei VALUE IS INITIAL). Hier wird der feste, unveränderliche Wert zugewiesen. Der Wert muss zum Datentyp passen. Es kann ein Literal (z. B. 100, 'Hallo', '19.99') oder eine andere, bereits definierte Konstante sein.
  • VALUE IS INITIAL: Weist der Konstante den typspezifischen Initialwert zu (z. B. 0 für I, Leerzeichen für C, leerer String für STRING).

2. Deklaration mehrerer Konstanten (Kettenanweisung)

CONSTANTS: <konst1> TYPE <typ1> VALUE <wert1>,
<konst2> TYPE <typ2> VALUE <wert2>,
... .

Mit einem Doppelpunkt nach CONSTANTS können mehrere Konstanten durch Kommas getrennt deklariert werden. Die Anweisung wird mit einem Punkt abgeschlossen.

3. Deklaration einer konstanten Struktur

CONSTANTS: BEGIN OF <struktur_name>,
<komponente1> TYPE <typ1> VALUE <wert1>,
<komponente2> TYPE <typ2> VALUE <wert2>,
...
END OF <struktur_name>.

Hiermit kann eine Struktur definiert werden, deren Komponenten alle konstante Werte haben. Der Zugriff erfolgt dann über <struktur_name>-<komponenteN>.

Beispiele

1. Einfache Konstanten

CONSTANTS c_max_laenge TYPE i VALUE 255.
CONSTANTS c_app_name TYPE string VALUE `Mein Super Report`.
CONSTANTS c_leerzeichen TYPE c LENGTH 1 VALUE ' '. " oder VALUE IS INITIAL
CONSTANTS c_wahr TYPE abap_bool VALUE abap_true. " Verwenden von ABAP-Boolean-Konstanten

2. Konstante mit Nachkommastellen (Typ P)

CONSTANTS c_mwst_normal TYPE p LENGTH 8 DECIMALS 2 VALUE '0.19'. " 19% Mehrwertsteuer

3. Kettenanweisung für mehrere Konstanten

CONSTANTS: c_status_neu TYPE c LENGTH 1 VALUE 'N',
c_status_in_arbeit TYPE c LENGTH 1 VALUE 'I',
c_status_erledigt TYPE c LENGTH 1 VALUE 'E',
c_euro TYPE waers VALUE 'EUR'.

4. Konstante Struktur

CONSTANTS: BEGIN OF c_farben,
rot TYPE c LENGTH 1 VALUE '1',
gruen TYPE c LENGTH 1 VALUE '2',
blau TYPE c LENGTH 1 VALUE '3',
END OF c_farben.

5. Verwendung von Konstanten im Code

DATA gv_aktueller_status TYPE c LENGTH 1.
DATA gv_text_laenge TYPE i.
DATA gv_betrag_netto TYPE p DECIMALS 2 VALUE '100.00'.
DATA gv_betrag_brutto TYPE p DECIMALS 2.
gv_aktueller_status = c_status_in_arbeit.
gv_text_laenge = strlen( c_app_name ).
IF gv_aktueller_status = c_status_in_arbeit.
WRITE: / 'Der Report läuft unter dem Namen:', c_app_name.
WRITE: / 'Maximale Länge ist:', c_max_laenge.
WRITE: / 'Farbe Rot hat Code:', c_farben-rot.
ENDIF.
" Berechnung mit Konstante
gv_betrag_brutto = gv_betrag_netto * ( 1 + c_mwst_normal ).
WRITE: / 'Bruttobetrag:', gv_betrag_brutto CURRENCY c_euro.
" ****** SYNTAXFEHLER ******
" Der folgende Code würde zu einem Syntaxfehler führen,
" da Konstanten nicht geändert werden dürfen:
" c_max_laenge = 500.
" c_farben-rot = 'X'.
" **************************

Zusammenfassend lässt sich sagen: Die CONSTANTS-Anweisung ist ein wichtiges Werkzeug in ABAP, um fest definierte Werte im Code benennbar, wartbar und sicher zu machen. Sie sollten immer dann verwendet werden, wenn ein Wert sich während der Programmausführung garantiert nicht ändern soll.