ABAPDO_VARYING - DO VARYING
CPI1466 during Backup RFUMSV00 - Advance Return for Tax on Sales/PurchasesDiese Dokumentation steht unter dem Copyright der SAP AG.
DO - VARYING
Obsolete Syntax
DO ... VARYING dobj FROM dobj1 NEXT dobj2 [RANGE range]
[VARYING ...].
[statement_block]
ENDDO.
Wirkung
Der Zusatz VARYING weist einer Variablen dobj bei jedem Schleifendurchlauf einer DO-Schleife einen neuen Wert zu. Er kann in einer DO-Anweisung mehrmals verwendet werden.
dobj1 und dobj2 sind die ersten beiden Datenobjekte einer Folge von Datenobjekten, die im Speicher den gleichen Abstand voneinander haben. Der Datentyp der Datenobjekte dobj, dobj1 und dobj2 mussflach sein.
In Unicode-Programmen müssen dobj, dobj1 und dobj2kompatibelsein. Darüber hinaus müssen dobj1 und dobj2 in Unicode-Programmen entwederStrukturkomponenten sein, die zur gleichen Struktur gehören, oder durch Offset-/Längenangaben spezifizierte Teilbereiche des gleichen Datenobjekts.
Im ersten Schleifendurchlauf wird dobj der Inhalt des Datenobjekts dobj1 zugewiesen, imzweiten Schleifendurchlauf dann der Inhalt des Datenobjekts dobj2. In den folgenden Schleifendurchläufenwird dobj der Inhalt des Datenobjekts zugewiesen, das im Speicher den gleichen Abstand zum jeweils zuvor zugewiesenen Datenobjekt hat, wie dobj2 zu dobj1. Dabei findet keine Typkonvertierung statt.
Falls der Verarbeitungsblock ordnungsgemäß über ENDDO, CHECKoder EXIT verlassenwird, wird der Inhalt der Variablen dobj am Ende des Schleifendurchlaufs an das zuvor zugewieseneDatenobjekt dobj1 bzw. dobj2 ohne Konvertierung zugewiesen. Bei einem Verlassen überandere Anweisungen wie RETURNoder RAISE EXCEPTION findet keine Zuweisung statt.
Der Zusatz RANGE legt den Speicherbereich fest, der mit dem Zusatz VARYING bearbeitetwerden kann. Hinter RANGE kann ein elementares Datenobjekt range vom Typ c, n,x oder eine Struktur angegeben werden. Der Speicherbereich von range muss den von dobj1 und dobj2 umfassen. BeitiefenStrukturen sind die tiefen Komponenten aus dem erlaubten Bereich ausgenommen. Die DO-Schleifemuss vor dem Zugriff auf unerlaubte Speicherbereiche, d.h. auf Bereiche außerhalb von range oder auf dessen tiefe Komponenten, beendet werden, ansonsten kommt es zu einer unbehandelbaren Ausnahme.
Wenn RANGE nicht explizit angegeben ist, wird der erlaubte Speicherbereich wie folgt festgelegt:
- In Nicht-Unicode-Programmen reicht der erlaubte Speicherbereich von dobj1 bis zur Grenze des aktuellenDatenbereichsdes ABAP-Programms. Ohne Angabe des RANGE-Zusatzes besteht die Gefahr ungewollter Speicherüberschreibung.
- In Unicode-Programmenkann RANGE nur weggelassen werden, wenn statisch erkennbar ist, dass dobj1 und dobj2Komponenten der gleichen Struktur sind. Dann wird der erlaubte Speicherbereich aus der kleinsten Unterstruktur bestimmt, die dobj1 und dobj2 enthält.
Hinweis
Statt dem Zusatz VARYING sollte in der Schleife die Anweisung ASSIGNmit dem Zusatz INCREMENT verwendet werden.
Beispiel
In der ersten DO-Schleife werden über Offset-/Längenzugriffe Teilbereiche des Datenobjektstext bearbeitet. Hier muss in Unicode-Programmen der Zusatz RANGE angegeben werden. Inder zweiten DO-Schleife wird auf die Komponenten des Datenobjekts text zugegriffen. Hierist die Angabe von RANGE nicht notwendig. Die dritte DO-Schleife zeigt, wie die Funktionalitätder zweiten Schleife unter Verwendung der Anweisung ASSIGN INCREMENT programmiert werden kann.
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.
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.
WRITE: char1, char2.
char1 = 'x'.
char2 = 'y'.
ENDDO.
DO 4 TIMES VARYING word FROM text-word1 NEXT text-word2.
WRITE / word.
ENDDO.
DO.
inc = sy-index - 1.
ASSIGN text-word1 INCREMENT inc TO <word> RANGE text.
IF sy-subrc = 0.
WRITE / <word>.
ELSE.
EXIT.
ENDIF.
ENDDO.
Ausnahmen
Unbehandelbare Ausnahmen
- Ursache: Unzulässiger Zugriff auftiefe Komponenten innerhalb des Bereichs, der durch den RANGE-Zusatz angegeben ist.
Laufzeitfehler: DO_WHILE_VARY_ILLEGAL_ACCESS - Ursache: Zugriff auf Daten außerhalb des Bereichs, der durch den RANGE-Zusatz angegeben ist.
Laufzeitfehler: DO_WHILE_VARY_NOT_IN_RANGE
ROGBILLS - Synchronize billing plans RFUMSV00 - Advance Return for Tax on Sales/Purchases
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 8658 Date: 20120526 Time: 195442 triton ( 250 ms )






