DESCRIBE (ABAP Keyword)

DESCRIBE (ABAP Keyword) introduction & syntax details

DESCRIBE

DESCRIBE – return attributes of an internal
table

 

Basic form
DESCRIBE TABLE
itab.

Effect
Returns the attributes of the internal table itab . You
must use at least one of the additions listed
below.

 

Additions

1. … LINES lin
2. … OCCURS
n

Addition 1
… LINES lin

Effect
Places the number of
filled lines of the table t in the field lin .

Example

DATA: BEGIN
OF TAB OCCURS 10,
X,
END OF TAB.
DATA: LIN TYPE P.

CLEAR TAB.
REFRESH TAB.
MOVE ‘?’ TO TAB-X.
APPEND TAB.
DESCRIBE TABLE TAB LINES
LIN.

Result: LIN contains the value 1.

Addition 2

OCCURS n

Effect
Transfers the size of the OCCURS parameter from the
table definition to the variable n .

Example

DATA: BEGIN OF TAB
OCCURS 10,
X,
END OF TAB.
OCC TYPE P.
DESCRIBE TABLE TAB OCCURS
OCC.

Result: OCC contains the value 10.

Note
If the table
is meant to accept more lines than specified by the OCCURS parameter, the
parameter value is roughly doubled as long as the table size remains smaller
than 8 KB; this table area is held in the roll area. If the table exceeds the
maximum permitted size, the OCCURS parameter is not increased and the remaining
part of the table is rolled out to the paging area (see DATA ).
For this
reason, the OCCURS value determined by the DESCRIBE statement may differ from
that in the DATA statement.
The runtime required to execute the DESCRIBE
TABLE statement is approx. 4 msn (standardized microseconds).

DESCRIBE – determine distance between two fields

Basic form
DESCRIBE DISTANCE BETWEEN f1 AND f2 INTO
f3.

Effect
Determines the distance between the fields f1 and f2 and
places the result (in bytes) in f3 .

Example
Determine the distance
between two components of the demo table SBOOK in the flight reservation
system:

TABLES SBOOK.
DATA DIST TYPE I.
DESCRIBE DISTANCE
BETWEEN SBOOK-CARRID
AND SBOOK-BOOKID
INTO DIST.

Result: DIST
contains the value 15 because exactly two fields, SFLIGHT-CONNID (4 bytes) and
SBOOK-FLDATE (8 bytes), lie between the SBOOK components CARRID and BOOKID ;
also, SBOOK-CARRID is itself 3 bytes long. The sum of these values gives the
distance between the two components in bytes.

DESCRIBE – supply attributes of a list

Variants

1. DESCRIBE LIST NUMBER OF LINES
lin.
2. DESCRIBE LIST NUMBER OF PAGES n.
3. DESCRIBE LIST LINE lin PAGE
pag.
4. DESCRIBE LIST PAGE pag.

Effect
Returns the attributes of a
list. All variants have the addition … INDEX idx allowing you to determine the
attributes of a particular list level ( SY-LSIND = 0,1,2,3,…
).

Note
You should use this key word only in exceptional cases (e.g.
when editing an ‘anonymous’ list in a program other than that which generated
the list). In all other cases, you should save the relevant values when you
generate the list.
Take care when attempting to retrieve the list attributes
being set up ( …INDEX SY-LSIND ), since some attributes (number of pages,
number of lines, …) may not have been updated yet.

Variant
1
DESCRIBE LIST NUMBER OF LINES lin.

Addition
… INDEX
idx

Effect
Returns the number of lines in the list.

The return
code value is set as follows:

SY-SUBRC = 0 OK
SY-SUBRC <> 0
List does not exist (only with the addition INDEX )

Addition
… INDEX
idx

Effect
Returns the attributes of the list level idx (0,
1,2,3,…).

Example
After line selection, determine the number of
lines in the displayed list:

DATA: LN LIKE SY-PAGNO. …

AT
LINE-SELECTION.
DESCRIBE LIST NUMBER OF LINES LN.

The variable LN
now contains the number of lines in the displayed list.

Variant
2
DESCRIBE LIST NUMBER OF PAGES n.

Addition
… INDEX
idx

Effect
Returns the number of pages in the list.

The return
code value is set as follows:

SY-SUBRC = 0 OK
SY-SUBRC <> 0
List does not exist (only with the addition INDEX )

Addition
… INDEX
idx

Effect
Returns the attributes of the list level idx (0,
1,2,3,…).

