hi!
Also ich persönlich halte mich von den (ALV)Tree-Controls fern.
Ich würde dir eher die Tree-Model-Klassen empfehlen.
Die gibts auch in List/Item und Column Ausprägung.
Der Vorteil bei den Model-Klassen ist, das du einen bel. langen String als Knoten-Namen verwenden kannst.
Bei den Control-Klassen bist du glaub ich auf 10-20 Zeichen beschränkt.
Intern bauen dann die Model-Klassen, aber trotzdem ein Control auf, dass du zur Anzeige bringen kannst (CREATE_TREE_CONTROL)
Ein weiterer großer Benefit der Model-Klassen ist außerdem, dass sie keine Kurzdumps verursachen wenn du einen Fehler in der Struktur deiner Knoten (Hierarchie fehlerhaft, Parent-Knoten existiert nicht, usw.) hast, sondern sie geben eine detailierte Meldung aus, anhand der du sofort ablesen kannst wo der Fehler liegt.
Nun zu deinem Problem:
Ich würde nur eine Tabelle machen.
Code: Alles auswählen.
types begin of ts_data,
main type string, "Hauptkategorie
sub type string, "Unterkategorie
appl type abap_bool, "nicht zutreffend
item type string, "Eintrag
value type abap_bool, "der Wert wurde ausgewählt
end of ts_data
Den Schlüssel für die Knoten kannst du dann so aufbauen
Code: Alles auswählen.
concatenate <ls_data>-main <ls_data>-sub <ls_data>-item into ld_key separated by '_'.
Und wenn du aus dem Knotenschlüssel wieder den Zugriffsschlüssel für die tabelle haben willst
Code: Alles auswählen.
split ld_key at '_' into <ls_data>-main <ls_data>-sub <ls_data>-item.
Wie gesagt, dass geht nur bei den Tree-Modell-Klassen weil die einen bel. langen Schlüssel ermöglichen.
Bei den Control-Klassen musst du zusätzlich noch eine Mapping zwischen Tabellenschlüssel und Knotenschlüssel einbauen.
lg ADT
P.S.: Für Fortgeschrittene: Bei den Tree-Modell-Klassen könntest man sogar theoretisch ohne interne Tabelle auskommen. Die bieten nämlich bei den Knoten die Möglichkeit an ein "USEROBJECT" zu speichern. Da könnte man dann je Knoten die Datenzeilen der Tabelle ablegen. Nach der ganzen Verarbeitung muss man dann nur noch aus der Knotenliste wieder all jene mit einen hinterlegten Objekt auslesen und daraus wieder eine Daten-Tabelle zusammenbauen.