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 / 1197 / 1 / 197 ) »
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.
2468
Views
Dynamisierung (Experten gefragt!!!)
von Beni » 01.12.2004 08:54 • Verfasst in ABAP Objects®
2
Antw.
359
Views
Schleife, Gruppenverarbeitung
von Ingo » 08.07.2022 10:54 • Verfasst in ABAP® für Anfänger
1
Antw.
755
Views
Fortführen der Schleife
von ichse18577 » 18.04.2019 07:33 • Verfasst in ABAP® für Anfänger
4
Antw.
4074
Views
feldzuweisung in schleife
von simethandreas » 01.10.2009 14:25 • Verfasst in ABAP® für Anfänger
6
Antw.
2849
Views
COND in Schleife
von SaskuAc » 18.06.2018 08:08 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1668
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8270