Dynamisierung von Schleife

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

Dynamisierung von Schleife

Beitrag von dvdh1979 (ForumUser / 15 / 0 / 0 ) »
Hallo zusammen,

aktuell suche ich nach einem Weg, Aufrufe innerhalb von Schleifen zu dynamisieren, habe aber noch keinen richtigen "Ansatz" gefunden und hoffe, dass man mir hier weiterhelfen kann.

1. Fall

Code: Alles auswählen.

  if itab-rt_6p74 gt 0.
    itab-r_6p7x = ' 100 ' * itab-rt_6p78 / itab-rt_6p74.
  endif.

  if itab-rt_6p54 gt 0.
    itab-r_6p5x = ' 100 ' * itab-rt_6p58 / itab-rt_6p54.
  endif.
... usw.

Die Variablen sind wie folgt:
ITAB-RT_6P<x>4 -> <x> = 1..9, A..Z
ITAB-R_6P<x>x -> <x> = 1..9, A..Z
ITAB-RT_6P<x>8 -> <x> = 1..9, A..Z

Mein Ansatz bisher ist:

Code: Alles auswählen.

DATA: tabfieldname1 TYPE string,
      tabfieldname2 TYPE string,
      tabfieldname3 TYPE string.

FIELD-SYMBOLS: <tabfield1> TYPE any,
               <tabfield2> TYPE any,
               <tabfield3> TYPE any.

DATA: lv_num(2)     TYPE c,
      lv_let(1)     TYPE c.

lv_num = 5.

DO 5 TIMES.
  CONCATENATE 'rt_6p' lv_num '4' INTO tabfieldname1.
  ASSIGN tabfieldname1 TO <tabfield1>.

  CONCATENATE 'itab-r_6p' lv_num 'x' INTO tabfieldname2.
*  ASSIGN tabfieldname1 TO <tabfield2>.

  CONCATENATE 'itab-rt_6p' lv_num '8' INTO tabfieldname3.
*  ASSIGN tabfieldname1 TO <tabfield3>.

  LOOP AT itab WHERE <tabfield1> GT 0.
    tabfieldname2 = ' 100 ' * tabfieldname3 / tabfieldname1.  
  ENDLOOP.
aber so komme ich nicht an den Wert in den Feldern und kann auch nachher kein Ergebnis zurückschreiben.


2. Fall

Aktuell:

Code: Alles auswählen.

  loop at itab.

    add itab-rt_6p76      to summe-rt_6p76.
    add itab-rt_6p78      to summe-rt_6p78.
    add itab-rt_6p74      to summe-rt_6p74.
    add itab-r_6p7x       to summe-r_6p7x.
Gleiche Variabilität wie in Fall 1, d.h. die "7" variiert von 1 - 9 und A - Z.

3. Fall
Ist etwas komplexer und verhält sich so:

Code: Alles auswählen.

    if zw-bloecke = 1.
      move-corresponding itab to m1tab.
      if itab-werks eq '****'.
        m1tab-wostd = space.
      else.
        write itab-wostd to m1tab-wostd.
      endif.
      if zw-inhalt_block_1 = '6px6'.
        m1tab-b1_6px6 = itab-rt_6px6.
        m1tab-b1_6px8 = itab-rt_6px8.
        m1tab-b1_6px4 = itab-rt_6px4.
        m1tab-b1_6pxx = itab-r_6pxx.
      endif.
[…]      
      append m1tab.
    endif.

    if zw-bloecke = 2.
      move-corresponding itab to m2tab.
      if itab-werks eq '****'.
        m2tab-wostd = space.
      else.
        write itab-wostd to m2tab-wostd.
      endif.
      if zw-inhalt_block_1 = '6px6'.
        m2tab-b1_6px6 = itab-rt_6px6.
        m2tab-b1_6px8 = itab-rt_6px8.
        m2tab-b1_6px4 = itab-rt_6px4.
        m2tab-b1_6pxx = itab-r_6pxx.
      endif.
[…]
      if zw-inhalt_block_2 = '6px6'.
        m2tab-b2_6px6 = itab-rt_6px6.
        m2tab-b2_6px8 = itab-rt_6px8.
        m2tab-b2_6px4 = itab-rt_6px4.
        m2tab-b2_6pxx = itab-r_6pxx.
      endif.
      append m2tab.
    endif.
D.h. es können aktuell bis zu 6 Blöcke auf dem Selektionsbild ausgewählt werden und mit jedem Block bläht sich das Coding immer weiter auf...

Danke schon einmal für jeden Tipp!


Viele Grüße,
Dirk

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


Re: Dynamisierung von Schleife

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
dvdh1979 hat geschrieben:aktuell suche ich nach einem Weg, Aufrufe innerhalb von Schleifen zu dynamisieren, habe aber noch keinen richtigen "Ansatz" gefunden und hoffe, dass man mir hier weiterhelfen kann.
Poste mal bitte die Definition von ITAB. Verwendest du wirklich Kopfzeilen?

Der erste Weg könnte funktionieren:

Code: Alles auswählen.

DATA: lv_num TYPE c LENGTH 1.

LOOP AT itab. "Für jede Zeile

lv_num = 1. "Feldzähler zurücksetzten

DO 5 times. "Für jeden Block
  
  CONCATENATE 'RT_6P' lv_num '4' INTO tabfieldname1.                      "Nur den Feldnamen, Großbuchstaben
  ASSIGN COMPONENT (tabfieldname1) OF STRUCTURE itab TO <tabfield1>.   "ein Feld der Struktur

    IF <tabfield1> > 0. "Prüfung für jeden "Block"
      CONCATENATE 'RT_6P' lv_num 'X' INTO tabfieldname2.                      "Nur den Feldnamen, Großbuchstaben
      ASSIGN COMPONENT (tabfieldname2) OF STRUCTURE itab TO <tabfield2>.   "ein Feld der Struktur

     CONCATENATE 'RT_6P' lv_num '8' INTO tabfieldname3.                      "Nur den Feldnamen, Großbuchstaben
     ASSIGN COMPONENT (tabfieldname3) OF STRUCTURE itab TO <tabfield3>.   "ein Feld der Struktur

      <tabfield2> = 100 * <tabfield3> / <tabfield1>.
    ENDIF.

    lv_num = lv_num + 1. "Zähler für nächsten Block erhöhen.

  ENDDO.
ENDLOOP.
Spätestens mit den Buchstaben wird es dann etwas schwieriger, da das Addieren beim Zähler dann nicht mehr funktioniert.
Je nach SAP Release und Aufbau von ITAB kann mittels ASSIGN INCREMENT bzw. DO VARYING das Durchlaufen der Blöcke, auch ohne das Zusammenbauen der Feldnamen, dynamisch realisiert werden.
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

5
Antw.
2407
Views
Dynamisierung (Experten gefragt!!!)
von Beni » 01.12.2004 08:54 • Verfasst in ABAP Objects®
2
Antw.
204
Views
Schleife, Gruppenverarbeitung
von Ingo » 08.07.2022 10:54 • Verfasst in ABAP® für Anfänger
5
Antw.
3096
Views
Fehler in Schleife????
von Aggu » 12.05.2004 18:37 • Verfasst in ABAP® für Anfänger
1
Antw.
526
Views
Fortführen der Schleife
von ichse18577 » 18.04.2019 07:33 • Verfasst in ABAP® für Anfänger
4
Antw.
3941
Views
feldzuweisung in schleife
von simethandreas » 01.10.2009 14:25 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140