Verkettete Liste auslesen/verarbeiten

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

Verkettete Liste auslesen/verarbeiten

Beitrag von JetGum (ForumUser / 13 / 0 / 0 ) »
Hallo Ihr,

ich benötige gerade einmal einige Denkanstöße, weil ich bei einem Punkt gerade nicht sor echt weiterkomme...
Es geht darum, dass ich versuche eine Hierarchie in ein relationales Datenmodell zu pressen. Dabei habe ich die Baumstruktur (es handelt sich dabei um eindeutige Nummern im Baum) in folgendes DB-Schema gepresst:

- MANDT --> Schlüssel
- NUMMER --> Schlüssel
- VORGÄNGER-NUMMER
- LEVEL

Da jede Nummer nur einen Vorgänger besitzen kann, speichere ich also jeweils den oberen Knoten zu einer Nummer in dieser Tabelle ab. Zusätzlich hinterlege ich noch als Zusatzinformation das Level der aktuellen Hierarchieebene (startend bei 1). Insgesamt gibt es 8 Hierarchie-Ebenen...

Und nun kommt mein Problem: Ich bind erzeit verzweifelt dabei mir einen kleinen Algorithmus zu überlegen, welcher es mir ermöglicht diese Liste zunächst einmal sauber auf einer WRITE-Liste auszugeben. Also quasi Stufe 1, dann die unteren Elemente der Stufe ein wenig eingerückt und jeweils wieder in die Unterpunkte, also in dieser Form:

- 4711
- 4712
- 4713
- 4714
- 4715
- 4716
- 4717
- 4718
- 5555
- 6666
- 7777

usw.

(Nachtrag: ok das Forum stellt diese Eindrückungen leider nicht dar :( )

Ich denke ihr wisst was ich meine... In einem 2. Schritt möchte ich dies dann auch in einem hierarchischen ALV ausgeben, aber nun scheitere ich derzeit auch daran die eingelesenen Daten in der optimalen Weise so auszulesen, damit ich es in eine ALV-Tabelle in der richtigen Art und Weise reinpacke (bzw. korrekt auf der Write-Liste ausgebe)...

Ich denke es wird wohl in irgend einer Form ein rekursiver Aufruf notwendig sein, um das ganze möglichst generisch zu halten.

Vielleicht habt ihr soetwas in die Richtung ja bereits einmal implementiert und könnt mir Tipps geben :)

Viele Grüße und vielen Dank!

Achja und frohes Fest :)

JetGum

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


Re: Verkettete Liste auslesen/verarbeiten

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hi JetGum,

so ganz kann ichs zwar nicht nachvollziehen was du willst.

Aber du willst ja nur Denkanstösse ;)

Du lädst doch ALLE Informationen in eine Int. Tabelle?

Sortier diese doch einfach nach Nummer und Vorgängernummer und Level.

Und Ausgeben (mit Write, also standard liste)

Gruppenwechsel nutzen.

At NEW.
AT LAst.
AT End.

etc. musste dir mal anschauen welche du da benötigst...

Beim ALV sortierst du die liste ebenfalls und legst dir dann ein Feldkatalog und ein Layout an, der die Ausgabe dann erstellt wie du willst.

Also die Datentabelle selber würd ich nicht verändern.

Gruß
Markus


Und auch ein Frohes Fest! ;)

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo JetGum,
falls -wie ich annehme- Deine Nummern keinen Hierarchieschlüssel darstellen und somit eine Sortierung danach nur die Einfügereihenfolge im Baum, aber nicht die Baumhierarchie darstellt könntest Du ja die Tabelle etwas aufblähen so wie die PRHI zum Beispiel, die UP DOWN LEFT RIGHT kennt und im DOWN der oberen Hierarchiestufe auf die am weitesten links stehende Nummer der darunterliegenden Stufe verweist, alle der darunterliegenden Stufe in UP aber auf das darüber liegende Element.

Gesegnete Weihnachten!

Thomas R.

Re: Verkettete Liste auslesen/verarbeiten

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
JetGum hat geschrieben:Ich denke es wird wohl in irgend einer Form ein rekursiver Aufruf notwendig sein, um das ganze möglichst generisch zu halten.
Wenn ich deinen Aufbau richtig verstehe suchts du sowas etwas:

Code: Alles auswählen.

REPORT  ztest_tree.
TYPES: t_c TYPE c LENGTH 4,
       BEGIN OF ts_tree,
         nummer TYPE t_c,
         vornum TYPE t_c,
         level  TYPE i,
       END   OF ts_tree,
       tt_tree TYPE TABLE OF ts_tree.

DATA: gt_tree TYPE tt_tree,
      gw_tree TYPE ts_tree.

