sapdev logo background
sapdev logo sapdev logo
Comments

ABAP ASSIGN RANGE Statement syntax, information and example SAP source code



Return to Statement index



ASSIGN - range_spec

Short Reference

ABAP Syntax ... { }
| {RANGE range}.

ABAP_ALTERNATIVES:
1 ... { }
2 ... RANGE range

What does it do? The range_spec specification defines the area limits within which a memory area can be assigned to the field symbol. Either nothing can be specified here or the addition RANGE .
At the same time, the ASSIGN statement assigns these area limits to the field symbol fs . If the field symbol fs is itself used in a subsequent ASSIGN statement to specify a memory area mem_area , the assigned memory areas in Unicode programs are used for determining the area limits of the field symbol that is being assigned (see below).

Latest notes: The area limits assigned to a field symbol using
range_spec only apply to the following ASSIGN statements. In other statements, with the exception of ADD UNTIL , the general rules apply.

ABAP_ALTERNATIVE_1 ... { }

What does it do?
Effect in Unicode Programs
If no value is specified for range_spec , the area limits in Unicode programs are defined as follows:
If an elementary data object was specified for dobj in mem_area , the memory area of this data object determines the area limits.

If a field symbol was specified for dobj in mem_area , and this field symbol has an elementary data object assigned to it, the field symbol fs of the current statement takes on the area limits assigned to this field symbol.

If a structure or a field symbol was specified for dobj in mem_area , and one of these points to a structure, the system checks whether the structure has a character-like initial part (up to the first alignment gap ). This then determines the area limits.
If these area limits are exceeded, no memory area is assigned for the static variant of mem_area after the ASSIGN statement. Also, the predicate expression fs IS ASSIGNED is incorrect, while sy-subrc is set to 4 in the dynamic variant.
Effect in Non-Unicode Programs
If no value is specified for range_spec , the area limits in non-Unicode programs are defined as follows:
If the name of a data object is specified directly in the when the memory area mem_area is specified statically, the area limits are determined by the data area of the ABAP program.

If the name of a data object is specified dynamically for the specification of the memory area mem_area
, the area limits are determined by the dynamically specified data object.
If these area limits are exceeded, an unhandleable exception is raised.

Latest notes: If the area limits are the same as the data area of the ABAP program, this data area must also contain the administration information for deep data objects because otherwise errors could occur if these are exceeded unintentionally.

Example ABAP Coding In the first ASSIGN statement, the area limits of the data object text are assigned to fs1 . In the second ASSIGN statement, fs2 takes on these limits. From the sixth loop pass, the system attempts to assign a larger memory area to fs2 . In Unicode programs, the logical expression after IF is no longer true, whereas in non-Unicode programs, the larger memory area is assigned.
DATA text TYPE c LENGTH 8 VALUE '12345678'.

FIELD-SYMBOLS: <(><<)>fs1> TYPE ANY,
<(><<)>fs2> TYPE ANY.

ASSIGN text+3(3) TO <(><<)>fs1>.

DO 8 TIMES.
ASSIGN <(><<)>fs1>(sy-index) TO <(><<)>fs2>.
IF <(><<)>fs2> IS ASSIGNED.
cl_demo_output=>write_text( |{ <(><<)>fs2> }| ).
ENDIF.
ENDDO.
cl_demo_output=>display( ).

ABAP_ALTERNATIVE_2 ... RANGE range

What does it do? If the RANGE addition is specified in
range_spec , the area limits are defined by the data area of a range data object. range expects a data object of any data type. It must cover the area limits in Unicode programs when the RANGE addition is not specified (see above). If it is established at runtime that range
does not cover these area limits, an unhandleable exception is raised.
When the RANGE addition is used, only subareas of the range
data object can be assigned to the field symbol. If these area limits are exceeded, no memory area is assigned for the static variant of mem_area after the ASSIGN statement. Also, the predicate expression fs IS ASSIGNED is incorrect, while sy-subrc is set to 4 in the dynamic variant.
The addition RANGE cannot be used with the addition CASTING TYPE HANDLE or for assigning table expressions .

Latest notes: A RANGE addition does not remove the type-specific rules for substring accesses . To enable substring access beyond the field limits of a specified data object
dobj , substring access must be possible in principle. In particular, substring access is never possible beyond the limits of a structure in a Unicode program, since the character-like initial part is not accessed in this case.
If a structure is specified for range that contains dynamic data objects , they only contribute the internal reference to the data area of the structure. The actual data area of the dynamic data objects is outsourced and is of no significance for RANGE . This also applies to substructures that are declared as boxed component s
.

Example ABAP Coding The struc structure is constructed from ten components col1_1 , col2_1 , ..., col1_5 , col2_5
. The ASSIGN statement assigns the memory area of two neighboring components to the structure-typed field symbol <(>
sub , one after the other. Here the memory area is determined by the common name of the first two components comp1 in the structure struc and the specification of INCREMENT . Without the RANGE addition, the WHILE loop would only execute once in Unicode programs since it would only be possible to access the memory area of struc-comp1 . The RANGE addition causes the loop to be passed five times. The components of the field symbol can be accessed after the assignment.
TYPES: BEGIN OF sub_struc,
col1 TYPE c LENGTH 10,
col2 TYPE c LENGTH 10,
END OF sub_struc.

DATA BEGIN OF struc.
INCLUDE TYPE: sub_struc AS comp1 RENAMING WITH SUFFIX _1,
sub_struc AS comp2 RENAMING WITH SUFFIX _2,
sub_struc AS comp3 RENAMING WITH SUFFIX _3,
sub_struc AS comp4 RENAMING WITH SUFFIX _4,
sub_struc AS comp5 RENAMING WITH SUFFIX _5.
DATA END OF struc.

FIELD-SYMBOLS <(><<)>sub> TYPE sub_struc.

struc = VALUE #( col1_1 = 'col1_1' col2_1 = 'col2_1'
col1_2 = 'col1_2' col2_2 = 'col2_2'
col1_3 = 'col1_3' col2_3 = 'col2_3'
col1_4 = 'col1_4' col2_4 = 'col2_4'
col1_5 = 'col1_5' col2_5 = 'col2_5' ).

DATA inc TYPE i.

WHILE sy-subrc = 0.
inc = sy-index - 1.
ASSIGN struc-comp1 INCREMENT inc TO <(><<)>sub> CASTING
RANGE struc.
IF sy-subrc = 0.
cl_demo_output=>write_data( <(><<)>sub> ).
ENDIF.
ENDWHILE.
cl_demo_output=>display( ).
Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved




ASSIGN_MEM_AREA_WRITABLE_EXP
ASSIGN_TABLE_FIELD




comments powered by Disqus