ABAP Keyword Documentation →  ABAP − Reference →  Processing Internal Data →  Attributes of Data Objects →  DESCRIBE → 

DESCRIBE FIELD

Quick Reference

Syntax

DESCRIBE FIELD dobj
  [TYPE typ [COMPONENTS com]]
  [LENGTH ilen IN {BYTE|CHARACTER} MODE]
  [DECIMALS dec]
  [OUTPUT-LENGTH olen]
  [HELP-ID hlp]
  [EDIT MASK mask].

Extras:

1. ... TYPE typ [COMPONENTS com]

2. ... LENGTH ilen IN {BYTE|CHARACTER} MODE

3. ... DECIMALS dec

4. ... OUTPUT-LENGTH olen

5. ... HELP-ID hlp

6. ... EDIT MASK mask

Effect

This statement determines multiple attributes of the data object dobj and assigns them to the specified target fields. The following can be specified as target fields of each addition:

The various additions make it possible to determine the data type and the number of components for structures, the length used in the memory, the number of decimal places, the output length, the name of the data type for a reference to a data element in ABAP Dictionary, and any conversion routines.

Notes

Addition 1

... TYPE typ [COMPONENTS com]

Effect

Determines the data type of the data object dobj. The return value is a single character character-like ID. In an inline declaration, a variable of the type c with length 1 is declared. The following tables list the assignment of return values for all possible data types. The ID is case-sensitive.

Numeric Data Type ID
b b
s s
i I
int8 8
p P
decfloat16 a
decfloat34 e
f F

Character-Like Data Type ID
c C (exception, see note below)
n N
string g

Byte-Like Data Type ID
x X
xstring y

Date/Time Type ID
d D
t T

Enumerated Type ID
Enumerated type k

Reference Type ID
Data reference l
Object reference r

Complex Type ID
Flat structure u (exception, refer to note below)
Deep structure v (exception, refer to note below)
Internal table h

The addition COMPONENTS determines the number of direct components of the data object dobj. The return value has the type i. In an inline declaration, a variable of the type i is declared. If the data object dobj is not a structure, the value 0 is returned. If dobj is a nested structure, only the components of the highest hierarchy level are counted.

Note

If DESCRIBE FIELD is applied directly to a static box, its data type according to the above table is returned and not the internal ID j for the boxed component.

Example

For the deep nested structure struc1, identifies the type ID "v" and three components. For the flat structure struc2, identifies the type ID "u" and two components.

DATA: BEGIN OF struc1,
        comp1 TYPE c LENGTH 1,
        comp2 TYPE string,
        BEGIN OF struc2,
          comp1 TYPE c LENGTH 1,
          comp2 TYPE i,
        END OF struc2,
      END OF struc1.

DESCRIBE FIELD: struc1        TYPE DATA(typ1) COMPONENTS DATA(comp1),
                struc1-struc2 TYPE DATA(typ2) COMPONENTS DATA(comp2).

Addition 2

... LENGTH ilen IN {BYTE|CHARACTER} MODE

Effect

Determines the length used directly by the data object dobj in the memory in bytes or characters depending on the addition MODE. The return value has the type i. In an inline declaration, a variable of the type i is declared.

The variant with the addition IN BYTE MODE identifies the length of the data object dobj in bytes. The variant with the addition IN CHARACTER MODE identifies the length of the data object dobj in characters. When using IN CHARACTER MODE, the data type of dobj must be flat and character-like. For deep data types, only IN BYTE MODE can be specified. This always identifies the length of the references involved (eight bytes for each reference).

Notes

Example

Calculates the bytes required for the representation of one character. The result is greater than 1 in multi-byte systems.

DATA: text  TYPE c LENGTH 1,
      bytes TYPE i.

DESCRIBE FIELD text LENGTH DATA(blen) IN BYTE MODE.
DESCRIBE FIELD text LENGTH DATA(clen) IN CHARACTER MODE.

bytes = blen / clen.

Example

The result len of the following DESCRIBE statement is 9, not 10, due to a trailing alignment gap in struct.

DATA:
  BEGIN OF struct,
    text       TYPE c LENGTH 3,
    hex  TYPE x LENGTH 3,
  END OF struct.

DESCRIBE FIELD struct LENGTH DATA(len) IN BYTE MODE.

Addition 3

... DECIMALS dec

Effect

Determines the number of decimal places of the data object dobj. The return value has the type i. In an inline declaration, a variable of the type i is declared.

Note