Example
After line selection, determine the number of
pages in the displayed list:

DATA: PN LIKE SY-PAGNO. …

AT
LINE-SELECTION.
DESCRIBE LIST NUMBER OF PAGES PN.

The variable PN
now contains the number of pages in the displayed list (i.e. the contents of the
system field SY-PAGNO after the list has been generated!).

Variant
3
DESCRIBE LIST LINE lin PAGE pag.

Addition
… INDEX
idx

Effect
Returns the number of the page for the line lin in the
list.

Note
In interactive reporting, line selection causes a value to
be assigned to the system field SY-LILLI (absolute number of selected list
line). The system field SY-CPAGE contains the page number for the first
displayed line in the list. The selected line does not have to belong to this
page (in cases where several pages are displayed at the same time). The page
number may be of interest even with direct reading of lines (see READ LINE
).

The return code value is set as follows:

SY-SUBRC = 0
OK
SY_SUBRC = 4 Line does not exist
SY-SUBRC = 8 List does not
exist

Addition
… INDEX idx

Effect
Returns the attributes
of the list level idx (0, 1,2,3,…).

Example
After line selection,
determine the page number for the selected line (SY-LILLI) :

DATA:
PAGENUMBER LIKE SY-PAGNO. …

AT LINE-SELECTION.
DESCRIBE LIST LINE
SY-LILLI PAGE PAGENUMBER.

The variable PAGENUMBER now contains the
page number for the line SY-LILLI (i.e. the contents of the system field
SY-PAGNO when outputting the line SY-LILLI !).

Variant 4
DESCRIBE LIST
PAGE pag

Additions

1. … INDEX idx
2. … LINE-SIZE
col
3. … LINE-COUNT lin
4. … LINES lin
5. … FIRST-LINE lin
6.
… TOP-LINES lin
7. … TITLE-LINES lin
8. … HEAD-LINES lin
9. …
END-LINES lin

Effect
Returns the attributes of the page pag in the
list.

The return code value is set as follows:

SY-SUBRC = 0
OK
SY_SUBRC = 4 Page does not exist
SY-SUBRC = 8 List does not
exist

Addition 1
… INDEX idx

Effect
Returns the attributes
of the list level idx (0, 1,2,3,…).

Addition 2
… LINE-SIZE
col

Effect
Returns the line length for the page pag (see
NEW-PAGE…LINE-SIZE ).

Addition 3
… LINE-COUNT
lin

Effect
Returns the permitted number of lines for the page pag (see
NEW-PAGE…LINE-COUNT ).

Addition 4
… LINES
lin

Effect
Returns the number of lines output on the page pag
.

Addition 5
… FIRST-LINE lin

Effect
Returns the absolute
line number of the first line of the page pag .

Addition 6

TOP-LINES lin

Effect
Returns the number of lines output by page header
processing (i.e. standard title + column headers + TOP-OF-PAGE
).

Addition 7
… TITLE-LINES lin

Effect
Returns the number
of lines output as standard title lines by page header processing (see
NEW-PAGE…NO-TITLE/WITH-TITLE ).

Note
The value of TITLE-LINES is
contained in TOP-LINES .

Addition 8
… HEAD-LINES
lin

Effect
Returns the number of lines output as column headers by
page header processing (see NEW-PAGE…NO-HEADING/WITH-HEADING
).

Note
The value of HEAD-LINES is contained in TOP-LINES
.

Addition 9
… END-LINES lin

Effect
Returns the number of
lines reserved for end-of-page processing (see END-OF-PAGE
).

Example
Determine the number of lines output on the third page of
the basic list ( SY-LSIND = 0) in the event TOP-OF-PAGE :

DATA: TOP
TYPE I,
HEAD TYPE I,
TITLE TYPE I,
REAL_TOP TYPE I.

DESCRIBE
LIST INDEX 0 PAGE 3
TOP-LINES TOP
HEAD-LINES HEAD
TITLE-LINES
TITLE.

REAL_TOP = TOP – TITLE –
HEAD.

Examples
Determine the absolute number of lines in the
displayed list:

DATA: LN TYPE I, “number of lines on a page
FLN
TYPE I, “number of first line on a page
PN TYPE I, “number of a
page
LIST_LINES TYPE I. “total number of lines in list

Determine
number of last page:

DESCRIBE LIST NUMBER OF PAGES
PN.

Determine number of first line of last page and number of lines
on that page:

