ABAPASSIGN_RANGE - ASSIGN RANGE

TXBHW - Original Tax Base Amount in Local Currency   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
This documentation is copyright by SAP AG.

ASSIGN - range_spec

Short Reference



Syntax

... { }
  | {RANGE range}.

Alternatives:

1. ... { }

2. ... RANGE range

Effect

The range_spec specification defines the area limits within which a storage area can be assigned to the field symbol. Either there is no specification or you specify the RANGE addition.

At the same time, the statement ASSIGN assigns these area limits to the field symbol <fs>.If the field symbol <fs> is itself used in a subsequent ASSIGN statement to specifya storage area mem_area, the assigned storage areas inUnicodeprograms are used for determining the area limits of the field symbol that is followed by the assignment (see below).

Note

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

Alternative 1

... { }


Effect

Effect in Unicode Programs

If there is no specification made for range_spec, the area limits inUnicode programs are defined as follows:

  • If you have specified an elementary data object for dobj in mem_area,the storage area of this data object determines the area limits.

  • If you have specified a field symbol 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 you have a structure or a field symbol specified for dobj in mem_area,and one of these points to a structure, the system checks whether the structure has a character-type initial section (up to the firstalignment gap). This then determines the area limits.

If these area limits are exceeded, no storage area is assigned for the static variant of mem_areaafter the ASSIGN statement. Also, the logical expression <fs>IS ASSIGNED is incorrect, while sy-subrc is set to 4 in the dynamic variant

Effect in Non-Unicode Programs

If no specification is made for range_spec, the area limits innon-Unicode programs are defined as follows:

  • If the name of a data object is not specified directly in the specification of the storage area mem_area, , the area limits are determined by thedata area of the ABAP program.

  • If the name of a data object is specified dynamically for the specification of the storage area mem_area, the area limits are determined by the dynamically specified data object.

If these area limits are exceeded, an exception that cannot be handled will be triggered.

Notes

  • If the area limits are the same as the data area of the ABAP program, you must ensure that this data area also contains the administration information fordeep data objects because otherwise errors could occur if these are exceeded unintentionally.
  • Up to Release 6.10, the specification of range_spec was not possible. The area limits were independent of the name of the data object and were determined by thedataarea of the ABAP program. If the data area of the ABAP program has been exceeded, it can trigger an exception that cannot be handled.


Example

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. Startingfrom the second loop run, the system will attempt to assign a larger storage area to <fs2>.However, in Unicode programs, the logical expression after IF is no longer true, while in non-Unicode programs the larger storage 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.
    WRITE / <fs2>.
  ENDIF.
ENDDO.

Alternative 2

... RANGE range


Effect

If the RANGE addition is specified in range_spec, the area limits are limited by thedataarea of a data object range. For range, a data object of any data type must be specified.It must cover the area limits that result in Unicode programs if the RANGE addition is not specified(see above). If the runtime is defined so that range does not cover these area limits, an exception that cannot be handled can be triggered.

If the RANGE addition is used, only subareas of the range data object can be assignedto the field symbol. If these area limits are exceeded, no storage area is assigned in the static variantof mem_areaafter the ASSIGN statement (the logical expression <fs>IS ASSIGNED is incorrect), while sy-subrc is set to 4 in the dynamic variants.

Note

If a structure is specified for range that containsdynamicdata objects, they only contribute the internal reference to the data area of the structure. Theactual data area of the dynamic data objects is out sourced and plays no roll for RANGE. This also applies for substructures that are declared asboxed components.

Example

The struc structure is built from ten components col1_1, col2_1, ..., col1_5,col2_5. The ASSIGN statement assigns the storage area of two neighboring components tothe structure-typed field symbol <sub>, one after the other. Here the storage area is determinedby the common name of the first two components comp1 in the structure struc and the specificationof INCREMENT. Without the RANGE addition, the WHILE loop would only run once inUnicode programs since it would only be possible to access the storage area of struc-comp1. Theloop is run through five times with the RANGE addition. After the assignment, the system can access the components of the field symbol.

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.

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.
    WRITE: <sub>-col1, <sub>-col2 ...
  ENDIF.
ENDWHILE.


SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Material Data  
This documentation is copyright by SAP AG.


Length: 10954 Date: 20120518 Time: 192813     triton ( 297 ms )