AT - Control break with internal tables
Variants
1. AT NEW f.
2. AT END OF f.
3. AT FIRST.
4. AT LAST.
Effect
In a LOOP which
processes a dataset created with
EXTRACT , you can use special control
structures for control break processing. All these structures begin
with AT and end with ENDAT . The
sequence of statements which lies between them is then executed if a
control break occurs.
You can use these key words for control break processing with extract
datasets only if the active LOOP statement is proceesing an
extract dataset.
The control level structure with extract datasets is dynamic. It
corresponds exactly to the sort key of the extract dataset, i.e. to the
order of fields in the field group HEADER by which the extract
dataset was sorted .
At the start of a new control level (i.e. immediately after AT ),
the following occurs in the output area of the current LOOP
statement:
-
All default key fields (on the right)
are filled with "*" after the current control level key.
-
All other fields (on the right) are set to their initial values after
the current control level key.
Between AT and ENDAT , you can use
SUM to insert the appropriate control
totals in the number fields (see also
ABAP/4 number types ) of the
LOOP output area (on the right) after the current control level
key. Summing is supported both at the beginning of a control level
( AT FIRST , AT NEW f ) and also the end of a control level
( AT END OF f , AT LAST ).
At the end of the control level processing (i.e. after ENDAT ),
the old contents of the LOOP output area are restored.
Notes
When calculating totals, you must ensure that the totals
are inserted into the same sub-fields of the LOOP output area as
those where the single values otherwise occur. If there is an overflow,
processing terminates with a runtime error.
If an internal table is processed only in a restricted form (using
the additions FROM , TO and/or WHERE with the
LOOP statement), you should not use the
control structures for control level processing because the interaction
of a restricted LOOP with the AT statement is currenly
not properly defined.
With LOOP s on extracts, there are
also special control break control structures
you can use.
Note
Runtime errors
-
SUM_OVERFLOW : Overflow when calculating totals with
SUM .
Variant 1
AT NEW f.
Variant 2
AT END OF f.
Effect
f is a sub-field of an internal table processed
with LOOP . The sequence of statements which follow it is
executed if the sub-field f or a sub-field in the current
LOOP line defined (on the left) before f has a differnt
value than in the preceding ( AT NEW ) or subsequent ( AT END
OF ) table line.
Example
-
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT NEW NAME.
NEW-PAGE.
WRITE / COMPANIES-NAME.
ENDAT.
WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.
AT END OF NAME.
SUM.
WRITE: / COMPANIES-NAME, COMPANIES-SALES.
ENDAT.
ENDLOOP.
The AT statements refer to the field COMPANIES-NAME .
Notes
If a control break criterion is not known until runtime,
you can use AT NEW (name) or AT END OF (name) to specify
it dynamically as the contents of the field name . If name
is blank at runtime, the control break criterion is ignored and the
sequence of statements is not executed. If name contains an
invalid component name, a runtime error occurs.
By defining an offset and/or length, you can further restrict control
break criteria - regardless of whether they are specified statically or
dynamically.
A field symbol pointing to the LOOP output area can also be
used as a dynamic control break criterion. If the field symbol does not
point to the LOOP output area, a runtime error occurs.
Note
Runtime errors
-
AT_BAD_PARTIAL_FIELD_ACCESS : Invalid sub-field access when
dynamically specifying the control break criterion.
-
AT_ITAB_FIELD_INVALID : When dynamically specifying the control
break criterion via a field symbol, the field symbol does not point to
the LOOP output area.
-
ITAB_ILLEGAL_COMPONENT : When dynamically specifying the
control break criterion via (name) the field name does
not contain a valid sub-field name.
Variant 3
AT FIRST.
Variant 4
AT LAST.
Effect
Executes the appropriate sequence of statements once
during the first ( AT FIRST ) or last ( AT LAST ) loop pass.
Example
-
DATA: BEGIN OF COMPANIES OCCURS 20,
NAME(30),
PRODUCT(20),
SALES TYPE I,
END OF COMPANIES.
...
LOOP AT COMPANIES.
AT FIRST.
SUM.
WRITE: 'Sum of all SALES:',
55 COMPANIES-SALES.
ENDAT.
WRITE: / COMPANIES-NAME, COMPANIES-PRODUCT,
55 COMPANIES-SALES.
ENDLOOP.
Index
© SAP AG 1996