Einfügen zweier interner Tabellen in eine dritte mit LOOP

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

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

Einfügen zweier interner Tabellen in eine dritte mit LOOP

Beitrag von alexkr. (ForumUser / 3 / 0 / 0 ) »
Hallo liebes ABAP-Forum ich bin leider noch neu hier und Azubi im ersten Lehrjahr! Aufgrund dessen das mein Ausbilder zur Zeit nicht zur Verfügung steht wollte ich mich an euch wenden und hoffe eine Antwort zu bekommen.
Es handelt sich dabei um die Aufgabe Daten aus zweierlei Tabellen auszulesen und diese diesmal anstelle von JOIN-Befehlen per Loop in eine dritte interne Tabelle zu integrieren nur leider macht er dies nur bedingt da er sie untereinander ausgibt anstelle sie zu verknüpfen. Ich habe schon im I-Net gegoogelt aber bin zu keinem Ergebnis gekommen. Hier mein Quellcode :

DATA: gt_feldkatalog TYPE lvc_t_fcat,
gs_feldkatalog TYPE lvc_s_fcat,
go_container TYPE REF TO cl_gui_custom_container,
go_alv TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo,
gt_games TYPE STANDARD TABLE OF zsy_games,
gs_games TYPE zsy_games,
gt_publisher TYPE STANDARD TABLE OF zsy_publisher,
gs_publisher TYPE zsy_publisher,
gt_games_publisher TYPE STANDARD TABLE OF zsy_games_publisher,
gs_games_publisher TYPE zsy_games_publisher,
gs_games_publisher2 TYPE zsy_games_publisher,
l_games_publisher LIKE LINE OF gt_games_publisher.

START-OF-SELECTION. "Beginn der Selektion

CALL FUNCTION: 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZSY_GAMES_PUBLISHER' " Dictionary-Struktur
CHANGING
ct_fieldcat = gt_feldkatalog. " Feldkatalog

CALL SCREEN 0009. " Aufruf der DYNPRO mit der Nummer 0009

*----------------------------------------------------------------------*
* MODULE status_0009 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE status_0009 OUTPUT. " Ausgabe der Gui innerhalb der Dynpro

SET PF-STATUS 'GUI_8'. " Einbinden der GUI "GUI_8" in die Dynpro 0009
ENDMODULE. "STATUS_0009 OUTPUT


*----------------------------------------------------------------------*
* MODULE user_command_0009 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0009 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. "user_command_0008 INPUT

*----------------------------------------------------------------------*
* MODULE init_0009 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE init_0009 OUTPUT.
"init_0009 OUTPUT

SELECT gameid gname fsk beschreibung publishid
FROM zsy_games
INTO CORRESPONDING FIELDS OF TABLE gt_games
FOR ALL ENTRIES IN gt_games
WHERE publishid = gt_games-publishid.

SELECT pname publishid land
FROM zsy_publisher
INTO CORRESPONDING FIELDS OF TABLE gt_publisher
FOR ALL ENTRIES IN gt_publisher
WHERE publishid = gt_publisher-publishid
GROUP BY pname publishid land.


* Zusammenfügen der internen Tabellen zu einer ITab


LOOP AT gt_games INTO gs_games.
CLEAR gs_games_publisher.
MOVE-CORRESPONDING gs_games TO gs_games_publisher.
APPEND gs_games_publisher TO gt_games_publisher.
ENDLOOP.

LOOP AT gt_publisher INTO gs_publisher.
CLEAR gs_games_publisher2.
MOVE-CORRESPONDING gs_publisher TO gs_games_publisher2.
APPEND gs_games_publisher2 TO gt_games_publisher.
ENDLOOP.

IF go_alv IS NOT BOUND. "ist die ALV nicht gebunden,...
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

CREATE OBJECT go_alv"... dann erstelle das globale Objekt go_alv
EXPORTING "Exportieren von...
i_parent = go_container. " Verweis auf den Container

IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE. "Entspricht der sy-subrc 0 dann...
CALL METHOD go_alv->set_table_for_first_display " Methode zum Anzeigen der Tabelle im Container
EXPORTING
is_layout = gs_layout "Layout der globalen Struktur
CHANGING
it_outtab = gt_games_publisher " Übergabe der Daten in die Variable gt_games
it_fieldcatalog = gt_feldkatalog " Übergabe der Felder in den Feldkatalog
.
IF sy-subrc = 0.
* Implement suitable error handling here
ENDIF.

ENDIF.

ENDIF.

ENDMODULE. "init_0009 OUTPUT

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


Re: Einfügen zweier interner Tabellen in eine dritte mit LOO

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Die Einträge aus zsy_games und zsy_publisher werdne logischerweise untereinander dargestellt.

Code: Alles auswählen.

