DO... VARYING vs ASSIGN INCREMENT

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
54 Beiträge • Seite 1 von 4 (current) Nächste
54 Beiträge Seite 1 von 4 (current) Nächste

DO... VARYING vs ASSIGN INCREMENT

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Hallo zusammen,

schon seit geraumer Zeit wird in der Online-Hilfe von ABAP betont, dass der Befehl DO ... VARYING obsolet sei und doch bitte durch ASSIGN ... INCREMENT zu ersetzen sei. Nach meiner Einschätzung ist dies in vielen Fällen jedoch gar nicht möglich?! Entweder das, oder ich habe die Funktionsweise von ASSIGN ... INCREMENT nicht richtig verstanden.

Nach meinem Verständnis funktioniert ASSIGN ... INCREMENT so, dass ich den ersten Wert angebe und dann über die Increment-Nummer eien feste Anzahl von gleichartigen Werten bzw. Werten gleicher Speicherlänge hochzählen kann. Wenn eine Struktur also so gebaut ist:

Code: Alles auswählen.

DATA: BEGIN OF beispiel,
         wert1(5) type c,
         wert2(5) type c,
         wert3(5) type c,
       END OF beispiel.
dann kann ich wert1 angeben und über den INCREMENT die übrigen Werte erreichen.

Was aber mache ich, wenn ich Wertgruppen habe? Also:

Code: Alles auswählen.

DATA: BEGIN OF beispiel,
         bezeichnung1(10) type c,
         wert1 type i,
         bezeichnung2(10) type c,
         wert2 type i,
         bezeichnung3(10) type c,
         wert3 type i,
       END OF beispiel.
Ich sehe nicht, dass ich hier mit ASSIGN INCREMENT was reißen könnte. Hingegen kann ich mit

Code: Alles auswählen.

DO 3 TIMES VARYING bezeichnung FROM beispiel-bezeichnung1 NEXT beispiel-bezeichnung2
           VARYING wert        FROM beispiel-wert1        NEXT beispiel-wert2.
" Verarbeite Werte
ENDDO.
wunderbar die einzelnen Tupel durchgehen und verarbeiten. Kann mir jemand erklären, wie ich das in einer Form codieren kann, die von der SAP nicht als obsolet gebrandmarkt wird (und dennoch nicht horrend umständlich ist)? Mit ASSIGN INCREMENT scheint mir das nicht möglich zu sein.

Und Tabellen, die derartige Strukturen enthalten, hat die SAP ja selbst im Einsatz, etwa die PA0008 oder die PA0041.
Zuletzt geändert von DeathAndPain am 27.04.2018 16:45, insgesamt 1-mal geändert.

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


Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Bleib bei DO VARYING. Deine Anforderung wird damit
am besten gelöst.

Folgende Benutzer bedankten sich beim Autor Daniel für den Beitrag:
DeathAndPain


Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Man könnte es mit ASSIGN COMPONENT machen, da die Feldnamen ja meist durchnummeriert sind.

Code: Alles auswählen.

  lv_n1 = sy-index.

  ASSIGN COMPONENT |BEZEICHNUNG{ lv_n1  }| OF STRUCTURE beispiel TO <lv_bezeichnung>.
  ASSIGN COMPONENT |WERT{ lv_n1  }|        OF STRUCTURE beispiel TO <lv_wert>.
Nichtsdestotrotz würde ich trotzdem Daniels Vorschlag folgen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Ja, was Du schreibst, ist ein Weg, der syntaktisch funktioniert, aber halt keine überzeugende Alternative hinsichtlich gut lesbaren Programmierstils. Ich verstehe nicht, weshalb die SAP den VARYING-Befehl als obsolet gekennzeichnet hat. Vielleicht deshalb, weil er noch mit diskreten Workareas anstelle von Feldsymbolen arbeitet? Dann hätten sie ihn entsprechend erweitern sollen, etwa so:

Code: Alles auswählen.

DO 3 TIMES ASSIGNING <beispiel> VARYING FROM beispiel-bezeichnung1 NEXT beispiel-bezeichnung2.
...
ENDDO.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Daniel


Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Guter Vorschlag D&P!
Deine Idee finde ich ziemlich gut!

*Warum* DO-Varying obsolet ist wäre tatsächlich mal interessant...
/EDIT: wieder nur die Hälfte gelesen... :x Peinlicher Beitrag gelöscht...

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Da ich die Anweisung nie verwendet habe, wusste ich das auch nicht. Sowas fragt man am Besten GOTT (dazu muss man nicht in die Kirche gehen, er arbeitet bei der SAP unter dem Decknamen „Horst Keller“ *lol*).

