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.
1527
Views
Dynamische WHERE-Klausel bei LOOP
von KleinerEisbaer » 11.06.2021 20:45 • Verfasst in ABAP® Core
1
Antw.
1486
Views
1
Antw.
1289
Views
loop mit tabelle
von tho_died » 05.11.2007 13:42 • Verfasst in ABAP® für Anfänger
2
Antw.
2762
Views
Loop - Arbeitsbereich - Interne Tabelle
von KleinerEisbaer » 09.03.2008 13:46 • Verfasst in ABAP® für Anfänger
6
Antw.
3955
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

Regex in where
vor 13 Stunden von tar 8 / 305
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1594
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 243
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 481

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

Regex in where
vor 13 Stunden von tar 8 / 305
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1594
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 243
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 481

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 182
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3360
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9911