Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
kaufmann123
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ralf.wenzel
Code: Alles auswählen.
types: begin of itab_mara,
Materialnummer type MARA-MATNR,
Materialkurztext type MAKT-MAKTX,
Warengruppe type MAKT-MAKTG,
end of itab_mara.
DATA: itab_mara type TABLE OF itab_mara,
wa_mara TYPE itab_mara.
BREAK-POINT.
SELECT MARA~MATNR MAKTX MAKTG
INTO CORRESPONDING FIELDS OF TABLE itab_mara
from MARA JOIN Makt ON mara~matnr = makt~matnr.
sort itab_mara by Materialkurztext.
sort itab_mara by Warengruppe.
LOOP at itab_mara INTO wa_mara.
WRITE: wa_mara-Materialnummer, wa_mara-Materialkurztext, wa_mara-Warengruppe.
NEW-LINE.
ENDLOOP.
Code: Alles auswählen.
types: begin of itab_mara,
Materialnummer type MARA-MATNR,
Materialkurztext type MAKT-MAKTX,
Warengruppe type MAKT-MAKTG,
end of itab_mara.
DATA: itab_mara type TABLE OF itab_mara,
wa_mara TYPE itab_mara.
SELECT MARA~MATNR MAKTX MAKTG
INTO TABLE itab_mara
from MARA JOIN Makt ON mara~matnr = makt~matnr.
sort itab_mara by: Materialkurztext, Warengruppe.
LOOP at itab_mara INTO wa_mara.
WRITE: wa_mara-Materialnummer, wa_mara-Materialkurztext, wa_mara-Warengruppe.
NEW-LINE.
ENDLOOP.
Klar, Du hats ja auch keine WHERE-Bedingung und JOINst die MAKT, also die Texttabelle zur MARA. Damit bekommst Du ein sog. Kreuzprodukt, soll heißen, für jede Materialnummer bekommst Du eine Zeile für jede Sprache, die in der MAKT für das Material gepflegt ist. Du solltest schon die gewünschte Sprache (MAKT-SPRAS) in JOIN oder WHERE einschränken.wennn ich jedoch das prorgramm ausführe stehen manche sachne doppelt drin
Auch das überrascht nicht, denn Deine "Warengruppe" hast Du ja definiert als:und statt der warengruppe steht in der dritten spalte der materialkurztext nochmal in großbuchstaben
Jetzt geh mal in die SE11, schau Dir die Tabelle MAKT an und sieh, was im Feld MAKTG wirklich drinsteht.Warengruppe type MAKT-MAKTG,
Um das noch ein bisschen zu konkretisieren: der CORRESPONDING überträgt Feldname für Feldname. Du könntest also die Felder Deiner internen Tabelle auch MATNR, MAKTX und MAKTG nennen, dann würde es gehen. Speziell in diesem Falle ist es aber so, dass Deine interne Tabelle präzise die Felder in der richtigen Reihenfolge enthält, die Du SELECTierst. Damit kannst Du anstelle von INTO CORRESPONDING FIELDS OF TABLE auch einfach INTO TABLE schreiben. Dann sind SAP die Feldnamen egal und er schreibt Dir einfach Deine Tabelle voll. Das ist sogar performanter, weil der SELECT sich dann nicht jedes einzelne Feld anschauen und das namensgleiche Zielfeld heraussuchen muss. Das geht aber, wie gesagt, nur, wenn Du in Deiner internen Tabelle genau die Felder des SELECTs in genau der Reihenfolge des SELECTs hast, also kein Feld weniger und auch keins mehr!ralf hat geschrieben:Wenn du into corresponding fields selektierst, aber keine korrespondierenden (also namensgleichen) Felder hast, geht das in die Hose. Entweder machst du die Zielfelder namensgleich oder lässt „corresponding fields“ weg.
Nö.ralf hat geschrieben:Die Felder im SELECT haben die falsche Reihenfolge (eine andere als in der itab).