Code: Alles auswählen.
TYPES: BEGIN OF ty_test,
matnr TYPE marc-matnr,
werks TYPE marc-werks,
ekgrp TYPE marc-ekgrp,
matkl TYPE mara-matkl,
mtart TYPE mara-mtart,
meins TYPE mara-meins,
maktx TYPE makt-maktx,
lbkum TYPE mbew-lbkum,
berid TYPE mdlg-berid,
dtnum TYPE mdkp-dtnum,
END OF ty_test.
DATA: ls_outtab TYPE ty_outtab,
lt_outtab TYPE TABLE OF ty_outtab,
ls_marc TYPE marc,
lt_marc TYPE TABLE OF marc,
ls_test TYPE ty_test,
lt_test TYPE TABLE OF ty_test,
ls_mdlg TYPE mdlg,
lt_mdlg TYPE TABLE OF mdlg.
*At Selection-screen
SELECTION-SCREEN BEGIN OF BLOCK start WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: so_matnr FOR ls_marc-matnr DEFAULT '30660'.
SELECT-OPTIONS: so_werks FOR ls_marc-werks DEFAULT '2200'.
SELECT-OPTIONS: so_berid FOR ls_mdlg-berid DEFAULT '2200'.
SELECTION-SCREEN END OF BLOCK start.
SELECT a~matnr,
a~werks,
a~ekgrp,
b~matkl,
b~mtart,
b~meins,
c~maktx,
d~lbkum,
e~berid,
f~dtnum
FROM marc AS a
INNER JOIN mara AS b
ON a~matnr = b~matnr
INNER JOIN makt AS c
ON a~matnr = c~matnr
INNER JOIN mbew AS d
ON a~matnr = d~matnr
AND a~werks = d~bwkey
INNER JOIN mdlg AS e
ON a~werks = e~werks
INNER JOIN mdkp AS f
ON a~werks = f~plwrk
AND a~matnr = f~matnr
WHERE a~matnr IN @so_matnr
AND a~werks IN @so_werks
AND e~berid IN @so_berid
INTO TABLE @lt_test.
DELETE ADJACENT DUPLICATES FROM lt_test.
cl_demo_output=>display( lt_test ).
Code: Alles auswählen.
SELECT a~matnr,
a~werks,
a~ekgrp,
b~matkl,
b~mtart,
b~meins,
d~lbkum,
e~berid,
f~dtnum
FROM marc AS a
INNER JOIN mara AS b
ON a~matnr = b~matnr
INNER JOIN t001w AS c
ON a~werks = c~werks
INNER JOIN mbew AS d
ON a~matnr = d~matnr
AND c~bwkey = d~bwkey
INNER JOIN mdlg AS e
ON a~werks = e~werks
INNER JOIN mdkp AS f
ON a~werks = f~plwrk
AND a~matnr = f~matnr
WHERE a~matnr IN @so_matnr
AND a~werks IN @so_werks
AND e~berid IN @so_berid
AND d~bwtar = @space
INTO TABLE @lt_test.
IF sy-subrc <> 0.
RETURN.
ENDIF.
SELECT matnr, maktx FROM makt
FOR ALL ENTRIES IN @lt_test
WHERE matnr = @lt_test-matnr AND spras = @sy-langu
INTO TABLE @DATA(material_texts).
LOOP AT lt_test ASSIGNING FIELD-SYMBOL(<material_entity>).
READ TABLE material_texts REFERENCE INTO DATA(material_text)
WITH KEY matnr = <material_entity>-matnr.
IF sy-subrc = 0.
<material_entity>-maktx = material_text->*-maktx.
ENDIF.
ENDLOOP.
Hast du eine Quelle hierfür? Ich benutze öfters Joins mit mehr als 5 Tabellen und hatte noch nie Probleme. Und performance-technisch läuft das auch immer recht flott (sofern die Join-Bedingungen sauber und möglichst eindeutig sind, natürlich) - auch wenn laut SAP Hilfe bei Joins der Buffer umgangen wird.jocoder hat geschrieben: ↑16.02.2022 11:524. JOINs sollten nach Möglichkeit nicht mehr als 5 Tabellen enthalten, sonst kann es zu Laufzeitfehlern kommen. Diese Grenze ist nicht in Stein gemeißelt, bei kleinen Customizing-Tabellen kann man auch höher gehen, bei großen Tabellen ist dies nicht zu empfehlen.
Vielen Dank für die Antwort. Diesbezüglich müsste aber doch wenn ich nur einen Wert in meiner SELECT OPTIONS eintrage, auch die gleiche Ausgabe haben oder wieso ist im ersten Screenshot nur eine Zeile?jocoder hat geschrieben: ↑16.02.2022 11:525. Im Screenshoot sieht es danach aus, als ob die Tabelle MDLG mehrere Lagerorte pro Dispobereich und Werk hat. D.h. für jeden Lagerort wiederholt sich die Ausgabe. Eventuell macht eine Eingrenzung nach Lagerort Sinn oder im JOIN kann die Tabelle MDLG durch MDLW getauscht werden, wenn es nur darum geht, die Dispobereiche des Werkes anzuzeigen.
Aus der MBEW beziehe ich nur den Gesamten bewerteten Bestand. Dieser bezieht sich nur auf das Werk. Daher kann ich ihn für jede Materialnummer bestimmen.
Ohne das DELETE ADJACENT DUPLICATES-Statement schon. Mit diesem Statement werden alle mehrfach und nacheinander vorkommenten Zeilen gelöscht. Im ersten Screensheet kommen die mehrfachen Zeilen nicht nacheinander vor, daher auch die mehrfache Ausgabe.Vielen Dank für die Antwort. Diesbezüglich müsste aber doch wenn ich nur einen Wert in meiner SELECT OPTIONS eintrage, auch die gleiche Ausgabe haben oder wieso ist im ersten Screenshot nur eine Zeile?