zwei interne Tabellen zusammenführen => ALV

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

zwei interne Tabellen zusammenführen => ALV

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hallo zusammen,

ich habe eine Frage zur ALV - Erstellung (So weit bin ich vom Lernen nocht nicht), allerdings muss ich mir schon vorher Gedanken machen, ob ich das folgende umsetzen kann:

Es sind zwei Z TAbellen gegeben, z.B.:

Tabelle 1:
ZABTEILUNG
Felder: Abt_NR, Bezeichnung


Tabelle 2:
ZMITARBEITER
Felder: MA_Nr, MA_ABT, Name


Foldgende Einträge sind enthalten:

ZABTEILUNG
1 Enkauf
2 Buchhaltung



ZMITARBEITER
111 1 Max
222 1 Franz
333 2 Hans



Nun sollte ein ALV erstellt werden, dass wie folgt aufgebaut ist:
1 EInkauf 111 Max 222 Franz
2 Buchhaltung 333 Hans


Wenn die Daten nur über Write - Anweisungen ausgegeben werden sollten, könnte ich das ja mit zwei geschachtelten LOOPS erstellen.
Die Ausgabe sollte aber als ALV - erfolgen.

MEINE FRAGEN:
- Kann ich die interenen Tabellen im Programm zusammenfassen (PRoblem: ich weiß zu Beginn des Programms nicht wie viele Spalten für die Mitarbeiter in den ABteilungen benötige? Sind 1 MA enthalten? 2 MA? 3 MA? ....) Die maximale Anzahl der Spalten müsste ich ermitteln (z.B. 3) und dann eine neue interne Tabelle erstellen, die als dynamischen Teil in diesem Fall unter anderem die Felder MA_NR1, Name1, MA_NR2, Name2, MA_NR3, Name3 enthält...
Diese neue interne Tabelle kann ich dann als ALV ausgeben.

- Kann ich vielleich eine gemeinsame interne Tabelle übergehen, indem ich einen ALV - Funktionsbaustein aufrufe, der z.B. 2 interne Tabellen anhand von Kriterien (hier die Abteilungsnummer) zusammenfasst und ausgibt?


Oder hat jemand eine bessere Idee? :-)

Vielen Dank!

Viele Grüße!!

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


Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von a-dead-trousers (Top Expert / 4287 / 214 / 1142 ) »
hi!

Einen Baustein, der zwei Tabelle in eine zusammenfasst, kenn ich jetzt nicht, aber du kannst in ABAP mittels RTTI/RTTC zur Laufzeit beliebige Strukturen/Tabellentypen für die Verwendung im ALV anlegen.
Hier eine kurze Beschreibung
Du musst aber hierfür etwas sattelfest im Bereich der dyn. Programmierung sein, da der Datentyp der daraus entsteht nicht statisch zur Verfügung steht. Daher musst du viel mit untypisierten (ANY, ANY TABLE) Feldsymbolen (FIELD-SYMBOLS) usw. hantieren.

Wichtigste Befehle:
ASSIGN COMPONENT ... OF STRUCTURE ...
LOOP AT ... ASSIGNING ...
CREATE DATA ...

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also da wirst du dir dynamisch die Tabelle bauen müssen - erst eine Grundstruktur mit allen Feldern anlegen - auch mit dem ersten Satz für den MA etc. Dann mit den Run Time Services die Informationen zur Standard Struktur besorgen - diese um die Felder für MA2 & MA3 & MA4 etc. erweitern - einen Datentype mit create anlegen und dann einen Tabellentyp mit create anlegen und dann kannst du deine Felder bestücken - ganz dynamisch.
Das Problem ist - das es genauso viele MA Spalten hat - wie es am meisten MA in einer Abteilung hat - also kann sein - 1.Zeile im ALV ist nur ein MA Feld gefüllt und in der 2.Zeile dann vielleicht 10 - du müsstest also im Vorfeld ermitteln in welcher Abteilung die meisten MA sind - denn genau soviele Spalten - 1 (denn den ersten Satz hat es ja schon) müsstest du noch anhängen.
Oder eine andere Variante - du erzeugst 2 ALV untereinander (der 2. ist unsichtbar erst einmal) - im 1. ALV gibst du alle Abteilungsdaten aus und wen dort eine Zeile angeklickt wird (also einen Hotspot setzen) - dann wird der 2.ALV sichtbar mit allen MA Daten zu dieser Abteilung untereinander.
Oder als Tree - links die Abteilungen untereinander und wenn der Knoten aufgeklappt wird erscheinen dann rechts die MA dazu.
Hoffe damit kannst du was anfangen !

