Problem mit Zeilen einer internen Liste

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

Problem mit Zeilen einer internen Liste

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Hallo zusammen,

ich brauch mal einen Denkanstoß. Ich habe eine interne Tabelle die ich mit Loops befülle. Ein Spalte davon befülle ich mit einem weiteren Loop. Allerdings fügt er hier immer nur den letzten Wert der Liste hinzu. Also Beispielhaft sieht das so aus:

Nr------Text-------name
123-----blubb------drittername
123-----dhsjdsd---drittername
123-----dffhjhh---drittername

Er sollte aber bei der Spalte Name für die erste zeile "erstername" reinschreiben und für die zweite Zeile "zweitername". Ich dachte ich könnte das über den befehl append steuern, aber das klappt nicht. Der Quelltext sieht wie folgt aus:

Code: Alles auswählen.

LOOP AT tab1 INTO wa_tab1.

  nr_i = wa_tab1-nr.

  SELECT  feld1 feld2 
  INTO TABLE itable
  FROM  <tabelle>
  WHERE nr = nr_i.

  LOOP AT itable INTO zeile.

      IF zeile-text NE 'bestimmtertext'.
        liste1-inr = zeile-nr.
        liste1-notiz = zeile-text.

        CREATE OBJECT expertref
            EXPORTING
              nr = zeile-nr.
        CLEAR: wa_expert.
        LOOP AT expertref->expertlist INTO wa_expert.
          liste1-unr = wa_expert-pernr.
          liste1-name = wa_expert-name.
        ENDLOOP.
        APPEND liste1.
      ENDIF.

  ENDLOOP.

ENDLOOP.
Ich versteh auch das das mit dem vorliegenden Code so nicht funktioniert, bzw. dass das Verhalten richtig ist, aber ich komm nicht drauf wie ich das machen soll, also das er bei dem loop für die unr und den namen nach einem druchlauf das erstmal der liste1 hinzufügen soll und nicht alle durchläufe machen und dann den letzten wert der liste1 hinzuzufügen.


ich hoff ihr könnt mir helfen

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


Re: Problem mit Zeilen einer internen Liste

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
ich hoff ihr könnt mir helfen
Sicher :D

Also, mal ganz davon abgesehen, dass ich den Aufbau deiner Tabellen und Strukturen nicht kenne, du kannst nicht über eine Tabelle mit sagen wir 3 Einträgen Loopen und im Loop jedes Mal wieder deine Felder liste1-unr und liste1-name überschreiben bevor du ein Append machst...dann ist klar, dass immer nur der letzte Eintrag der Tabelle auf die Felder geschrieben wird.

Dein Append bezieht sich quasi nur auf den Loop "LOOP AT itable INTO zeile." Nur so oft, wie du da durchloopst, kannst du auch Appenden...

Hast du denn in deiner Expertlist irgendwas, was einen Bezug zum äußeren Loop herstellt oder ist diese Zuweisung rein zufällig?

Welches Ergebnis erwartest du?

Re: Problem mit Zeilen einer internen Liste

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Also die Zuordnung ist nicht direkt rein zufällig, allerdings kann ich es nicht direkt mit einem Feld verknüpfen. Allerdings stimmt die Anzahl genau über ein. Also wenn ich aus dem äußeren loop pro "nr" 3 Einträge bekomme, dann sind das auch 3 einträge aus dem inneren expertlist-loop. Es müsste also so aussehen: Er nimmt eine Zeile aus dem äußeren loop dann geht er in den inneren loop und das erste ergebnis müsste er in diese erste zeile schreiben, dann müsste er wieder in den äußeren loop gehen und die zweite zeile befüllen mit dem zweiten wert aus dem inneren loop usw.

Re: Problem mit Zeilen einer internen Liste

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Ok, ist zwar nicht sehr robust, aber dann sowas in der Art:

Code: Alles auswählen.

LOOP AT tab1 INTO wa_tab1.

  nr_i = wa_tab1-nr.

  SELECT  feld1 feld2 
  INTO TABLE itable
  FROM  <tabelle>
  WHERE nr = nr_i.

  LOOP AT itable INTO zeile.

      IF zeile-text NE 'bestimmtertext'.
        liste1-inr = zeile-nr.
        liste1-notiz = zeile-text.

        CREATE OBJECT expertref
            EXPORTING
              nr = zeile-nr.
        CLEAR: wa_expert.
        READ TABLE expertref->expertlist INTO wa_expert INDEX sy-tabix.
          IF sy-subrc = 0.
                liste1-unr    = wa_expert-pernr.
                liste1-name = wa_expert-name.
          ENDIF.
        APPEND liste1.
      ENDIF.

  ENDLOOP.

ENDLOOP.
 
sy-tabix hält bei jedem Schleifendurchlauf den Tabellenindex der aktuellen Tabellenzeile. Somit kannst du per READ TABLE dann auch genau die Zeile aus deiner Expertlist lesen...