Die Anweisung hat erhebliche Defizite, z. B. mit Ausrichtungslücken. Deshalb wurde sie durch die andere Anweisung ersetzt, die nicht unmittelbar auf dem internen Speicherabbild herumhühnert.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Und wie so oft hat sich das System damit verschlechtert.
Die neue Anweisung kann nicht annähernd das was die
Alte kann.

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ich muss auch zugeben, dass ich den Befehl nie benutzt habe und ihn deswegen auch nicht vermisse.

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Daniel hat geschrieben:Und wie so oft hat sich das System damit verschlechtert.
Die neue Anweisung kann nicht annähernd das was die
Alte kann.
Und? Du kannst die alte doch trotzdem nutzen. Horsts Argumente sind auch nicht von der Hand zu weisen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Das Problem mit den Ausrichtungslücken gibt es erst seit SAP mit Unicode
umgehen kann. Das ist relativ leicht zu erkennen. Das nicht im Kernel
einzubauen grenzt an Sabotage. Der Befehl kann zu jeder Zeit ein
Riesen-Problem verursachen ohne daß jemand das erkennen kann.
Wird dein Horst von Larry bezahlt?

PS: In der Realität sind Probleme mit Ausrichtungslücken sehr selten.

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Es geht ja nicht nur um Ausrichtungslücken. Es wurde entschieden, eine Anweisung zu bauen, die mehr dem Zeitgeist entspricht („rumhünern“ auf internem Speicherabbild). Ich dachte immer, von uns beiden bin ich der, der sich über Kleinigkeiten überzogen aufregt.

Ich hab die Anweisung in 20 Jahren* nie gebraucht und nur 1x im Coding gesehen. So wichtig kann sie also nicht sein.


Ralf

*Ich hab echt am 1.7. schon 20jähriges Berufsjubiläum..... ;) Dann kennen wir uns schon zehn Jahre?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Ich habe diese Anweisung oft und gerne verwendet.

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Daniel hat geschrieben:Ich habe diese Anweisung oft und gerne verwendet.
ralf.wenzel hat geschrieben:Und? Du kannst die alte doch trotzdem nutzen. Horsts Argumente sind auch nicht von der Hand zu weisen.

Code: Alles auswählen.

ENDDO.
Ralf *Endlosschleife ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Wenn ich das in eigenen Programmen mache kann ich abschätzen
ob die verwendete Struktur mal Ärger machen wird.
Es ist aber völlig ausgeschlossen das für das gesamte SAP-System
vorherzusagen. Wenn sich nun eine SAP-Struktur so ändert daß das
Problem auftritt führt das zu unvorhersehbaren Fehlern in jedem
Programm - Standard oder Kundeneigen - daß seit 30 Jahren läuft.
Deshalb rege ich mich auch nicht über eine Kleinigkeit auf sondern
über anfängliches Unvermögen.

Re: DO... VARYING vs ASSIGN INCREMENT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Daniel hat geschrieben:Wenn ich das in eigenen Programmen mache kann ich abschätzen
ob die verwendete Struktur mal Ärger machen wird.
Es ist aber völlig ausgeschlossen das für das gesamte SAP-System
vorherzusagen. Wenn sich nun eine SAP-Struktur so ändert daß das
Problem auftritt führt das zu unvorhersehbaren Fehlern in jedem
Programm - Standard oder Kundeneigen - daß seit 30 Jahren läuft.
Deshalb rege ich mich auch nicht über eine Kleinigkeit auf sondern
über anfängliches Unvermögen.
Trotzdem rätst du bezogen auf ein dir nicht näher bekanntes Programm:
Daniel hat geschrieben:Bleib bei DO VARYING. Deine Anforderung wird damit
am besten gelöst.
Nach deinen eigenen Ausführungen ein fragwürdiger Rat. Ich persönlich verwende obsolete Anweisungen nicht, man kann auch alles mit gültigen Anweisungen lösen.



Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Vergleichbare Themen

3
Antw.
561
Views
7 days increment by 1
von erzoo24 » 04.11.2021 15:21 • Verfasst in ABAP® für Anfänger
3
Antw.
5018
Views
Ersetzen von oboleten DO VARYING
von Barney » 25.10.2013 14:25 • Verfasst in ABAP® für Anfänger
13
Antw.
4373
Views
Assign
von robin1at » 10.04.2006 10:42 • Verfasst in ABAP® für Anfänger
0
Antw.
1448
Views
Dirty Assign
von allgrinder » 10.08.2015 11:14 • Verfasst in ABAP® für Anfänger
6
Antw.
2485
Views
ASSIGN-Probleme
von ralf.wenzel » 23.06.2008 09:41 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141