Anfang des InhaltsbereichsAttribute von Datenobjekten bestimmen Dokument im Navigationsbaum lokalisieren

Es kann vorkommen, daß man zur Laufzeit eines Programms Attribute eines Datenobjekts benötigt, die nicht statisch bekannt sind. Beispielsweise will man in einem Unterprogramm den Typ eines generisch übergebenen Schnittstellenparameters erkennen. Hierzu verwendet man die Anweisungen:

DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]]
                   [OUTPUT-LENGTH <o>] [DECIMALS <d>]
                   [EDIT MASK <m>] [HELP-ID <h>].

Die Attribute des Datenobjekts <f>, die durch die Zusätze der Anweisung benannt sind, werden in die entsprechenden Variablen geschrieben. Es können beliebig viele Zusätze auf einmal verwendet werden.

DESCRIBE FIELD DISTANCE BETWEEN <f1> AND <f 2> INTO <d>.

Der Abstand der Datenobjekte <f1> und <f 2> wird bestimmt.

Im folgenden die Zusätze im Einzelnen:

Feldlänge bestimmen

Die Feldlänge eines Datenobjekts wird mit dem Zusatz LENGTH bestimmt:

DESCRIBE FIELD <f> LENGTH <l> IN CHARACTER MODE | IN BYTE MODE.

Die Anweisung schreibt die Länge des Felds <f> in die Variable <l> .

Beispiel

DATA: text(8) TYPE c,
      len TYPE i.

DESCRIBE FIELD text LENGTH len IN CHARACTER MODE.

Feld LEN enthält den Wert 8.

Datentyp bestimmen

Der Datentyp eines Datenobjekts wird mit dem Zusatz TYPE bestimmt:

DESCRIBE FIELD <f> TYPE <t>.

Die Anweisung schreibt den Datentyp des Felds <f> in die Variable <t> .

Außer den eingebauten ABAP-Typen C, D, F, I, N , P, T und X, kann die Anweisung folgende Werte zurückgeben:

Diese Werte sind interne Typbezeichner. Datenobjekte mit den internen Typen s und b können durch Verweise auf entsprechende elementare Typen im ABAP Dictionary deklariert worden sein. Datenobjekte mit dem Typ h sind aggregiert. Datenobjekte mit dem internen Typ r sind Referenzvariablen in ABAP Objects.

Wenn <f> eine Struktur ist, gibt die Anweisung auch den Wert C zurück. Um mehr über Strukturen zu erfahren, muß man zusätzlich die Option COMPONENTS verwenden:

DESCRIBE FIELD <f> TYPE <t> COMPONENTS <n>.

Diese Anweisung schreibt statt C folgende interne Typbezeichner in die Variable <t>:

Die Zahl der direkten Komponenten der Struktur wird als Integerzahl in die Variable <n> geschrieben.

Beispiel

TABLES spfli.
DATA: numtext(8) TYPE n,
      typ(1) TYPE c.

DESCRIBE FIELD numtext TYPE typ.
WRITE typ.

DESCRIBE FIELD spfli-fltime TYPE typ.
WRITE typ.

Dieses Beispiel erzeugt folgende Ausgabe:

N T

Das Feld TYP enthält zuerst den Wert N und dann den Wert T.

Beispiel

TYPES: surname(20)  TYPE c,
       street(30)   TYPE c,
       zip_code(10) TYPE n,
       city(30)     TYPE c,
       phone(20)    TYPE n,
       date         LIKE sy-datum.

TYPES: BEGIN OF address,
         NAME TYPE surname,
         CODE TYPE zip_code,
         TOWN TYPE city,
         STR  TYPE street,
       END OF address.

TYPES: BEGIN OF phone_list,
         adr TYPE address,
         tel TYPE phone,
       END OF phone_list.

DATA pl TYPE phone-list.

DATA: typ(1) TYPE c,
      n TYPE i.

DESCRIBE FIELD pl TYPE typ COMPONENTS n.

Hier enthält das Feld TYP den Wert u und N den Wert 2, weil PL eine Struktur mit zwei direkten Komponenten (ADR und TEL) ohne interne Tabellen ist.

Ausgabelänge bestimmen

Die Ausgabelänge eines Datenobjekts wird mit dem Zusatz OUTPUT-LENGTH bestimmt:

DESCRIBE FIELD <f> OUTPUT-LENGTH <o>.

Die Anweisung schreibt die Ausgabelänge des Felds <f> in die Variable <o> . Die Ausgabelänge eines Felds entspricht der Anzahl der Stellen, die der Inhalt des Felds nach einer Ausgabe mit der Anweisung WRITE auf einer Liste belegt.

Beispiel

DATA: float TYPE f,
      out TYPE i,
      len TYPE i.

DESCRIBE FIELD float LENGTH len OUTPUT-LENGTH out.

Hier enthält das Feld LEN den Wert 8 und das Feld OUT den Wert 22.

