Ansicht
Dokumentation

ABAPDO_VARYING - DO VARYING

ABAPDO_VARYING - DO VARYING

BAL_S_LOG - Application Log: Log header data   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

DO, VARYING

Kurzreferenz



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. Die Datentypen von dobj, dobj1 und dobj2 müssen flach und miteinander kompatibel sein. Bei dobj1 und dobj2 muss es sich um Teile eines flachen Datenobjekts handeln. Dies sind entweder Strukturkomponenten der gleichen Struktur, oder durch Offset-/Längenangaben spezifizierte Teilbereiche des gleichen Datenobjekts.

Im ersten Schleifendurchlauf wird dobj der Inhalt des Datenobjekts dobj1 zugewiesen, im zweiten Schleifendurchlauf dann der Inhalt des Datenobjekts dobj2. In den folgenden Schleifendurchläufen wird 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, CHECK oder EXIT verlassen wird, wird der Inhalt der Variablen dobj am Ende des Schleifendurchlaufs an das zuvor zugewiesene Datenobjekt dobj1 bzw. dobj2 ohne Konvertierung zugewiesen. Bei einem Verlassen über andere Anweisungen wie RETURN oder RAISE EXCEPTION findet keine Zuweisung statt.

Der Zusatz RANGE legt den Speicherbereich fest, der mit dem Zusatz VARYING bearbeitet werden 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. Bei tiefen Strukturen sind die tiefen Komponenten aus dem erlaubten Bereich ausgenommen. Die DO-Schleife muss 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.

Der Zusatz RANGE kann nur weggelassen werden, wenn statisch erkennbar ist, dass dobj1 und dobj2 Komponenten der gleichen Struktur sind. Dann wird der erlaubte Speicherbereich aus der kleinsten Unterstruktur bestimmt, die dobj1 und dobj2 enthält.

Hinweise

  • Die Funktion des Zusatzes VARYING hängt vom internen Aufbau des Arbeitsspeichers ab, der beispielsweise von Ausrichtungslücken beeinflusst werden kann.
  • Statt dem Zusatz VARYING sollte in der Schleife die Anweisung ASSIGN mit dem Zusatz INCREMENT verwendet werden.

Beispiel

In der ersten DO-Schleife werden über Offset-/Längenzugriffe Teilbereiche des Datenobjekts text bearbeitet. Hier muss der Zusatz RANGE angegeben werden. In der zweiten DO-Schleife wird auf die Komponenten des Datenobjekts text zugegriffen. Hier ist die Angabe von RANGE nicht notwendig. Die dritte DO-Schleife zeigt, wie die Funktionalität der zweiten Schleife unter Verwendung der Anweisung ASSIGN INCREMENT programmiert werden kann.

Ausnahmen

Unbehandelbare Ausnahmen

  • Ursache: Unzulässiger Zugriff auf tiefe 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






PERFORM Short Reference   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5653 Date: 20240426 Time: 151127     sap01-206 ( 112 ms )