Only data objects of the data type p can have decimal places. Therefore, the result in dec can be different from 0 only for these data objects.

Example

Detects 0 decimal places and then 4 decimal places.

CLASS demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main IMPORTING pack TYPE p.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD main.
    DESCRIBE FIELD pack DECIMALS DATA(dec).
    cl_demo_output=>write( dec ).
  ENDMETHOD.
ENDCLASS.

DATA:
  pack1 TYPE p LENGTH 8 DECIMALS 0,
  pack2 TYPE p LENGTH 8 DECIMALS 4.

START-OF-SELECTION.
  demo=>main( pack1 ).
  demo=>main( pack2 ).
  cl_demo_output=>display( ).

Addition 4

... OUTPUT-LENGTH olen

Effect

For data objects with a fixed length, determines the output length of the data object dobj required for screen layouts. The return value has the type i. In an inline declaration, a variable of the type i is declared.

Generally, this result corresponds to the predefined output length of the data object in accordance with its data type in the output in the list buffer. In strings, olen is always set to 0. olen expects the data type i.

Notes

Example

For date1, identifies the output length 8 associated with the type d. For date2, identifies the output length 10 defined in the domain SYDATS.

DATA: date1 TYPE d,
      date2 TYPE sy-datum.

DESCRIBE FIELD date1 OUTPUT-LENGTH DATA(olen1).
DESCRIBE FIELD date2 OUTPUT-LENGTH DATA(olen2).

Addition 5

... HELP-ID hlp

Effect

If the data type of the data object dobj is determined by a data element in ABAP Dictionary, the name of the data type is assigned that was used after the addition TYPE when defining the data object dobj. The return value is a string. In an inline declaration, a variable of the type string is declared.

If the data object does not refer to a data object in ABAP Dictionary, hlp is initialized. hlp expects a character-like data object.

If a field symbol - to which a data object is assigned using the statement ASSIGN COMPONENT - is specified for dobj, and if the data object refers to a component of a structure in ABAP Dictionary, then the complete name of the structure component is returned.

Note

The addition is called HELP-ID because the name of the data type in hlp can be used for the display of the field help or input help assigned in ABAP Dictionary.

Example

After DESCRIBE FIELD, hlp contains the value "SPFLI-CARRID". Since an input help is assigned to this component in ABAP Dictionary, the input help can be displayed using the function module F4IF_FIELD_VALUE_REQUEST. If the name s_carr_id is specified after TYPE when defining carrid, hlp contains the value "S_CARR_ID” and can be used, for example, to display the field help using the function module HELP_OBJECT_SHOW.

DATA: carrid TYPE spfli-carrid,
      struc  TYPE dfies-tabname,
      comp   TYPE dfies-fieldname.

DESCRIBE FIELD carrid HELP-ID DATA(hlp).

SPLIT hlp AT '-' INTO struc comp.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
  EXPORTING
    tabname           = struc
    fieldname         = comp
  EXCEPTIONS
    field_not_found   = 1
    no_help_for_field = 2
    inconsistent_help = 3
    no_values_found   = 4
    OTHERS            = 5.

Example

Again in this example, hlp contains the value "SPFLI-CARRID" after DESCRIBE FIELD.

DATA spfli TYPE spfli.

ASSIGN COMPONENT 'CARRID' OF STRUCTURE spfli TO FIELD-SYMBOL(<fs>).

DESCRIBE FIELD <fs> HELP-ID DATA(hlp).

Addition 6

... EDIT MASK mask

Effect

If a conversion routine is assigned to the data object dobj by referring to a domain in ABAP Dictionary, the name of the conversion routine is determined and prefixed with two equals signs "==". The return value is a string. In an inline declaration, a variable of the type string is declared. If no conversion routine is assigned to the data object, mask is initialized or remains initial.

Note

If a data object mask meets these requirements, it can be used directly in the addition USING EDIT MASK of the statement WRITE [TO] to call the conversion routine.

Example

Since the data element S_FLTIME is associated with the conversion routine SDURA by the domain S_DURA, msk contains the value "==SDURA" after DESCRIBE FIELD and the statement WRITE TO returns the value "5:33" after the conversion from seconds to minutes.

DATA: time    TYPE s_fltime,
      seconds TYPE i,
      output  TYPE c LENGTH 10.

DESCRIBE FIELD time EDIT MASK DATA(msk).

seconds = 333.
WRITE seconds TO output USING EDIT MASK msk.
cl_demo_output=>display_data( output ).



Continue
Example Determining Elementary Data Types