Code: Alles auswählen.
*INNER JOIN für die Aufnahme der Datensätze aus verschiedenen Datenbanken
CLEAR lt_outtab.
SELECT
a~matnr,
a~werks,
a~ekgrp,
b~matkl,
b~mtart,
b~meins,
c~maktx,
d~lbkum,
f~preis
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 @lt_preis AS f
ON a~matnr = f~matnr
WHERE a~matnr IN @so_matnr
AND a~werks IN @so_werks
AND a~ekgrp IN @so_ekgrp
AND b~matkl IN @so_matkl
AND b~mtart IN @so_mtart
AND c~spras = @sy-langu
INTO CORRESPONDING FIELDS OF TABLE @lt_outtab.
*Berechnung für den höchsten Nettopreis für die MATNR aus der Datenbank EKPO
LOOP AT lt_outtab INTO ls_outtab.
SELECT MAX( netpr ) INTO @DATA(lv_netpr)
FROM ekpo
WHERE matnr = @ls_outtab-matnr
AND werks = @ls_outtab-werks.
ls_outtab-netpr = lv_netpr.
SELECT SINGLE * FROM ekpo INTO ls_ekpo
WHERE matnr = ls_outtab-matnr
AND werks = ls_outtab-werks
AND netpr = lv_netpr.
ls_outtab-peinh = ls_ekpo-peinh.
MODIFY lt_outtab FROM ls_outtab.
ENDLOOP.
*Aktuelle Gesamtbestand wird aus der Datenbank MBEW selektiert
LOOP AT lt_outtab INTO ls_outtab.
SELECT SINGLE * INTO @DATA(ls_salk)
FROM mbew
WHERE matnr = @ls_outtab-matnr
AND bwkey = @ls_outtab-werks.
ls_outtab-salk3 = ls_salk-salk3.
MODIFY lt_outtab FROM ls_outtab.
ENDLOOP.
*Berechung der Bedarfe/Zugänge und des Auswirkung auf den Gesamtbestand am Ende des Monats (EOMSTK)
LOOP AT lt_outtab INTO ls_outtab.
LOOP AT lt_rdate INTO ls_rdate.
CLEAR: lv_requr, lv_aquis, lv_eomstk, lv_salk.
SELECT SINGLE * FROM mdkp INTO ls_mdkp "Zunächst wird die DTNUM aus der Datenbank MDKP selektiert
WHERE matnr = ls_outtab-matnr
AND plwrk = ls_outtab-werks.
lv_dtnum = ls_mdkp-dtnum.
PERFORM calculate-plumi. "In Abhängigkeit zu der ersten DTNUM sollen alle Bedarfe/Zugänge aus der Datenbank MDTB ausgelesen werden
SELECT * INTO TABLE lt_mdkpdb FROM mdkpdb "Alle DTNUM aus MDKPDB für die MATNR werden selektiert
WHERE matnr = ls_outtab-matnr
AND plwrk = ls_outtab-werks.
LOOP AT lt_mdkpdb INTO ls_mdkpdb. "Für jede DTNUM werden die Bedarfe und Zugänge aus der Datenbank MDTB ausgerechnet
lv_dtnum = ls_mdkpdb-dtnum.
PERFORM calculate-plumi.
ENDLOOP.
ls_outtab-requr = lv_requr. "Die Summe aus den vorherigen Berechnungen für Bedarf werden übergeben
ls_outtab-aquis = lv_aquis. "Die Summe aus den vorherigen Berechnungen für Zugang werden übergeben
PERFORM calculate_month_year. "Berechnung der Zeitspannen in das Format MM.YYYY (Bsp. 02.2022
ls_outtab-period = lv_date. "Übergabe der formatierten Zeitspanne an die Struktur
PERFORM get_eomstk. "Berechnung des Bestandes zum Monatsende (EOMSTK)
ls_outtab-eomstk = lv_eomstk. "Übergabe des Bestandes zum Monatsende (EOMSTK) an die Struktur
PERFORM salk. "Berechnung des Gesamtwertes im Bezug auf den Bestand zum Monatsende (EOMSTK)
ls_outtab-salk3 = lv_salk.
ls_outtab-lbkum = 0.
INSERT ls_outtab INTO lt_outtab. "Einfügen der Datensätze für jede MATNR in die interne Tabelle LT_OUTTAB
ENDLOOP.
ENDLOOP.
*SORT: lt_outtab BY period.
*SORT: lt_outtab BY matnr.
LOOP AT lt_outtab INTO ls_outtab. "Formartierung von MM.YYYY in z. B. FEB 2022 (Kombination aus Buchstaben und Zahl)
PERFORM get_minit.
ls_outtab-period = lv_date.
MODIFY lt_outtab FROM ls_outtab.
ENDLOOP.
Code: Alles auswählen.
SORT: lt_outtab BY period,
lt_outtab BY matnr.
Code: Alles auswählen.
SORT lt_outtab BY period matnr.
Mein Code ist länger, das was man nicht sieht ist, das im calculate_month_year die Periode im Format 202202 (also 2022.02) steht. Dementsprechend kann sie dann auch sortiert werden.Nach deiner Periode zu sortieren, halte ich aber trotzdem für einen Fehler, weil DEZ z.b. immer vor JAN kommen wird.
Code: Alles auswählen.
*INNER JOIN für die Aufnahme der Datensätze aus verschiedenen Datenbanken
CLEAR lt_outtab.
SELECT
a~matnr,
a~werks,
a~ekgrp,
b~matkl,
b~mtart,
b~meins,
c~maktx,
d~lbkum,
f~preis
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 @lt_preis AS f
ON a~matnr = f~matnr
WHERE a~matnr IN @so_matnr
AND a~werks IN @so_werks
AND a~ekgrp IN @so_ekgrp
AND b~matkl IN @so_matkl
AND b~mtart IN @so_mtart
AND c~spras = @sy-langu
INTO CORRESPONDING FIELDS OF TABLE @lt_outtab.
*Berechnung für den höchsten Nettopreis für die MATNR aus der Datenbank EKPO
LOOP AT lt_outtab INTO ls_outtab.
SELECT MAX( netpr ) INTO @DATA(lv_netpr)
FROM ekpo
WHERE matnr = @ls_outtab-matnr
AND werks = @ls_outtab-werks.
ls_outtab-netpr = lv_netpr.
SELECT SINGLE * FROM ekpo INTO ls_ekpo
WHERE matnr = ls_outtab-matnr
AND werks = ls_outtab-werks
AND netpr = lv_netpr.
ls_outtab-peinh = ls_ekpo-peinh.
SELECT SINGLE * INTO @DATA(ls_salk)
FROM mbew
WHERE matnr = @ls_outtab-matnr
AND bwkey = @ls_outtab-werks.
ls_outtab-salk3 = ls_salk-salk3.
ls_outtab-sort = 1. " <===== SORT Setzung für alle neuen Einträge zur MATNR
MODIFY lt_outtab FROM ls_outtab.
ENDLOOP.
*Berechung der Bedarfe/Zugänge und des Auswirkung auf den Gesamtbestand am Ende des Monats (EOMSTK)
LOOP AT lt_outtab INTO ls_outtab.
LOOP AT lt_rdate INTO ls_rdate.
CLEAR: lv_requr, lv_aquis, lv_eomstk, lv_salk.
SELECT SINGLE * FROM mdkp INTO ls_mdkp "Zunächst wird die DTNUM aus der Datenbank MDKP selektiert
WHERE matnr = ls_outtab-matnr
AND plwrk = ls_outtab-werks.
lv_dtnum = ls_mdkp-dtnum.
PERFORM calculate-plumi. "In Abhängigkeit zu der ersten DTNUM sollen alle Bedarfe/Zugänge aus der Datenbank MDTB ausgelesen werden
SELECT * INTO TABLE lt_mdkpdb FROM mdkpdb "Alle DTNUM aus MDKPDB für die MATNR werden selektiert
WHERE matnr = ls_outtab-matnr
AND plwrk = ls_outtab-werks.
LOOP AT lt_mdkpdb INTO ls_mdkpdb. "Für jede DTNUM werden die Bedarfe und Zugänge aus der Datenbank MDTB ausgerechnet
lv_dtnum = ls_mdkpdb-dtnum.
PERFORM calculate-plumi.
ENDLOOP.
ls_outtab-requr = lv_requr. "Die Summe aus den vorherigen Berechnungen für Bedarf werden übergeben
ls_outtab-aquis = lv_aquis. "Die Summe aus den vorherigen Berechnungen für Zugang werden übergeben
PERFORM calculate_month_year. "Berechnung der Zeitspannen in das Format MM.YYYY (Bsp. 02.2022
ls_outtab-period = lv_date. "Übergabe der formatierten Zeitspanne an die Struktur
PERFORM get_eomstk. "Berechnung des Bestandes zum Monatsende (EOMSTK)
ls_outtab-eomstk = lv_eomstk. "Übergabe des Bestandes zum Monatsende (EOMSTK) an die Struktur
PERFORM salk. "Berechnung des Gesamtwertes im Bezug auf den Bestand zum Monatsende (EOMSTK)
ls_outtab-salk3 = lv_salk.
ls_outtab-lbkum = 0.
ls_outtab-sort = ls_outtab-sort + 1. " <===== SORT Setzung für alle weiteren Einträge zur MATNR
INSERT ls_outtab INTO lt_outtab. "Einfügen der Datensätze für jede MATNR in die interne Tabelle LT_OUTTAB
ENDLOOP.
ENDLOOP.
SORT lt_outtab BY matnr sort.