dobj2 is from dobj1 . There is no type conversion.
If the processing block is exited
correctly using ENDDO , CHECK , or
EXIT , the content of the variable dobj
at the end of the loop pass is assigned to the previously assigned
data object dobj1 or dobj2 without conversion. If it is
exited using another statement, such as RETURN
or RAISE EXCEPTION , no
conversion takes place.
The addition RANGE defines the memory area that can be
processed using the addition VARYING . After RANGE , an
elementary data object range of type c , n , or x
, or a structure can be specified. The memory area of range
must include the ranges of dobj1 and dobj2 . In
deep structures, the deep components are
exceptions to the permitted area. The DO loop must be ended
before non-permitted memory areas are accessed, that is, areas outside
of range or their deep components. Otherwise an unhandleable
exception is raised.
If RANGE is not explicitly specified, the permitted memory area
is determined as follows:
In non-Unicode programs , the
permitted memory area of dobj1 extends to the limit of the
current data area of the ABAP program. If
the RANGE addition is not specified, there is a danger of
unintentionally overwriting the memory.
In Unicode programs , RANGE
can only be omitted if it can be statically determined that dobj1
and dobj2 are components of the same structure. The permitted
memory area is then determined from the smallest substructure that
contains dobj1 and dobj2 .
Latest notes: Instead of the addition VARYING , the statement
ASSIGN should be used in the loop with the
addition INCREMENT .
Example ABAP Coding In the first DO loop, subareas of the data object
text are edited using offset/length access. In Unicode programs,
the addition RANGE must be specified here. In the second DO
loop, the program accesses the components of the data object
text . In this case, it is not necessary to specify RANGE . The
third DO loop shows how the functions of the second loop can be
programmed using the statement
ASSIGN INCREMENT .
DATA: BEGIN OF text,
word1 TYPE c LENGTH 4 VALUE 'AAAA',
word2 TYPE c LENGTH 4 VALUE 'BBBB',
word3 TYPE c LENGTH 4 VALUE 'CCCC',
word4 TYPE c LENGTH 4 VALUE 'DDDD',
END OF text.
DATA: word TYPE c LENGTH 4,
char1 TYPE c LENGTH 1,
char2 TYPE c LENGTH 1,
leng TYPE i.
FIELD-SYMBOLS <(><<)>word> LIKE text-word1.
DATA inc TYPE i.
DESCRIBE FIELD text LENGTH leng IN CHARACTER MODE.
leng = leng / 2.
cl_demo_output=>begin_section( `First Loop` ).
DO leng TIMES VARYING char1 FROM text(1)
NEXT text+2(1) RANGE text
VARYING char2 FROM text+1(1)
NEXT text+3(1) RANGE text.
cl_demo_output=>write( |{ char1 } { char2 }| ).
char1 = 'x'.
char2 = 'y'.
ENDDO.
cl_demo_output=>next_section( `Second Loop` ).
DO 4 TIMES VARYING word FROM text-word1 NEXT text-word2.
cl_demo_output=>write( word ).
ENDDO.
cl_demo_output=>next_section( `Third Loop` ).
DO.
inc = sy-index - 1.
ASSIGN text-word1 INCREMENT inc TO <(><<)>word> RANGE text.
IF sy-subrc = 0.
cl_demo_output=>write( <(><<)>word> ).
ELSE.
EXIT.
ENDIF.
ENDDO.
cl_demo_output=>display( ).
Runtime Exceptions
Non-catchable Exceptions
Reason for error: Invalid access to deep
components within the area specified by the RANGE -addition.
Runtime error: DO_WHILE_VARY_ILLEGAL_ACCESS
Reason for error: Access to data outside the range specified by the
RANGE addition.
Runtime error: DO_WHILE_VARY_NOT_IN_RANGE
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved