wie kan man zwei interen tabellen verbinden?

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

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

wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Hi Experten,
ich habe zwei interne tabellen t1 und t2 mit struktur wa1 und wa2
in t1 habe ich 3 materialnummer , und bewegungsart 101
in t2 habe ich 4 materialnummer, und bewegungsart 261
ich mochte die beide tabelen verbinden mit key materialnummer von t1

im ergebnis sol sein: nur materialen von t1 mit ergenzung von t2
material 1 101
material 1 261
material 2 101
material 2 261
material 3 101

jetzt habe ich loop benutz:


FIELD-SYMBOLS <wa1> TYPE t_tab.
" Hier typ der Tabelle t1


Loop At t1 ASSIGNING <wa1>.


READ TABLE t2 INTO wa2 with TABLE KEY matnr = <wa1>.
if sy-subrc = 0.
move-corresponding wa2 TO <wa1>.
else.
ENDLOOP.

bekomme ich folgendes:
material 1 261 aber soll hier 101 sein
material 1 261
material 2 261 aber soll hier 101 sein
material 2 261
material 3 101

bitte um hilfe

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


Re: wie kan man zwei interen tabellen verbinden?

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
Hallo,
also entweder gibst du die BWA aus T1 vor dem move-corresponding aus (denn dadurch überschreibst du die Felder wieder) oder du nutzt ein 2. field-symbol, in das du die Daten aus t2 schiebst.

lg khb

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
khb hat geschrieben:Hallo,
also entweder gibst du die BWA aus T1 vor dem move-corresponding aus (denn dadurch überschreibst du die Felder wieder) oder du nutzt ein 2. field-symbol, in das du die Daten aus t2 schiebst.

lg khb
Danke für antwort, leider habe ich nicht verstanden,
kanns du bischin mehr dazu schreiben lieber mit Code.

Danke

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
klar, kann ich machen. Kannst Du deinen Code posten (mit der write-Ausgabe?

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
khb hat geschrieben:klar, kann ich machen. Kannst Du deinen Code posten (mit der write-Ausgabe?
*-----------------------------------------------------------------------
* Beginn Datendeklarationen fuer den ALV
*-----------------------------------------------------------------------
*
*-----------------------------------------------------------------------
TYPE-POOLS: slis.
DATA:
g_repid LIKE sy-repid,
it_join_feldkatalog TYPE slis_t_fieldcat_alv,
wa_feldkatalog TYPE LINE OF slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
wa_aktuelle_zeile LIKE LINE OF wa_join.
*-----------------------------------------------------------------------
* *Ende Datendeklarationen fuer den ALV
*-----------------------------------------------------------------------

*--------------------------------------------------------
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME
TITLE text-002.
SELECT-OPTIONS:

s_mblnr FOR it_join-mblnr,
s_budat FOR it_join-budat_mkpf, "DEFAULT sy-datum,
s_matnr FOR it_join-matnr.
PARAMETERS:
p_werks TYPE werks DEFAULT 1001 OBLIGATORY,
p_lgort TYPE lgort_d DEFAULT 1020 OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK a.
*--------------------------------------------------------
*
INITIALIZATION.
* Tagesdatum vorbelegen
CLEAR s_budat.
s_budat-sign = 'I'.
s_budat-option = 'EQ'.
s_budat-low = sy-datum - 14.
s_budat-HIGH = sy-datum.
APPEND s_budat.
*--------------------------------------------------------
START-OF-SELECTION.

SELECT
mseg~matnr
mseg~menge
mard~labst
mara~zzepmat
marc~ekgrp
mseg~aufnr
mseg~ebeln
mseg~mblnr
mseg~bwart
mseg~buzei
mseg~werks
mseg~lgort
mseg~budat_mkpf
mseg~cputm_mkpf
makt~MAKTX


FROM mseg
JOIN mara ON mseg~matnr = mara~matnr
JOIN mard ON mara~matnr = mard~matnr
JOIN marc ON mard~matnr = marc~matnr
join makt on mseg~matnr = makt~matnr
INTO CORRESPONDING FIELDS OF TABLE t1
WHERE mseg~matnr in s_matnr
and mseg~bwart = bwart1


*and mseg~matnr in s_matnr and mseg~bwart = bwart1 AND mseg~matnr in s_matnr and mseg~bwart not in ('261') )
and mseg~budat_mkpf IN s_budat
AND mseg~werks = p_werks
AND mseg~lgort = p_lgort
AND mard~lgort = p_lgort.

SORT t1 BY matnr bwart budat_mkpf.

*-----------------------------------------------------------------
SELECT
mseg~matnr
mseg~menge
mard~labst
mara~zzepmat
marc~ekgrp
mseg~aufnr
mseg~ebeln
mseg~mblnr
mseg~bwart
mseg~buzei
mseg~werks
mseg~lgort
mseg~budat_mkpf
mseg~cputm_mkpf
makt~MAKTX


FROM mseg
JOIN mara ON mseg~matnr = mara~matnr
JOIN mard ON mara~matnr = mard~matnr
JOIN marc ON mard~matnr = marc~matnr
join makt on mseg~matnr = makt~matnr
INTO CORRESPONDING FIELDS OF TABLE t2

WHERE mseg~matnr in s_matnr
and mseg~bwart = bwart2
and mseg~budat_mkpf BETWEEN s_budat-low and sy-datum
AND mseg~werks = p_werks
AND mseg~lgort = p_lgort
AND mard~lgort = p_lgort.


SORT t2 BY matnr bwart budat_mkpf.


FIELD-SYMBOLS <wa1> TYPE t_tab.
FIELD-SYMBOLS <wa2> TYPE t_tab.
" Hier typ der Tabelle itab


Loop At t1 ASSIGNING <wa1>.


READ TABLE t2 INTO wa2 with TABLE KEY matnr = <wa1>."-matnr.

if sy-subrc = 0.
*move-corresponding <wa2>-bwart TO <wa1>-bwart.
add-corresponding <wa2>-bwart TO <wa1>.
*modify t1 FROM wa2.
* APPEND wa1 to t1.
else.

endif.

*Loop At t2 INTO wa2
*
*where
*matnr = wa2-matnr.
*APPEND wa2 to t1.
ENDLOOP.



*----------------------------------------------------
IF sy-subrc <> 0.
MESSAGE 'keine Daten, bitte Neueingaben'(001) TYPE 'I'.
ENDIF.


*-----------------------------------------------------------------------
* Beginn ALV-Ausgabe
*-----------------------------------------------------------------------
*-----------------------------------------------------------------------
* Feldkatalog fuellen.
PERFORM feldkatalog_fuellen.

* Layout bestimmen.
PERFORM layout_allg_build USING gs_layout.

* Daten als ALV-Liste anzeigen.
PERFORM alv_anzeigen.


*-----------------------------------------------------------------------
* Beginn Unterprogramme fuer den ALV

*-----------------------------------------------------------------------

*-----------------------------------------------------------------------
* Unterprogramm fuer Ausgabe der ALV-Liste
*-----------------------------------------------------------------------
FORM alv_anzeigen.

g_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_save = 'X' "Soll der Benutzer Varianten der erzeugten Liste abspeichern können?
i_grid_title = 'WE und Verbrauch'
it_fieldcat = it_join_feldkatalog
i_callback_user_command = 'REAKTION_AUF_DOPPELKLICK'
is_layout = gs_layout
TABLES
t_outtab = t1.
SET COUNTRY 'D'.

ENDFORM. "alv_anzeigen.

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
FIELD-SYMBOLS: <wa1> TYPE t_tab.

Loop At t1 ASSIGNING <wa1>.
READ TABLE t2 INTO wa2 with TABLE KEY matnr = <wa1>.
if sy-subrc = 0.
write: / <wa1>-Matnr, / <wa1>-Matnr, / <wa1>-BWA.
move-corresponding wa2 TO <wa1>.
write: / <wa1>-Matnr, / <wa1>-Matnr, / <wa1>-BWA.
else.
write: / <wa1>-Matnr, / <wa1>-Matnr, / <wa1>-BWA.
ENDLOOP.

oder
FIELD-SYMBOLS: <wa1> TYPE t_tab,
<wa2> TYPE t_tab.

Loop At t1 ASSIGNING <wa1>.
READ TABLE t2 INTO wa2 with TABLE KEY matnr = <wa1>
assigning <wa2>.
if sy-subrc = 0.
write: / <wa1>-Matnr, / <wa1>-Matnr, / <wa1>-BWA.
write: / <wa2>-Matnr, / <wa2>-Matnr, / <wa2>-BWA.
else.
write: / <wa1>-Matnr, / <wa1>-Matnr, / <wa1>-BWA.
ENDLOOP.

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
okay, dann statt der write-Ausgabe die sätze in eine 3. Tabelle schreiben und diese dann im ALV ausgeben.

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
khb hat geschrieben:okay, dann statt der write-Ausgabe die sätze in eine 3. Tabelle schreiben und diese dann im ALV ausgeben.
Danke,
leider bekomme ich wieder alv , wo bwa von t2 überschreibt bwa von t1
50190009 261 03.07.2014 hier soll 101 staat 261
50190009 261 03.07.2014
50190010 261 03.07.2014 hier soll 101
50190010 261 03.07.2014
51697267 101 10.07.2014

Weist du , wo kann fehler sein?

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
Du überschreibst wahrscheinlich. deine Inhalte in der Tabelle. Poste doch nur mal das Coding vom Füllen der internen Tabellen

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
autohandel7 hat geschrieben: in t1 habe ich 3 materialnummer , und bewegungsart 101
in t2 habe ich 4 materialnummer, und bewegungsart 261
ich mochte die beide tabelen verbinden mit key materialnummer von t1
Kannst du nicht BWART 101 und 261 in einem Select ermitteln? Da fehlt ein wenig das Hintergrundwissen was du genau ausgeben willst.
autohandel7 hat geschrieben: im ergebnis sol sein: nur materialen von t1 mit ergenzung von t2
Kann es denn mehr als einen Satz zu einem Material in t1 geben? Also zwei 101 Buchungen zu einem Material.
Kann es mehr als eine 261 Buchung zu einem Material in t2 geben?

Code: Alles auswählen.


* Neue Where Bedingung, da du nicht die 261 mit verarbeiten willst:
Loop At t1 ASSIGNING <wa1> WHERE bwart = 101.

READ TABLE t2 INTO wa2 with TABLE KEY  matnr = <wa1>-matnr.
 if sy-subrc = 0.
*   move-corresponding wa2 TO <wa1>. Durch den Move überschreibst du die Werte in t1, du willst aber einen neuen Satz
    APPEND wa2 to t1.  "Wenn beide Tabellen den gleichen Typ haben, kann die gelesene Zeile einfach angehangen werden
  else.
  endif.
ENDLOOP.

* Jetzt noch sortieren, da in T1 zuerst die 101-Sätze stehen und dann erst die 261-Sätze:
SORT t1 BY matnr bwart.
Das Coding sollte deine beiden Tabellen verknüpfen, ist aber nach meiner Glaskugel wahrscheinlich der falsche Weg. Für eine genauere Diagnose musst du aber mehr Infos liefern.
Gruß Hendrik

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
khb hat geschrieben:Du überschreibst wahrscheinlich. deine Inhalte in der Tabelle. Poste doch nur mal das Coding vom Füllen der internen Tabellen
Danke für Antwort,
wie gesagt ich habe zwei Interen Tabellen t1 und t2
bei loop vergleich ich t1 (hat materialnumme und bwa 101)mit t2(hat materialnummer und bwa 261) per materialnummer
dann soll ich solche ergebnis bekommen in t1(zeig mir alle materialnummer, wo gibt es bwa 101 oder 101 und 261, kein material nur mit 261 ), in loop alles korrekt findet aus zwei tabellen (ich habe 4matrialen, und nur 3 passt mir) aber die bwa von zweite tabele uberschreibt bwa von erste. I soll das bekomen:
material 1 101
material 1 261
material 2 101
material 2 261
material 3 101
und bekomme:

material 1 261 aber soll hier 101 sein
material 1 261
material 2 261 aber soll hier 101 sein
material 2 261
material 3 101

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
JHM hat geschrieben:
autohandel7 hat geschrieben: in t1 habe ich 3 materialnummer , und bewegungsart 101
in t2 habe ich 4 materialnummer, und bewegungsart 261
ich mochte die beide tabelen verbinden mit key materialnummer von t1
Kannst du nicht BWART 101 und 261 in einem Select ermitteln? Da fehlt ein wenig das Hintergrundwissen was du genau ausgeben willst.
autohandel7 hat geschrieben: im ergebnis sol sein: nur materialen von t1 mit ergenzung von t2
Kann es denn mehr als einen Satz zu einem Material in t1 geben? Also zwei 101 Buchungen zu einem Material.
Kann es mehr als eine 261 Buchung zu einem Material in t2 geben?

Code: Alles auswählen.


* Neue Where Bedingung, da du nicht die 261 mit verarbeiten willst:
Loop At t1 ASSIGNING <wa1> WHERE bwart = 101.

READ TABLE t2 INTO wa2 with TABLE KEY  matnr = <wa1>-matnr.
 if sy-subrc = 0.
*   move-corresponding wa2 TO <wa1>. Durch den Move überschreibst du die Werte in t1, du willst aber einen neuen Satz
    APPEND wa2 to t1.  "Wenn beide Tabellen den gleichen Typ haben, kann die gelesene Zeile einfach angehangen werden
  else.
  endif.
ENDLOOP.

* Jetzt noch sortieren, da in T1 zuerst die 101-Sätze stehen und dann erst die 261-Sätze:
SORT t1 BY matnr bwart.
Das Coding sollte deine beiden Tabellen verknüpfen, ist aber nach meiner Glaskugel wahrscheinlich der falsche Weg. Für eine genauere Diagnose musst du aber mehr Infos liefern.

Danke,
schon besser, leider alle sätze doppelt, weisst du warum?

50190009 101
50190009 101
50190009 261
50190009 261
50190010 101
50190010 101
50190010 261
50190010 261
51697267 101

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
autohandel7 hat geschrieben: schon besser, leider alle sätze doppelt, weisst du warum?
Soweit reicht meine Glaskugel nicht. Zeig etwas Coding und man kann evtl. helfen.
Hast du mal im Debugger geschaut, was da ab geht?
Gruß Hendrik

Re: wie kan man zwei interen tabellen verbinden?

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
JHM hat geschrieben:
autohandel7 hat geschrieben: schon besser, leider alle sätze doppelt, weisst du warum?
Soweit reicht meine Glaskugel nicht. Zeig etwas Coding und man kann evtl. helfen.
Hast du mal im Debugger geschaut, was da ab geht?
Guten Tag,
vielen Dank für dein Hilfe alles ok,
Fehler war hier:
Bei Selkt soll noch "and makt~SPRAS = 'D'." sprachschlüssel hinzufigt, sonnst bei t1 alle felder doppelt.
:up: :up: :up:

Seite 1 von 1

Vergleichbare Themen

7
Antw.
873
Views
Tabellen verbinden
von NLengner » 09.05.2019 10:01 • Verfasst in ABAP® für Anfänger
6
Antw.
2721
Views
Tabellen verbinden
von ferox » 15.02.2006 09:31 • Verfasst in SAP - Allgemeines
9
Antw.
6825
Views
mehrere Tabellen 'verbinden'
von MarkusW » 09.05.2007 14:36 • Verfasst in ABAP® Core
2
Antw.
5001
Views
OPEN SQL JOIN / Eine Tabelle mit >1 Tabellen verbinden
von Michael71 » 30.01.2012 13:02 • Verfasst in ABAP® Core
7
Antw.
3726
Views
Zwei Tabellen joinen (für ALV)?
von k4lisp3r4 » 22.01.2007 16:33 • 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

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

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

Regex in where
vor 4 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 17 Stunden von Bright4.5 3 / 1486

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821