Gruss Jens
thanks Jens

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
guten Morgen,
Mark33 hat geschrieben: Nun sollte ein ALV erstellt werden, dass wie folgt aufgebaut ist:
1 EInkauf 111 Max 222 Franz
2 Buchhaltung 333 Hans
an sich ist es ja eine spannende Aufgabestellung. Beachten sollte man, dass ein ALV in der Breite auf eine bestimmte Anzahl an Spalten begrenzt ist. Muss die Tabelle denn wirklich so aufgebaut werden? Wie viele Mitarbeiter könnten maximal in einer Abteilung vorhanden sein? Und was genau habt ihr mit der Tabelle vor?
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
Alexander D. hat geschrieben:Muss die Tabelle denn wirklich so aufgebaut werden? Wie viele Mitarbeiter könnten maximal in einer Abteilung vorhanden sein? Und was genau habt ihr mit der Tabelle vor?
Je nachdem könnte man auch einen hierarchischen ALV (FuBa: REUSE_ALV_HIERSEQ_LIST_DISPLAY; Klasse: CL_SALV_HIERSEQ_TABLE) verwenden.

Ausgabe wäre dann:
1 EInkauf
111 Max
222 Franz
2 Buchhaltung
333 Hans

Dann bräuchte man sich keine dyn. Tabelle aufbauen.

Eine Gruppierung Nach Abteilung in dem alle MAs in die selbe Listezeile gepackt werden macht wie erwähnt eigentlich keinen Sinn (max. 90 Felder die der ALV per Zeile ausgeben kann). Wenn man je Abteilung/MA eine Zeile im ALV erzeugt und dann nach Abteilung sortiert und dabei das Zusammenfassen der Zellen beim sortieren aktiviert, bekommt man ebenfalls eine gruppierte Ausgabe.
Gruß Hendrik

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hi!

Vielen Dank für eure Antworten!

Die Tabellen Abteilungen und Mitarbeiter sind nur beispielhaft. Welche Tabellen es in Wirklichkeit dann werden, ergibt sich erst zu einem späteren Zeitpunkt, ich soll nun einmal checken was man hier machen kann.

Die beiden verknüpften Tabellen sollen in einer ALV - Liste angezeigt werden, der Anwender kann diese Liste dann beliebig sortieren, es soll eine Statusanzeige (Red, Green, Yellow LED) vorhanden sein ...

Aus Gründen der Übersichtlichkeit ist es wichtig, dass alle Infos in einer Zeile abgebildet werden sollen. (Also wie ich es in meinem ersten Posting geschildert habe).

Die Anzahl der Mitarbeiter dürfte nicht allzu hoch werden (ich sag mal 3 bis 5).

Was meint ihr denn zu diesem Beitrag:

http://tricktresor.de/content/index.php?aID=426 Mit Field Symbols etc. wurde bereits eh schon so ein ähnlicher Vorschlag gepostet? Könnte ich das so machen?


Vielen Dank noch mal für eure Unterstützung :-) Bin noch ein Beginner in der SAP Programmierung und lerne gerne dazu :-)

