ABAPASSIGN_RANGE - ASSIGN RANGE

General Material Data   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

ASSIGN - range_spec

Kurzreferenz



Syntax

... { }
  | {RANGE range}.

Alternativen:

1. ... { }

2. ... RANGE range

Wirkung

Die Angabe range_spec legt die Bereichsgrenzen fest, innerhalb derer dem Feldsymbol ein Speicherbereich zugewiesen werden kann. Es kann entweder keine Angabe gemacht oder der Zusatz RANGE angegeben werden.

Gleichzeitig ordnet die Anweisung ASSIGN dem Feldsymbol <fs> diese Bereichsgrenzenzu. Wenn das Feldsymbol <fs> in einer folgenden ASSIGN-Anweisung selbst zur Spezifizierungeines Speicherbereichs mem_area verwendet wird, werden inUnicode-Programmendie zugeordneten Bereichsgrenzen zur Bestimmung der Bereichsgrenzen des Feldsymbols verwendet, an das die Zuweisung erfolgt (siehe unten).

Hinweis

Die einem Feldsymbol durch range_spec zugewiesenen Bereichsgrenzen gelten nur für nachfolgendeASSIGN-Anweisungen. In anderen Anweisungen gelten mit Ausnahme von ADD UNTIL dieallgemeinen Regeln.

Alternative 1

... { }


Wirkung

Wirkung in Unicode-Programmen

Falls für range_spec keine Angabe gemacht wird, werden die Bereichsgrenzen inUnicode-Programmen wie folgt festgelegt:

  • Falls für dobj in mem_areaein elementares Datenobjekt angegeben ist, bestimmt der Speicherbereich dieses Datenobjekts die Bereichsgrenzen.

  • Falls für dobj in mem_areaein Feldsymbol angegeben ist, dem ein elementares Datenobjekt zugewiesen ist, übernimmt das Feldsymbol <fs> der aktuellen Anweisung die diesem Feldsymbol zugeordneten Bereichsgrenzen.

  • Falls für dobj in mem_areaeine Struktur oder ein Feldsymbol angegeben ist, das auf eine Struktur zeigt, wird überprüft, ob die Struktur ein zeichenartiges Anfangsstück (bis zur erstenAusrichtungslücke) hat, und dieses bestimmt die Bereichsgrenzen.

Falls diese Bereichsgrenzen überschritten werden, ist bei der statischen Variante von mem_areanach der ASSIGN-Anweisung kein Speicherbereich zugewiesen und der logische Ausdruck <fs>IS ASSIGNED ist falsch, während bei den dynamischen Varianten sy-subrc auf 4 gesetzt ist.

Wirkung in Nicht-Unicode-Programmen

Falls für range_spec keine Angabe gemacht wird, werden die Bereichsgrenzen inNicht-Unicode-Programmen wie folgt festgelegt:

  • Falls bei der Angabe des Speicherbereichs mem_area der Name eines Datenobjekts direkt angegeben wird, werden die Bereichsgrenzen durch denDatenbereich des ABAP-Programms bestimmt.

  • Falls bei der Angabe des Speicherbereichs mem_areader Name eines Datenobjekts dynamisch angegeben wird, werden die Bereichsgrenzen durch das dynamisch angegebene Datenobjekt bestimmt.

Falls diese Bereichsgrenzen überschritten werden, kommt es zu einer unbehandelbaren Ausnahme.

Hinweise

  • Wenn die Bereichsgrenzen gleichbedeutend mit dem Datenbereich des ABAP-Programms sind, ist zu beachten, dass dieser Datenbereich auch die Verwaltungsinformationen fürtiefeDatenobjekte enthält, sodass es zu Fehlern durch deren unbeabsichtigtes Überschreiben kommen kann.
  • Vor Release 6.10 war die Angabe von range_spec nicht möglich. Die Bereichsgrenzen wurden unabhängig davon, wie der Name des Datenobjekts angegeben wurde, durch denDatenbereichdes ABAP-Programms bestimmt. Falls der Datenbereich des ABAP-Programms überschritten wurde, kam es zu einer unbehandelbaren Ausnahme.


Beispiel

In der ersten ASSIGN-Anweisung werden <fs1> die Bereichsgrenzen des Datenobjektstext zugeordnet. In der zweiten ASSIGN-Anweisung übernimmt <fs2> dieseGrenzen. Ab dem sechsten Schleifendurchlauf wird versucht, <fs2> einen größerenSpeicherbereich zuzuordnen, wodurch in Unicode-Programmen der logische Ausdruck hinter IF nicht mehr wahr ist, während in Nicht-Unicode-Programmen der größere Speicherbereich zugeordnet wird.

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


Wirkung

Falls in range_spec der Zusatz RANGE angegeben ist, werden die Bereichsgrenzen durch denDatenbereicheines Datenobjekts range eingeschränkt. Für range muss ein Datenobjekt beliebigenDatentyps angegeben werden, das die Bereichsgrenzen umfasst, die sich in Unicode-Programmen ergeben,wenn der Zusatz RANGE nicht angegeben ist (siehe oben). Falls zur Laufzeit festgestellt wird, dass range diese Bereichsgrenzen nicht umfasst, kommt es zu einer behandelbaren Ausnahme.

Bei Verwendung des RANGE-Zusatzes können dem Feldsymbol nur Teilbereiche des Datenobjektsrange zugewiesen werden. Falls diese Bereichsgrenzen überschritten werden, ist bei derstatischen Variante von mem_areanach der ASSIGN-Anweisung kein Speicherbereich zugewiesen (der logische Ausdruck <fs>IS ASSIGNED ist falsch), während bei den dynamischen Varianten sy-subrc auf 4 gesetzt ist.

Hinweis

Wenn für range eine Struktur angegeben ist, diedynamischeDatenobjekte enthält, tragen diese immer nur mit der internen Referenz zum Datenbereich derStruktur bei. Der eigentliche Datenbereich der dynamischen Datenobjekte ist ausgelagert und spielt für RANGE keine Rolle. Dies gilt auch für Unterstrukturen, die alsBoxed Components deklariert sind.

Beispiel

Die Struktur struc ist aus zehn Komponenten col1_1, col2_1, ..., col1_5,col2_5 aufgebaut. Die ASSIGN-Anweisung weist dem strukturiert typisierten Feldsymbol <sub>nacheinander jeweils den Speicherbereich zweier benachbarter Komponenten zu, wobei der Speicherbereichdurch den gemeinsamen Namen der ersten beiden Komponenten comp1 in der Struktur strucund die Angabe von INCREMENT bestimmt wird. Ohne den RANGE-Zusatz würde die WHILE-Schleifein Unicode-Programmen nur ein einziges Mal durchlaufen, da nur auf den Speicherbereich von struc-comp1zugegriffen werden kann. Mit dem RANGE-Zusatz wird die Schleife fünfmal durchlaufen. Nach der Zuweisung kann auf die Komponenten des Feldsymbols zugegriffen werden.

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.


CPI1466 during Backup   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 11574 Date: 20120526 Time: 231821     triton ( 272 ms )