Ansicht
Dokumentation

ABAPASSIGN_RANGE - ASSIGN RANGE

ABAPASSIGN_RANGE - ASSIGN RANGE

RFUMSV00 - Advance Return for Tax on Sales/Purchases   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ASSIGN, range_spec

Kurzreferenz



... ${ $}
  $| ${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 Bereichsgrenzen zu. Wenn das Feldsymbol <fs> in einer folgenden ASSIGN-Anweisung selbst zur Spezifizierung eines Speicherbereichs mem_area verwendet wird, werden die zugeordneten Bereichsgrenzen zur Bestimmung der Bereichsgrenzen des Feldsymbols verwendet, an das die Zuweisung erfolgt.

Hinweis

Die einem Feldsymbol durch range_spec zugewiesenen Bereichsgrenzen gelten nur für nachfolgende ASSIGN-Anweisungen. In anderen Anweisungen gelten mit Ausnahme von ADD UNTIL die allgemeinen Regeln.

Alternative 1

... ${ $}


Wirkung

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

  • Falls für dobj in mem_area ein elementares Datenobjekt angegeben ist, bestimmt der Speicherbereich dieses Datenobjekts die Bereichsgrenzen.
  • Falls für dobj in mem_area ein 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_area eine Struktur oder ein Feldsymbol angegeben ist, das auf eine Struktur zeigt, wird überprüft, ob die Struktur ein zeichenartiges Anfangsstück (bis zur ersten Ausrichtungslücke) hat, und dieses bestimmt die Bereichsgrenzen.

Falls diese Bereichsgrenzen überschritten werden, ist bei der statischen Variante von mem_area nach der ASSIGN-Anweisung kein Speicherbereich zugewiesen (der Prädikatausdruck <fs> IS ASSIGNED ist falsch), während bei den dynamischen Varianten sy-subrc auf 4 gesetzt ist.

In der ersten ASSIGN-Anweisung werden fs1> die Bereichsgrenzen des Datenobjekts text zugeordnet. In der zweiten ASSIGN-Anweisung übernimmt fs2> diese Grenzen. Ab dem sechsten Schleifendurchlauf wird versucht, fs2> einen größeren Speicherbereich zuzuordnen, wodurch der logische Ausdruck hinter IF nicht mehr wahr ist.

In der ersten ASSIGN-Anweisung werden fs1> die Bereichsgrenzen des Datenobjekts text zugeordnet. In der zweiten ASSIGN-Anweisung übernimmt fs2> diese Grenzen. Ab dem sechsten Schleifendurchlauf wird versucht, fs2> einen größeren Speicherbereich zuzuordnen, wodurch der logische Ausdruck hinter IF nicht mehr wahr ist.

Alternative 2

... RANGE range


Wirkung

Falls in range_spec der Zusatz RANGE angegeben ist, werden die Bereichsgrenzen durch den Datenbereich eines Datenobjekts range festgelegt. Für range muss ein Datenobjekt beliebigen Datentyps 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 Datenobjekts range zugewiesen werden. Falls diese Bereichsgrenzen überschritten werden, ist bei der statischen Variante von mem_area nach der ASSIGN-Anweisung kein Speicherbereich zugewiesen (der Prädikatausdruck <fs> IS ASSIGNED ist falsch), während bei den dynamischen Varianten sy-subrc auf 4 gesetzt ist.

Der Zusatz RANGE kann nicht zusammen mit dem Zusatz CASTING TYPE HANDLE und nicht bei der Zuweisung von Tabellenausdrücken verwendet werden.

Hinweise

  • Ein RANGE-Zusatz hebt nicht die typspezifischen Regeln für Teilfeldzugriffe auf. Damit ein Teilfeldzugriff über die Feldgrenzen eines angegebenen Datenobjekts dobj hinaus möglich ist, muss der Teilfeldzugriff prinzipiell möglich sein. Insbesondere kann nie ein Teilfeldzugriff über die Grenzen einer Struktur hinweg stattfinden, da dann nicht auf das zeichenartige Anfangsstück zugegriffen würde.
  • Wenn für range eine Struktur angegeben ist, die dynamische Datenobjekte enthält, tragen diese immer nur mit der internen Referenz zum Datenbereich der Struktur bei. Der eigentliche Datenbereich der dynamischen Datenobjekte ist ausgelagert und spielt für RANGE keine Rolle. Dies gilt auch für Unterstrukturen, die als Boxed 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 Speicherbereich durch den gemeinsamen Namen der ersten beiden Komponenten comp1 in der Struktur struc und die Angabe von INCREMENT bestimmt wird. Ohne den RANGE-Zusatz würde die WHILE-Schleife nur ein einziges Mal durchlaufen, da nur auf den Speicherbereich von struc-comp1 zugegriffen werden kann. Mit dem RANGE-Zusatz wird die Schleife fünfmal durchlaufen. Nach der Zuweisung kann auf die Komponenten des Feldsymbols zugegriffen werden.






rdisp/max_wprun_time - Maximum work process run time   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8294 Date: 20240329 Time: 011114     sap01-206 ( 157 ms )