START-OF-SELECTION.
* Interne Tabelle füllen
  gw_tree-nummer = '1000'.
  gw_tree-level  = '1'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1101'.
  gw_tree-vornum  = '1000'.
  gw_tree-level  = '2'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1111'.
  gw_tree-vornum  = '1101'.
  gw_tree-level  = '3'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1121'.
  gw_tree-vornum  = '1111'.
  gw_tree-level  = '4'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1122'.
  gw_tree-vornum  = '1111'.
  gw_tree-level  = '4'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1123'.
  gw_tree-vornum  = '1111'.
  gw_tree-level  = '4'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1112'.
  gw_tree-vornum  = '1102'.
  gw_tree-level  = '3'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1102'.
  gw_tree-vornum  = '1000'.
  gw_tree-level  = '2'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '1103'.
  gw_tree-vornum  = '1000'.
  gw_tree-level  = '2'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '2000'.
  gw_tree-level  = '1'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '2100'.
  gw_tree-vornum  = '2000'.
  gw_tree-level  = '2'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '2100'.
  gw_tree-vornum  = '2000'.
  gw_tree-level  = '2'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

  gw_tree-nummer = '3000'.
  gw_tree-level  = '1'.
  APPEND gw_tree TO gt_tree. CLEAR gw_tree.

* Root:
  WRITE: / 'Nummer', 'VorNummer', 'Level'.
* 1. Level
  LOOP AT gt_tree INTO gw_tree WHERE level = '1'.
    WRITE: / gw_tree-nummer, gw_tree-vornum, gw_tree-level.
*   Nächstes Level mittels Rekursion ermitteln
    PERFORM get_next_level USING gw_tree-nummer
                                 gw_tree-level
                                 gt_tree.
  ENDLOOP.

FORM get_next_level USING p_nummer TYPE t_c
                          p_level  TYPE i
                          pt_tree  TYPE tt_tree.

  DATA: lw_tree TYPE ts_tree,
        l_level TYPE i,
        l_einschub TYPE string.

  CLEAR: l_level, l_einschub.
* Einschub aufbauen
  l_level = p_level + 1.
  DO p_level TIMES.
    CONCATENATE l_einschub `  ` INTO l_einschub.
  ENDDO.

  LOOP AT pt_tree INTO lw_tree WHERE vornum = p_nummer
                                 AND level  = l_level.
    WRITE: / l_einschub NO-GAP,  lw_tree-nummer, lw_tree-vornum, lw_tree-level.
*   Nächstes Level mittels Rekursion ermitteln
    PERFORM get_next_level USING lw_tree-nummer
                                 lw_tree-level
                                 pt_tree.

  ENDLOOP.
ENDFORM.                    "get_next_level
Ausgabe ist dann:

Code: Alles auswählen.

Nummer VorNummer Level      
1000               1        
  1101 1000          2      
    1111 1101          3    
      1121 1111          4  
      1122 1111          4  
      1123 1111          4  
  1102 1000          2      
    1112 1102          3    
  1103 1000          2      
2000               1        
  2100 2000          2      
  2100 2000          2      
3000               1        
Gruß Hendrik

Beitrag von JetGum (ForumUser / 13 / 0 / 0 ) »
Hallo Ihr, danke schonmal für die ersten Hinweise...

Ob ich mit Gruppenverarbeitung unbedingt weiterkomme, muss ich mal noch gründlich überlegen, aber am besten ich gebe mal ein konkretes Beispiel aus dieser Tabelle: siehe Anhang, da Formatierung ja hier nur eingeschränkt funktioniert...

Die ITAB kann ich selbstverständlich erweitern, das sind jetzt quasi nur die Daten, wie sie in der DB-Tabelle stehen...

Vielen Dank :)

Beitrag von JetGum (ForumUser / 13 / 0 / 0 ) »
Hallo Hendrik,

irgendwie hab ich Deine Antwort erst jetzt gesehen, vielen Dank dafür, ich denke das ist auf jeden Fall eine mögliche Lösung - klasse! :)

Werde diese auf jeden Fall einmal testen... Mit dem Algorithmus kann ich ja dann quasi auch die ALV-Tabellen füttern...

Frohes Fest wünsch ich dir/euch :)

Viele Grüße
Jens

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1693
Views
Textdateien parallel auslesen u. verarbeiten
von kbit100 » 16.12.2015 11:42 • Verfasst in ABAP® für Anfänger
1
Antw.
3353
Views
ABAP Dump auslesen und weiter verarbeiten
von thosch » 08.08.2007 10:01 • Verfasst in ABAP® Core
0
Antw.
1872
Views
Verkettete DropDownBoxen?
von Karlito » 06.03.2008 11:36 • Verfasst in Web-Dynpro, BSP + BHTML
1
Antw.
1893
Views
Langtext in RFBIBL00 verarbeiten
von hai_friedrich » 04.09.2008 10:27 • Verfasst in ABAP® für Anfänger
4
Antw.
11392
Views
Werte im select mit IN verarbeiten
von kaim77 » 10.05.2013 12:32 • 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

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

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

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2402
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8986