LOOP AT...ASSIGNING FIELDS-SYMBOL

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Jetzt habe ich da diesen Code-Schnipsel

Code: Alles auswählen.

LOOP AT returndata ASSIGNING FIELD-SYMBOL(<return>).
* mach was 
ENDLOOP. 
Ganz toll.

Wenig später im Code wird wieder eine Returntabelle ausgelesen.
Also:

Code: Alles auswählen.

LOOP AT returndata ASSIGNING FIELD-SYMBOL(<return>).
* mach was 
ENDLOOP. 
Jetzt geht dasselbe FIELD-SYMBOL <return> nicht zweimal. Aber ich kann leider auch nicht sicher wissen, ob schon beim ersten Mal das LOOP durchlaufen und <return> zugewiesen wird.

Also zweimal ASSIGNING FIELD-SYMBOL(<return>) geht nicht, einmal ASSIGNING FIELD-SYMBOL(<return>) und einmal ASSIGNING <return> geht aber auch nicht, weil unsicher.

Also zur Sicherheit: einmal ASSIGNING FIELD-SYMBOL(<return>) und beim 2. Mal ASSIGNING FIELD-SYMBOL(<return2>).
Das ist doch doof. Gibt es da nicht eine schlauere Lösung?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
Glaube das wird zur Compilezeit generiert und steht dann zur Verfügung, ist genau so wie mit DATA, das kann auch ganz unten stehen und wird trotzdem auch oben erkannt. Man muss nur aufpassen wenn man das selbe FS für verschiedene Tabellen benutzt, besser ist FS nicht zu mischen sondern eindeutig zuzuweisen.

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Also zweimal ASSIGNING FIELD-SYMBOL(<return>) geht nicht, einmal ASSIGNING FIELD-SYMBOL(<return>) und einmal ASSIGNING <return> geht aber auch nicht, weil unsicher.
Der Loop weißt das Feld-Symbol immer neu zu egal ob es vorher schon einmal verwendet wurde oder nicht. Innerhalb des Loops ist es immer zugewiesen.

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von ewx (Top Expert / 4845 / 311 / 640 ) »
PeterPaletti hat geschrieben:
29.03.2022 12:25
Also zweimal ASSIGNING FIELD-SYMBOL(<return>) geht nicht, einmal ASSIGNING FIELD-SYMBOL(<return>) und einmal ASSIGNING <return> geht aber auch nicht, weil unsicher.
was ist daran "unsicher"?
PeterPaletti hat geschrieben:
29.03.2022 12:25
Also zur Sicherheit: einmal ASSIGNING FIELD-SYMBOL(<return>) und beim 2. Mal ASSIGNING FIELD-SYMBOL(<return2>).
Das ist doch doof. Gibt es da nicht eine schlauere Lösung?
SAP empfiehlt, separate Feld-symbole zu benutzen.

Willst du das Feldsymbol später - also außerhalb des LOOP - noch mal prüfen, musst eh prüfen, ob es zugewiesen ist:

Code: Alles auswählen.

IF <return> IS ASSIGNED...

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ketzerisch gesprochen:
Wenn ich in einem Codemodul (Form-Routine, Methode) mehrmals den selben (oder einen ähnlichen) LOOP habe, dann habe ich bei der Modularisierung was falsch gemacht.
Oft hilft es schon die LOOPs in unterschieldiche Codemodule auszulagern und dann sieht man schon dass einer z.B. die Funktion "Suche nach Wildcard" und ein anderer die Funktion "Aktualisiere Zeilen mit Wert" abbildet. Wenn man die neuen Module dann auch noch sprechend bennennt, hat man mehr gewonnen als nur eine eindeutige Verwendung eines Inline-Feld-Symbols.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
a-dead-trousers hat geschrieben:
29.03.2022 13:09
Ketzerisch gesprochen:
Wenn ich in einem Codemodul (Form-Routine, Methode) mehrmals den selben (oder einen ähnlichen) LOOP habe, dann habe ich bei der Modularisierung was falsch gemacht.
Oft hilft es schon die LOOPs in unterschieldiche Codemodule auszulagern und dann sieht man schon dass einer z.B. die Funktion "Suche nach Wildcard" und ein anderer die Funktion "Aktualisiere Zeilen mit Wert" abbildet. Wenn man die neuen Module dann auch noch sprechend bennennt, hat man mehr gewonnen als nur eine eindeutige Verwendung eines Inline-Feld-Symbols.
Da bin ich etwas anderer Ansicht.
Wenn ich nacheinander zwei Funktionsbausteine aufrufe, die mir beide Rückgabewerte vom Typ BAPIRET2 liefern, warum soll ich dann für die Rückgabewerte nicht dieselbe Tabelle verwenden?
Gut, ich könnte für jeden Funktionsbausteinsaufruf jeweils eine Formroutine/Modul,/Methode bauen, und in der Formroutine jeweils den Return abfragen. Wirkt aber unter Umständen auch etwas albern.

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
ewx hat geschrieben:
29.03.2022 13:06
PeterPaletti hat geschrieben:
29.03.2022 12:25
Also zweimal ASSIGNING FIELD-SYMBOL(<return>) geht nicht, einmal ASSIGNING FIELD-SYMBOL(<return>) und einmal ASSIGNING <return> geht aber auch nicht, weil unsicher.
was ist daran "unsicher"?
PeterPaletti hat geschrieben:
29.03.2022 12:25
Also zur Sicherheit: einmal ASSIGNING FIELD-SYMBOL(<return>) und beim 2. Mal ASSIGNING FIELD-SYMBOL(<return2>).
Das ist doch doof. Gibt es da nicht eine schlauere Lösung?
SAP empfiehlt, separate Feld-symbole zu benutzen.

