Problem mit tree control...

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

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Problem mit tree control...

Beitrag von Priapso ( / / 0 / 3 ) »
Hi Leute,
hab mal wieder ein Problem ;-) - für Jungs oder Mädels die sich mit dem cl_gui_list_tree auskennen.

folgendes:
ich hab meine t_nodes Tabelle mit allen erforderlichen Daten und Beziehungen gefüllt. Jetzt such ich verzweifelt nach einer Lösung mit der ich diese Tabelle so sortieren kann, dass alle Beziehungen zwischen den einzelnen Knoten dargestellt werden können.

** Pseuocodebeispiel des Aufbaus der Tabellen t_nodes
falsch:
- Unterknoten1 zu Unterknoten1 von A
- Unterknoten1 zu A
- Unterknoten2 zu A
- Knoten A
etc...

richtig:
- Knoten A
- Unterknoten1 zu A
- Unterknoten1 zu Unterknoten1 von A
- Unterknoten2 zu A
etc...

Hoffe das hat jmd. verstanden :-)

Gruß Sebastian

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


Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hi Sebastian,

warum baust du die Tabelle nicht gleich sortiert auf?

ansonsten musst du wahrscheinlich rekursiv jeden Knoten einzeln ordnen.

Gruß, Enno.

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Hi Priapso,

wenn die Struktur nicht zu tief ist würd ich das rekursiv machen.

(Tabelle itab hat ein Feld Zähler vom typ i)

( code ungeprüft direkt hier rein )

Code: Alles auswählen.

1.) Finde Wurzel des Baums (
2.) perform aufbau_baum using wurzel 
                             changing itab.
3.) sort itab by zaehler.

form aufbau_baum 
using p_wurzel type itab_line_type
changing p_itab type itab_table_type.

statics: static_zaehler type i.
data: wa type itab_line_type.

* Aktuellen Wert erstmal mit Zähler versehen
  add 1 to static_zaehler.
  read table p_itab into wa with key eintrag = wurzel-eintrag.
  eintrag-zaehler = static_zaehler.
modify p_itab from wa index sy-tabix.

* Jetzt rekursiv runterhangeln
  loop at p_itab into wa where ( Unterknoten zu p_wurzel ).
    perform aufbau_baum using wa
                                     changing p_itab.
  endloop
Vorsicht falls der Baum in sich schon rekursiv ist - dann gibts kein Ergebnis...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

....sorry aber irgendwie raff ich deinen code nicht :-)

Beitrag von Priapos ( / / 0 / 3 ) »
Hi,

danke für den Lösungsansatz. Trotzdem krieg ich es irgendwie nicht gecoded.
Wäre nett, wenn sich noch jemand erbarmt und mir den code von oben oder auch anders erklären könnte.

@ewx - glaub mir, es war schon schwierig genug die t_nodes überhaupt zu füllen, ich werde auf jedenfall den rekursiven Ansatz gehen - wenn ich es irgendwann noch verstehe :-)

Beitrag von Gast ( / / 0 / 3 ) »
Hi Sebastian,

um was für Daten handelt es sich denn? (damit man mal einen Eindruck von deinen Schwierigkeiten hat.)

Wie viele "Ebenen" hast du?
Ist es immer der gleiche Aufbau (Also z.B. Kunde -> Belegnummer -> Belegposition) oder ist jeder Zweig unterschiedlich?

fragt Enno.

...also...

Beitrag von Priapos ( / / 0 / 3 ) »
Hi nochmal,

okay ich erklärs mal ausführlicher.

meine t_nodes Tabelle ist chaotisch (d.h. vollkommen ungeordnet) -> aber alle Daten sind korrekt und müssen "nur" noch nach Hierarchie geordnet werden.
****
Die Felder auf die es ankommt heißen:
t_nodes-node_key (eindeutiger Schlüssel)
t_nodes-relatkey (verweist auf den übergeordneten Knoten)
-> kann leer sein (ROOTknoten) oder gefüllt (SUBknoten).
Die Tiefe kann beliebig (bestimmt der Anwender über Tabelleneintrag) sein.
****
Ich benötige also eine Idee bzw. ein Stück Code, welche(s) mir meine momentan 45 Einträge umfassende t_nodes in eine Reihenfolge sortiert, welche die Eigentliche Baumstruktur wiederspiegelt.

Ich hoffe, dass mir jetzt jemand weiterhelfen kann.

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Hi Sebastian,

hier mal ein Beispielcoding (leider mit viel code zum Erzeugen des chaotischen Baums) - wenn du mehr oder weniger Einträge haben willst, ändere die Konstante auf einen anderen ( nicht durch 7 teilbaren :D Wert )