Re: Problem mit Zeilen einer internen Liste

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Hm das funktioniert leider nicht. Er schreibt jetzt einige Zeile aus dem äußeren loop doppelt und von dem inneren expert-loop nimmt er jetzt immer den ersten udn schreibt ihn in jede zeile, aber wieder nur einen statt verschiedene. Müsste ich sy-tabix nicht irgendwie hochzählen? Weil so geht er jetzt da rein da steht dann sy-tabix = 1 also schreibt er den wert in die zeile, beim nächsten durchlauf steht da ja immer noch sy-tabix=1 deswegen schreibt er jetzt immer den ersten wert rein.

Re: Problem mit Zeilen einer internen Liste

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hast du auch den LOOP um die EXPERTLIST weggemacht? Da brauchst du nur noch READ TABLE...

Re: Problem mit Zeilen einer internen Liste

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Ah hatte noch einen kleinen fehler, hatte noch einen append zu viel, deswegen die doppelten ausgaben, aber das grundproblem bleibt, er schreibt jetzt immer den jeweils ersten wert aus der expertlist statt wie beim loop den letzten wert.

Aber wie läuft den das mit dem Read Table genau ab?
Es ist doch so dass er quasi alles was in expert list steht in wa_expert einliest. So und was genau sagt dann das sy-tabix aus? weil in deinem nächsten schritt sagst du ja "liste1-unr = wa_expert-pernr." Aber woher weiß er hier welchen wert er nehmen soll? Und da er das nicht weiß nimmt er den ersten aus wa_expert. Oder versteh ich da was falsch.

Re: Problem mit Zeilen einer internen Liste

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Poste doch nochmal deinen aktuellen Quelltext...

READ TABLE liest genau eine Zeile aus der internen Tabelle, entweder per Schlüssel spezifiziert oder per Index.
Da bei einem Loop mit jedem Durchlauf die Systemvariable SY-TABIX um 1 erhöht wird, führt z.B. beim dritten LOOP die Anweisung
READ TABLE expertref->expertlist INTO wa_expert INDEX sy-tabix.
dazu, dass genau die 3 Zeile gelesen wird.

Enthält den itable oder tab1 deine 3 Einträge?

Re: Problem mit Zeilen einer internen Liste

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Ah ich hab den knackpunkt, hab mal mim debugger die sy-tabix überprüft, also da ich nur ein quelltext auszug gepostet habe, konnte man das hier nicht erkennen, ich habe vor dem loop schon ein include, welches einen selektionsbildschirm befüllt, nach diesem include steht sy-tabix schon auf 3. im weiteren schritt wird eine methode aufgerufen, die eine interne tabelle befüllt, danach steht sy-tabix bereits auf 21. also über tabix krieg ich das nicht hin, ich müsste es vielleicht doch mit einem loop über die expertlist machen, dabei die anzahl der loops zählen (geht das?) und danach quasi dein read table machen mit dem schlüssel, der sich aus der anzahl ergibt. was meint ihr?

Re: Problem mit Zeilen einer internen Liste

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Jeder LOOP setz seinen eigenen SY-TABIX (ABAP merkt sich quasi den TABIX jedes Loops). Das muss funktionieren...wenn nicht hast du dich noch irgendwo verstrickt. :D

Aber aufpassen: auch READ TABLE setzt den SY-TABIX auf die Zeile, die es gelesen hat. Also danach darfste dann bis zum nächsten Loop nicht mehr SY-TABIX nutzen, es sei denn, du merkst es dir in einem anderen Feld.
Die Anweisung LOOP AT setzt den Wert des Systemfeldes sy-tabix bei jedem Schleifendurchlauf für Standardtabellen und sortierte Tabellen auf den Tabellenindex der aktuellen Tabellenzeile und für Hash-Tabellen auf den Wert 0. Sie lässt sy-subrc unverändert. Nach dem Verlassen der Schleife über ENDLOOP wird sy-tabix auf den Wert gesetzt, den es vor dem Eintritt in die Schleife hatte.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3660
Views
Anzahl Zeilen in einer internen Tabelle
von Otscho » 31.07.2007 12:59 • Verfasst in ABAP® für Anfänger
3
Antw.
1812
Views
Summieren von Zeilen in einer internen Tabelle
von kaim77 » 21.01.2020 13:03 • Verfasst in ABAP® für Anfänger
2
Antw.
25149
Views
Anzahl Zeilen einer internen Tabelle mit Lines
von Tanriverdi » 05.09.2008 11:35 • Verfasst in ABAP® für Anfänger
7
Antw.
3085
Views
Auffrischen einer internen Tabelle aus ALV-Liste
von sapdepp » 13.02.2013 15:53 • Verfasst in ABAP® Core
8
Antw.
5920
Views
ALV-Liste: Einzelne Summen-Felder (bzw. Zeilen) ausgeben
von S.D.E.F. » 12.12.2005 12:19 • Verfasst in ABAP® Core

Ü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.