Willst du das Feldsymbol später - also außerhalb des LOOP - noch mal prüfen, musst eh prüfen, ob es zugewiesen ist:

Code: Alles auswählen.

IF <return> IS ASSIGNED...
Aha, SAP ist also für <return1> und <return2>. Gut zu wissen, sieht aber in meinen Augen trotzdem blöd aus.

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
PeterPaletti hat geschrieben:
29.03.2022 13:51
Wenn ich nacheinander zwei Funktionsbausteine aufrufe, die mir beide Rückgabewerte vom Typ BAPIRET2 liefern, warum soll ich dann für die Rückgabewerte nicht dieselbe Tabelle verwenden?
So hab ich das jetzt nicht gemeint. Vielmehr würde ich die Verarbeitung von BAPIRET2 in eine eigene Form-Routine/Methode auslagern. In diesem Fall wird vermutlich geprüft ob ein Fehler vorliegt oder ähnliches und das ist doch für die beiden besagten Funktionsbausteinaufrufe im Grund dieselbe Logik.
Somit braucht es nur einen Loop, ein Feldsymbol aber zwei PERFORM/CALL METHOD.
*Bam* Modularisierung 😇

Code: Alles auswählen.

CALL FUNCTION ... TABLES returntab = lt_return.
PERFORM check_error USING lt_return CHANGING ld_error.
IF ld_error NE abap_true.
  CALL FUNCTION ... TABLES returntab = lt_return.
  PERFORM check_error USING lt_return CHANGING ld_error.
ENDIF.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: LOOP AT...ASSIGNING FIELDS-SYMBOL

Beitrag von black_adept (Top Expert / 4087 / 126 / 940 ) »
PeterPaletti hat geschrieben:
29.03.2022 12:25
Also zur Sicherheit: einmal ASSIGNING FIELD-SYMBOL(<return>) und beim 2. Mal ASSIGNING FIELD-SYMBOL(<return2>).
Das ist doch doof. Gibt es da nicht eine schlauere Lösung?
Moin Peter,
ich glaube du hast noch nicht vollständig das Konzept der impliziten Variablendefinition verstanden.

Mit LOOP AT ... ASSIGNING FIELD-SYMBOL(<return>) definierst du ein Feldsymbol. Dieses ist dem Sichtbarkeitsbereich zugeordnet, in dem du dich gerade befindest.
Analog könntest du in der Zeile davor ein FIELD-SYMBOLS: <return> like line of itab. schreiben.
Somit ist das 2. LOOP AT ... ASSIGNING <return> nicht unsicher. Warum auch? ASSIGNING <fs> weist dem Feldsymbol die Zeile der itab zu. Problematisch wäre nur ( und ich fürchte, dass meintest du ) wenn du stattdess LOOP AT ... INTO <return> machen würdest, weil dieses evtl. nicht assigned ist.

P.S. Auch wenn man jeden schlagen sollte, der es probiert. Eine Variable, die mittels LOOP AT ... INTO DATA(var) definiert wird, ist zwar erst nach der Deklaration via Coding ansprechbar, aber sie existiert auch schon vorher - in der gesamten Modularisierungseinheit. Einfach mal einen Breakpoint vor den LOOP platzieren und im Debugger die in der nächsten Zeile definierte Variable anschauen. Glücklicherweise geht so ein Schmarrn nicht mit Feldsymbolen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

6
Antw.
794
Views
LOOP AT .. ASSIGNING ... CHECK?!?
von whaslbeck » 09.02.2022 11:41 • Verfasst in ABAP® Core
15
Antw.
4715
Views
ABAP OO - Loop mit Assigning
von Weltenschmerz » 11.05.2016 11:55 • Verfasst in ABAP® für Anfänger
2
Antw.
13127
Views
LOOP AT INTO und ASSIGNING (gelöst)
von beterman » 17.10.2011 15:56 • Verfasst in ABAP® für Anfänger
1
Antw.
1446
Views
16
Antw.
1043
Views
ASSIGNING <fs>
von Juri » 30.09.2022 09:37 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 685
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2318
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8899