Dezimalstellen bestimmen

Die Anzahl der Dezimalstellen eines Datenobjekts wird mit dem Zusatz DECIMALS bestimmt:

DESCRIBE FIELD <f> DECIMALS <d>.

Die Anweisung schreibt die Anzahl der Dezimalstellen des Felds <f> in die Variable <d> .

Beispiel

DATA: pack TYPE p DECIMALS 2, dec(1) TYPE c.

DESCRIBE FIELD pack DECIMALS dec.

Hier enthält das Feld DEC den Wert 2.

Konvertierungsroutine bestimmen

Eine eventuell im ABAP Dictionary definierte Konvertierungsroutine wird mit dem Zusatz EDIT MASK bestimmt:

DESCRIBE FIELD <f> EDIT MASK <m>.

Falls das Feld <f> durch Bezug auf einen Datentyp aus dem ABAP Dictionary deklariert wurde und für diesen Typ eine Konvertierungsroutine <conv> existiert, schreibt die Anweisung diese in der Form '==<conv>' in die Variable <m>. Eine Strukturlink Konvertierungsroutine kann im ABAP Dictionary in der Domäne eines Datenelements angegeben werden. Konvertierungsroutinen sind mit jeweils zwei Funktionsbausteinen verknüpft, die es erlauben die Darstellung eines Werts im ABAP Dictionary in interne Darstellung im Programm zu verwandeln und umgekehrt. Die Variable <m> kann direkt als Aufbereitungsschablone in einer WRITE-Anweisung verwendet werden.

Beispiel

DATA: fltime TYPE s_fltime,
      m(7) TYPE c.

DESCRIBE FIELD fltime EDIT MASK m.

fltime = sy-uzeit.

WRITE: / fltime,
       / sy-uzeit,
       / sy-uzeit USING EDIT MASK m.

Die Domäne S_DURA des Datenelements S_FLTIME im ABAP Dictionary ist mit der Konvertierungsroutine SDURA verknüpft. Das Feld M enthält den Wert ==SDURA. Die Ausgabe sieht z.B. so aus:

604:55
10:04:55
604:55

Die Konvertierungsroutine SDURA rechnet Stunden in Minuten um. Das Feld FLTIME wird intern in der konvertierten Form behandelt. Das Feld SY-UZEIT kann in der konvertierten Form auf die Ausgabeliste geschrieben werden.

Kennung für Hilfetext bestimmen

Die Kennung eines eventuell im ABAP Dictionary definierten Hilfetexts (F1-Hilfe) wird mit dem Zusatz HELP-ID bestimmt:

DESCRIBE FIELD <f> HELP-ID <h>.

Falls das Feld <f> durch Bezug auf einen Datentyp aus dem ABAP Dictionary deklariert wurde schreibt die Anweisung die Kennung des Hilfetexts in die Variable <h>. Die Kennung kann z.B. in einem geeigneten Funktionsbaustein verwendet werden, um programmgesteuert den Hilfetext anzuzeigen.

Beispiel

DATA: company TYPE s_carr_id,
      h(20) TYPE c,
      tlink TYPE TABLE OF tline.

DESCRIBE FIELD company HELP-ID h.

CALL FUNCTION 'HELP_OBJECT_SHOW'
     EXPORTING
          dokclass                      = 'DE'
          doklangu                      = sy-langu
          dokname                       = h
     TABLES
          links                         = tlink
     EXCEPTIONS
          object_not_found              = 1
          sapscript_error               = 2
          others                        = 3.

IF sy-subrc <> 0.
  ...
ENDIF.

Hier enthält das Feld H einfach den Namen des Datenelements S_CARR_ID. Der Funktionsbaustein HELP_OBJECT_SHOW zeigt die Dokumentation des Datenelements in einem Dialogfenster an.

Abstand zweier Felder bestimmen

Der Abstand zweier Felder im Speicher wird durch folgende Anweisung bestimmt:

DESCRIBE FIELD DISTANCE BETWEEN <f1> AND <f 2> INTO <d>
IN CHARACTER MODE | IN BYTE MODE.

Die Anweisung schreibt die Anzahl der Bytes zwischen den Datenobjekte <f1> und <f 2> in die Variable <d>, wobei die Länge des Felds, das im Speicher vor dem anderen Feld liegt, immer mitgezählt wird. Eventuelle Ausrichtungen werden berücksichtigt.

Beispiel

DATA: BEGIN OF test,
col1(3) TYPE C,
col2(2) TYPE C,
col3 TYPE i,
END OF test,
dist TYPE i.

DESCRIBE DISTANCE BETWEEN test-col3 AND test-col1 INTO dist
IN BYTE MODE.

Hier enthält das Feld DIST den Wert 8. Dies sind die Längen 3 und 2 der Komponenten COL1 und COL2 sowie eine Alignment-Lücke von 3 zwischen COL2 und COL3.

Ende des Inhaltsbereichs