LOOP über dynamische Tabelle

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

LOOP über dynamische Tabelle

Beitrag von Jüüürgen ( / / 0 / 3 ) »
Release ist 610 (ein SRM System)...

Ich habe einen Fuba.

Code: Alles auswählen.

FUNCTION zide_alv_itab.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  TABLES
*"      GT_ITAB TYPE  TABLE OPTIONAL
*"----------------------------------------------------------------------
Dieser bekommt wie dargestellt die Tabelle GT_ITAB...

Über einen Programmteil könnte ich mir in lv_cond was ermitteln, das ungefähr so aussieht:
  • FIELD1 = 'XXXXX' AND FIELD2 = 'YYYYY'.
Ich habe versucht über gt_itab zu loopen, also

Code: Alles auswählen.

LOOP AT gt_itab WHERE (cond).
Leider geht das nicht:
  • Bei "LOOP... WHERE..." muß der Zeilentyp der Tabelle statisch bekannt. :evil:
Was kann ich tun.
Auch gut wäre ein READ TABLE oder ähnliches....

Das Proglem ist, daß die Bedingung dynamisch sein muß und auch die Tabelle "dynamisch" übergeben wird.

Es wäre super, wenn mir jemand einen Tip hätte....

Danke im vorraus

Jürgen Spranz

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


Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Moin Jürgen,

vielleicht so:

Code: Alles auswählen.

DATA:
  BEGIN OF LT_DYNTAB OCCURS 0,
     FELD1(2),
     FELD2(2),
     FELD3(2),
  END OF LT_DYNTAB,
  LV_FIELDNAME(30).
  RANGES R0001 FOR SY-LISEL.
  FIELD-SYMBOLS <FELD>.

PARAMETERS: P_FNAME(30) DEFAULT 'FELD2',
            P_FKOND(2)  DEFAULT 'bb' LOWER CASE.

START-OF-SELECTION.

  APPEND '11aaAA' TO LT_DYNTAB.
  APPEND '22bbBB' TO LT_DYNTAB.
  APPEND '33ccCC' TO LT_DYNTAB.
  APPEND '44ddDD' TO LT_DYNTAB.

  R0001-SIGN = 'I'.
  R0001-OPTION = 'EQ'.
  R0001-LOW    = P_FKOND.
  APPEND R0001.

  LOOP AT LT_DYNTAB.
    CONCATENATE 'LT_DYNTAB-' P_FNAME INTO LV_FIELDNAME.
    ASSIGN (LV_FIELDNAME) TO <FELD>.
    CHECK <FELD> IN R0001.
    WRITE: / LT_DYNTAB.
  ENDLOOP.
Für mehr Felder: Mehr RANGES-Tabellen.

Gruß,
Enno

Beitrag von popeiko (ForumUser / 47 / 0 / 1 ) »
Hallo.

Ein READ TABLE funktioniert auch dynamisch.

Code: Alles auswählen.

READ TABLE gt_itab 
  ASSIGNING <ls_itab>
  WITH KEY (feldname1) = wert1
           (feldname2) = wert2.
feldnameX ist eine Variable mit dem Feldnamen. Ist die Variable leer, wir der Teil der Selektionsbedingung nicht ausgewertet.

Gruß Heiko.

loop -> read table

Beitrag von Gast ( / / 0 / 3 ) »
Vielen Dank für die Antwort mit dem read table.

Das hat mir sehr weitergeholfen.

Das Problem ist allerdings noch, daß der Vergleichswert nicht wirklich variabel ist.

So funktioniert es nun bei mir:

Code: Alles auswählen.

    READ TABLE <gt2_itab> ASSIGNING <fs_line_to>
              WITH KEY (lv_field01) = <lv_value01>
                       (lv_field02) = <lv_value02>
                       (lv_field03) = <lv_value03>
                       (lv_field04) = <lv_value04>
                       (lv_field05) = <lv_value05>.
Wünschenswert wäre, daß man z.B. vorne eine Feld einer internen Tabelle und hinten ein Feld einer internen Tabelle benutzen könnte.

Also wünschenswert so in der Art:

Code: Alles auswählen.

      WITH KEY (lt_field(1)) = (lt_value(1)).
Bei einem Feld Lv_COND etc. hätte man sich die Bedingung einfach zusammenbauen können.
Das wäre mir lieber gewesen, da es dann wirklich variabel gewesen wäre.
Wenn es ab einer Bestimmten LV_COND Feldlänge nicht mehr gegangen wäre, wäre zu verschmerzen gewesen....

Vielleicht kommt ja noch ein anderer Tip...

Beitrag von Gast ( / / 0 / 3 ) »
Wenn du schon die Bedingung "zusammenbauen" willst...
Warum nicht gleich eine ganze Routine...?
GENERATE SUBROUTINEPOOL

Gruß,
Enno

Beitrag von Gast ( / / 0 / 3 ) »
Ein Problem liegt aber dann vor wenn GENERATE SUBROUTINEPOOL nicht möglich ist.

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

Ich verstehe richtig: Beim WHERE ist ein Feld aus der Tabelle, der Vergleichswert ist irgendwo aus dem Programmkontext :idea: .

Das Problem hatte ich auch, habe es aber nicht so elegant gelöst :o (muss mal nachsehen, ob ich Euren WHERE einbauen kann).


Zu GENERATE SUBROUTINEPOOL nur soviel:
wenn das nicht möglich ist, dann hat man ganz andere Probleme ... (meistens Syntaxfehler im Code :oops: ).

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1525
Views
Dynamische WHERE-Klausel bei LOOP
von KleinerEisbaer » 11.06.2021 20:45 • Verfasst in ABAP® Core
1
Antw.
1471
Views
1
Antw.
1288
Views
loop mit tabelle
von tho_died » 05.11.2007 13:42 • Verfasst in ABAP® für Anfänger
2
Antw.
2759
Views
Loop - Arbeitsbereich - Interne Tabelle
von KleinerEisbaer » 09.03.2008 13:46 • Verfasst in ABAP® für Anfänger
6
Antw.
3953
Views
CSV Datei zu Dynamische Tabelle in SAP
von autohandel7 » 05.02.2016 13:59 • Verfasst in ABAP® für Anfänger

Ü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

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 9 Stunden von msfox 18 / 10973
Dialog-Container mit Toolbar/Status
vor 11 Stunden von black_adept gelöst 27 / 4092
IT0024 Qualifikationen CP-ID
vor 13 Stunden von ArjenR 1 / 98

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

Trennen Strasse und Hausnummer
vor 9 Stunden von msfox 18 / 10973
Dialog-Container mit Toolbar/Status
vor 11 Stunden von black_adept gelöst 27 / 4092
IT0024 Qualifikationen CP-ID
vor 13 Stunden von ArjenR 1 / 98

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 13 Stunden von ArjenR 1 / 98
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3030
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9622