Viele Grüße

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
Mark33 hat geschrieben: Die beiden verknüpften Tabellen sollen in einer ALV - Liste angezeigt werden, der Anwender kann diese Liste dann beliebig sortieren, es soll eine Statusanzeige (Red, Green, Yellow LED) vorhanden sein ...
Beliebig sortieren hört sich gut an, in deiner Tabellenstruktur kommen aber eigentlich nur die Abteilung und vielleicht noch die LED in Frage. Sortierung über die einzelnen Spalten wo mal eine Person steht und mal nicht macht wohl kaum Sinn
Mark33 hat geschrieben: Aus Gründen der Übersichtlichkeit ist es wichtig, dass alle Infos in einer Zeile abgebildet werden sollen. (Also wie ich es in meinem ersten Posting geschildert habe).
meiner Meinung nach würde das die Übersichtlichkeit kaputt machen. Bessere Ansätze (hierarchischer ALV bzw. Gruppierung nach Abteilung) sind hier schon genannt worden. Es kommt aber natürlich darauf an, was ihr unter Übersichtlichkeit versteht. Was genau habt ihr mit der Tabelle vor, was soll daraus ersichtlich sein?
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von ewx (Top Expert / 4787 / 295 / 629 ) »
Dynamisch ist quatsch in dem Fall! Wie schon JHM es etwas diplomatischer ausgedrückt hat.
Du brauchst einfach eine Struktur "Abteilung - Mitarbeiter"
Einkauf - Max
Einkauf - Moritz
Verkauf - Susi

Wenn du dann nach "Abteilung" sortierst und einstellt, dass die gleiche Werte in der nächsten Zeile nicht angezeigt werden (standard), dann hast du eine saubere Liste ohne dynamischen Schnickschnack.

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hallo!

Die Tabellen Abteilung und Mitarbeiter sollen nur BEISPIELHAFT sein, um leicht klarzumachen, was ich gerne machen möchte.

Welche Tabellen es dann in der realen Umgebung sein sollen, weiß ich (noch) nicht. Ist möchte nur herausfinden welche Möglichkeiten es von der Ausgabe her gibt.

Ziel sollte folgendes sein:
Als Ausgabe für den Anwender soll eine ALV - Liste angeziegt werden. Die Anzahl der Spalten variieren allerdings in der ALV - Liste.
Eine Ausgabe, bei der doppelte Werte ausgeblendet werden, sollte es nicht sein (die Ausgabe sollte nicht untereinander erfolgen), sondern eben nebeninander.
Die Information, dass eine Abteilung Einkauf existiert soll nur einmal im ALV angezeigt werden (auch wenn die Info ausgeblendet sein sollte)

Also so zum Beispiel:
1 Einkauf Franz Hans Max Josef
2 IT Martin Jürgen
3 Einkauf Stefan Hans


Und nicht so:
1 Einfauf Franz
...........Hans
...........Max
...........Josef
2 IT Martin
.... Jürgen
3 EInkauf Stefan
.......... Hans

Was ich nun derzeit wissen möchte, ist folgendes:

Ist das hier der richtige Ansatz um aus den zwei BEISPIEL - Tabellen eine Tabelle zu erstellen oder gibt es hier etwas besseres?

http://tricktresor.de/content/index.php?aID=426

Vielen Dank!!

Viele Grüße!

Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von ewx (Top Expert / 4787 / 295 / 629 ) »
1.
Müssen es zwingend mehrere Spalten sein? Reicht vielleicht auch ein LOOP - CONCATENATE - ENDLOOP?
Was ist der Grund, dass die Daten hintereinander stehen sollen? In der Regel ist das ziemlich unpraktisch.
Sinnvoll wäre es, wenn du z.B. dynamisch eine Liste wie diese erzeugen möchtest:

Code: Alles auswählen.

MATNR  WERK1000 WERK2000 WERK5000
ABC       X           X
DEF                   X
XYZ                            X
Dann hättest du eine übersichtliche Liste bei der du vorher geschaut hast, welche Werke in der Selektion relevant sind und für jedes ein Werk.
Wenn du aber wie in deinem Beispiel 45 MA einer Abteilung zugeordnet hast, dann ist die Liste mit Sicherheit unübersichtlich.
2.
Ja, die Möglichkeit aus dem Tricktresor wäre eine Möglichkeit.
Evtl. hilft dir auch dieser Artikel: CREATE DATA
Bzw. die SAP-Hilfe zu CREATE DATA - HANDLE