Code: Alles auswählen.

REPORT.
CONSTANTS: c_anzahl TYPE i VALUE 100.
TYPES: BEGIN OF ty_tree,
         node_key TYPE tv_nodekey,
         relatkey TYPE tv_nodekey,
         feld1,
         feld2,
* etc
       END OF ty_tree,
       tyt_tree TYPE STANDARD TABLE OF ty_tree.

DATA: t_tree   TYPE tyt_tree,
      tmp_tree TYPE tyt_tree,
      wa_tree  TYPE ty_tree,
      wa2_tree TYPE ty_tree,
      zaehler  TYPE i,
      zaehler2 TYPE i,
      anzahl   TYPE i.

FIELD-SYMBOLS: <tree> TYPE ty_tree.

END-OF-SELECTION.
* Knoten füllen
  DO c_anzahl TIMES.
    CLEAR wa_tree.
    WRITE sy-index TO wa_tree-node_key NO-GROUPING.
    APPEND wa_tree TO tmp_tree.
  ENDDO.
  zaehler = 1.zaehler2 = 1.
* Chaotischer aber konsistenter Baum
  DO c_anzahl TIMES.

    READ TABLE tmp_tree INTO wa_tree INDEX zaehler.
    zaehler = ( zaehler + 6 ) mod c_anzahl + 1.

    IF sy-index = 1.
      APPEND wa_tree TO t_tree.
      ADD 1 TO anzahl.
      CONTINUE.
    ENDIF.

    zaehler2 = ( zaehler2 + 2 ) mod anzahl + 1.
    READ TABLE t_tree INTO wa2_tree INDEX zaehler2.
    ADD 1 TO anzahl.

    wa_tree-relatkey = wa2_tree-node_key.
    APPEND wa_tree TO t_tree.


  ENDDO.
  SORT t_tree BY node_key.

  WRITE:/ 'Vorher (chaotisch)'.
  LOOP AT t_tree INTO wa_tree.
    WRITE:/ wa_tree-node_key,
            wa_tree-relatkey.
  ENDLOOP.
  ULINE.


******  Oberhalb nur zum Erzeugen des chaotischen Baums  ***************
  PERFORM sort_tree CHANGING t_tree.

  WRITE:/ 'Nachher (weniger chaotisch)'.
  LOOP AT t_tree INTO wa_tree.
    WRITE:/ wa_tree-node_key,
            wa_tree-relatkey.
  ENDLOOP.

*&---------------------------------------------------------------------*
*&      Form  sort_tree
*&---------------------------------------------------------------------*
FORM sort_tree CHANGING p_tree TYPE tyt_tree.
  DATA: sort_tree TYPE tyt_tree.

  LOOP AT p_tree INTO wa_tree WHERE relatkey = space.  " Die wurzeln
    PERFORM build_tree USING    wa_tree
                                p_tree
                       CHANGING sort_tree.
  ENDLOOP.

  p_tree = sort_tree.
ENDFORM.                    " sort_tree
*&---------------------------------------------------------------------*
*&      Form  build_tree
*&---------------------------------------------------------------------*
FORM build_tree USING    wa_tree  TYPE ty_tree
                         in_tree  TYPE tyt_tree
                CHANGING out_tree TYPE tyt_tree.

  DATA: tmp_tree TYPE ty_tree.

  APPEND wa_tree TO out_tree.
  LOOP AT in_tree INTO tmp_tree WHERE relatkey = wa_tree-node_key.

    PERFORM build_tree USING tmp_tree
                             in_tree
                       CHANGING out_tree.

  ENDLOOP.

ENDFORM.                    " build_tree
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vielen Dank ....

Beitrag von Priapos ( / / 0 / 3 ) »
.. nochmal !

Seite 1 von 1

Vergleichbare Themen

17
Antw.
8693
Views
ALV Tree Control
von ralf.wenzel » 04.08.2013 21:49 • Verfasst in ABAP® Core
0
Antw.
1715
Views
Verbindungslinien im Tree Control
von Dele » 22.10.2014 16:23 • Verfasst in ABAP Objects®
11
Antw.
6794
Views
Tree Control - Eventhandling
von ralf.wenzel » 13.01.2015 17:50 • Verfasst in ABAP Objects®
8
Antw.
4352
Views
Tree Control Knoten aus Tabelle erzeugen
von Dyrdek » 27.07.2015 14:30 • Verfasst in ABAP® für Anfänger
6
Antw.
6050
Views
Fehlende Funktionen im ALV TREE Control (z. B. Excel)
von eberhard » 23.10.2007 18:26 • Verfasst in ABAP Objects®

Ü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

LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3001
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 1640

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.