DESCRIBE LIST PAGE PN FIRST-LINE FLN LINES
LN.

Number of list lines = number of first line of last page + number
of lines – 1.

LIST_LINES = FLN + LN – 1.

Or: Count lines
of all pages in a loop:

CLEAR LIST_LINES.
DO PN TIMES.
DESCRIBE
LIST PAGE SY-INDEX LINES LN.
ADD LN TO
LIST_LINES.
ENDDO.

or:

DESCRIBE LIST NUMBER OF LINES
LIST_LINES.

DESCRIBE – Supply
attributes of a field

Basic form
DESCRIBE FIELD
f.

Effect
Supplies the attributes of the field f . You must specify at
least one of the additions:

Additions

1. … LENGTH len
2.
… TYPE typ
3. … TYPE typ COMPONENTS n
4. … OUTPUT-LENGTH len
5.
… DECIMALS n
6. … EDIT MASK mask

Addition 1
… LENGTH
len

Effect
Returns the length of the field f in the field
len
.

Example

DATA: FLD(8),
LEN TYPE P.
DESCRIBE FIELD FLD
LENGTH LEN.

Result: LEN contains the value 8.

Addition
2
… TYPE typ

Effect
Returns the data type of f in the field
typ

Example

DATA: FLD(8) TYPE N,
F_TYPE.
DESCRIBE FIELD FLD
TYPE F_TYPE.

Result: F_TYPE contains the value ‘N’ .

Note
Along
with the elementary data types you can specify under
DATA (C, N, etc.),
several other data types are created either
with reference to Dictionary
fields or during generation. These data
types, which are also returned by
DESCRIBE , have the following
type IDs:

h Internal table s 2-byte
integer with leading sign b 1-byte integer without leading sign u Structure
without internal table v Structure containing at least one internal table
For
compatibility reasons, … TYPE typ returns C rather than u or v with
structures.

Addition 3
… TYPE typ COMPONENTS
n

Effect
Similar to … TYPE typ except that, with structures in typ ,
u or v are returned and in the number of structure components is set in n . If f
is not a structure, n is set to 0.

Example
Recursive processing of the
pages of an ABAP/4 data structure:

FORM TEST USING F.
DATA: TYP(1)
TYPE C, N TYPE I.
FIELD-SYMBOLS: .
DO.
ASSIGN COMPONENT SY-INDEX OF
STRUCTURE F TO .
IF SY-SUBRC <> 0. EXIT. ENDIF.
DESCRIBE FIELD
TYPE TYP COMPONENTS N.
IF N > 0. ” Equivalent is TYP = ‘u’ OR TYP =
‘v’
PERFORM TEST USING .
ELSE.
PERFORM DO_SOMETHING USING
.
ENDIF.
ENDDO.
ENDFORM.

Addition 4

OUTPUT-LENGTH len

Effect
Enters the output length of the field f in
the variable len .

Example

DATA: FLD(4) TYPE P,
O_LEN TYPE
P.
DESCRIBE FIELD FLD OUTPUT-LENGTH O_LEN.

Result: O_LEN contains
the value 8.

Addition 5
… DECIMALS n

Effect
Enters the
number of decimal places for the field f (defined in addition … DECIMALS of
the DATA statement or in the ABAP/4 Dictionary ) in the variable n
.

Example

DATA: FLD(8) TYPE P DECIMALS 2,
DEC TYPE
P.
DESCRIBE FIELD FLD DECIMALS DEC.

Resultat: DEC contains the
value 2.

Addition 6
… EDIT MASK mask

Effect
If the field f
has a conversion routine in the ABAP/4 Dictionary , this is placed in the field
mask in the form ” ==conv “. ” conv ” stands for the name of the conversion
routine, e.g. ” ==ALPHA ” in the conversion routine ” ALPHA “. In this form,
mask can then be used in the addition USING EDIT MASK mask of the WRITE
statement.

Example
Check whether there is a conversion routine for the
field “customer number” in the table SBOOK :

TABLES SBOOK.
DATA:
CONV_EXIT(10).
DESCRIBE FIELD SBOOK-CUSTOMID EDIT MASK CONV_EXIT.
IF
CONV_EXIT <> SPACE. … ENDIF.

Result: CONV_EXIT contains the
value ” ==ALPHA “.

Note
If the required field is only known at
runtime, this field can also be assigned dynamically to a field symbol (see
FIELD-SYMBOLS , ASSIGN ).

More References