LOOP AT gt_games INTO gs_games.
CLEAR gs_games_publisher.
MOVE-CORRESPONDING gs_games TO gs_games_publisher.
APPEND gs_games_publisher TO gt_games_publisher.
ENDLOOP.

LOOP AT gt_publisher INTO gs_publisher.
CLEAR gs_games_publisher2.
MOVE-CORRESPONDING gs_publisher TO gs_games_publisher2.
APPEND gs_games_publisher2 TO gt_games_publisher.
ENDLOOP.
heißt ja stelle beide Tabellen gt_games, gt_publisher untereinander dar.

Zuerst einmal musst du dir die Schlüssel der Tabellen zsy_games, zsy_publisher anschauen.
Wie sollen diese verknüpft werden? Mit welcher Bedingung?

Wenn die Bedingung lautet zsy_games-publishid = zsy_publisher-publishid, dann muss wie folgt verknüpft werden:

Code: Alles auswählen.

loop at gt_games into gs_games.
  clear gs_games_publisher.
  move-corresponding gs_games to gs_games_publisher.
  loop at gt_publisher into gs_publisher where publishid = gs_games-publishid.
    " Felder von gs_publisher in gs_games_publisher übertragen

    append gs_games_publisher to gt_games_publisher.
  endloop.
endloop.

Re: Einfügen zweier interner Tabellen in eine dritte mit LOO

Beitrag von alexkr. (ForumUser / 3 / 0 / 0 ) »
Okay das löst zumindest das Problem das es nicht untereinander ausgegeben wird :D .....
Jedoch gibt er mir die Publisher Daten jetzt gar nicht mehr aus, habe es aber dem angepasst was du da stehen hattest :)
Muus ich dementsprechend noch irgendwas anpassen oder umformen?...

Re: Einfügen zweier interner Tabellen in eine dritte mit LOO

Beitrag von alexkr. (ForumUser / 3 / 0 / 0 ) »
Hab es habe den Move-Corresponding Befehl für die Publisher Struktur vergessen :)
Vielen Dank nochmal damit ist das hier ja gelöst :)

Re: Einfügen zweier interner Tabellen in eine dritte mit LOO

Beitrag von DeathAndPain (Top Expert / 1936 / 256 / 412 ) »
Die Lösung von jocoder gefällt mir aber auch nicht, da es für den inneren LOOP hier keinerlei Veranlassung gibt.

Besser wäre:

Code: Alles auswählen.

loop at gt_games into gs_games.
  clear gs_games_publisher.
  move-corresponding gs_games to gs_games_publisher.
  read table gt_publisher into gs_publisher with key publishid = gs_games-publishid.

" Felder von gs_publisher in gs_games_publisher übertragen

  append gs_games_publisher to gt_games_publisher.
endloop.
Wenn ich unterstelle, dass in den Tabellen gt_publisher und gt_games das drin ist, was der Name suggeriert, dann wäre ein innerer LOOP allenfalls dann angezeigt, wenn der äußere über die gt_publisher geht (da es zu einem Publisher mehrere Spiele, aber nicht mehrere Publisher zu einem Spiel geben wird).

Davon abgesehen sollte man zumindest die innere Tabelle nicht wie in Deinem Beispiel als STANDARD TABLE, sondern als SORTED TABLE mit publishid als Schlüssel definieren, damit die Suche (egal ob per LOOP oder per READ TABLE) effizient wird und nicht jedesmal sequentiell durch die ganze interne Tabelle rasen muss.

Und schließlich solltest Du Deine SAP-Releasestand prüfen. Wenn er 7.40 oder höher ist, dann ist das Coding ziemlich oldschool und lässt sich mit den per Release 7.40 neu eingeführten Befehlen wesentlich eleganter gestalten. Gerade wenn Du ABAP neu lernst, solltest Du Dir nach Möglichkeit keinen veralteten Programmierstil antrainieren.

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1713
Views
SPALTEN INTERNER TABELLEN NACHEINANDER AUSLESEN mit einer lOOP.
von Geny » 15.06.2020 15:47 • Verfasst in ABAP® für Anfänger
20
Antw.
6232
Views
Zusammenführen zweier int Tabellen
von Willow » 18.01.2005 10:29 • Verfasst in Basis
9
Antw.
2762
Views
Durchlaufen zweier Tabellen
von Spookykid » 11.04.2011 11:22 • Verfasst in ABAP® für Anfänger
2
Antw.
2317
Views
Vergleich Inhalt zweier DB-Tabellen
von schuessler » 12.07.2007 10:40 • Verfasst in ABAP® Core
4
Antw.
2171
Views
Bestimmte Spalten zweier Tabellen abgleichen
von kaufikauf » 15.08.2014 08:55 • Verfasst in ABAP® für Anfänger

Ü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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 5 Stunden von Bright4.5 1 / 99
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1743
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8347