Code: Alles auswählen.

DATA: struct_type TYPE REF TO cl_abap_structdescr, 
      comp_tab    TYPE cl_abap_structdescr=>component_table, 
      comp        LIKE LINE OF comp_tab, 
      dref        TYPE REF TO data. 

FIELD-SYMBOLS: <struc> TYPE ANY, 
               <comp>  TYPE ANY. 

comp-name = 'column1'. 
comp-type = cl_abap_elemdescr=>get_c( 40 ). 
APPEND comp TO comp_tab. 

comp-name = 'column2'. 
comp-type = cl_abap_elemdescr=>get_i( ). 
APPEND comp TO comp_tab. 

struct_type = cl_abap_structdescr=>create( comp_tab ). 

CREATE DATA dref TYPE HANDLE struct_type. 

ASSIGN dref->* TO <struc>. 
ASSIGN COMPONENT 'COLUMN1' OF STRUCTURE <struc> TO <comp>. 
<comp> = 'Amount'. 

ASSIGN dref->* TO <struc>. 
ASSIGN COMPONENT 'COLUMN2' OF STRUCTURE <struc> TO <comp>. 
<comp> = 11. 


Re: zwei interne Tabellen zusammenführen => ALV

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Mark33 hat geschrieben:Was ich nun derzeit wissen möchte, ist folgendes:

Ist das hier der richtige Ansatz um aus den zwei BEISPIEL - Tabellen eine Tabelle zu erstellen oder gibt es hier etwas besseres?

http://tricktresor.de/content/index.php?aID=426
Hi Mark,

ja - der Ansatz sollte gehen, ist aber in meinen Augen nicht mehr zeitgemäß, da die resultierende Struktur mittels GENERATE SUBROUTINEPOOL erstellt wird inkl. den daraus folgenden Einschränkungen.
Der modernere/bessere Ansatz ist über die schon von a-d-t und Jens genannten RTTI-Methoden. Da du dich allerdings selbst als noch nicht allzu erfahren in der ABAP-Welt bezeichnest kann ich dir (momentan) nicht dazu raten.

Kurzum. Was du machen möchtest geht durchaus ist aber nicht sonderlich für Frischlinge geeignet.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

2
Antw.
15166
Views
Zwei interne Tabellen zusammenführen
von _Manfred_ » 28.04.2005 13:57 • Verfasst in ABAP® für Anfänger
4
Antw.
9042
Views
Interne Tabellen zusammenführen
von Basler84 » 01.08.2018 16:49 • Verfasst in ABAP® für Anfänger
6
Antw.
3517
Views
Zwei interne Tabellen verarbeiten
von gogi » 20.11.2007 11:14 • Verfasst in ABAP® für Anfänger
5
Antw.
3573
Views
Zwei interne Tabellen mit einem ALV ausgeben
von ABAP_DEV » 29.11.2016 10:37 • Verfasst in ABAP® für Anfänger
4
Antw.
1093
Views
Zwei Datenbanktabellen zusammenführen
von dominoblau » 22.01.2021 11:41 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Updates der Daten, Fehlermeldung
vor 2 Tagen von Egzon gelöst 1 / 65
Wie benutze ich COMMIT WORK richtig
vor 4 Tagen von msfox 17 / 461

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

Updates der Daten, Fehlermeldung
vor 2 Tagen von Egzon gelöst 1 / 65
Wie benutze ich COMMIT WORK richtig
vor 4 Tagen von msfox 17 / 461

Unbeantwortete Forenbeiträge

Updates der Daten, Fehlermeldung
vor 2 Tagen von Egzon 1 / 65
Zwischensumme Adobe Forms
letzen Monat von Lucyalison 1 / 271
Group Items auf einer Filterbar
letzen Monat von Bright4.5 1 / 324