Sollte doch von "alleine" funktionieren - natürlich abhängig von Deinen Eingaben und Customizing Einstellungen.Auslaufkennzeichen
Kennzeichen, das das Material als Auslaufmaterial identifiziert und bei der Disposition die Auslaufsteuerung bewirkt.
Vorgehen
Wenn das Kennzeichen gesetzt ist, leitet das System bei der Disposition den Sekundärbedarf, der nicht mehr durch den Lagerbestand des Materials gedeckt ist, auf das Nachfolgematerial weiter. Hierfür bestehen jedoch folgende Voraussetzungen:
Auslauf- und Nachfolgematerial müssen plangesteuert geplant werden.
Die Basismengeneinheit des Nachfolgematerials muß mit der des Auslaufmaterials identisch sein.
Hinweis
Bei der Lohnbearbeitung werden ungedeckte Bedarfe nach dem Auslaufdatum nicht auf das Nachfolgematerial weitergeleitet. Darauf weist eine entsprechende Meldung (58) in der Dispositionsliste hin.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZERSATZARTIKEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZERSATZARTIKEL.
TABLES: MARA, KOTD001, KONDD, KONDDP, MAKT.
TYPES: BEGIN OF TABMAT,
MATNR LIKE MARA-MATNR,
NORMT LIKE MARA-NORMT,
/CMD/MATKURZTEXT LIKE MARA-/CMD/MATKURZTEXT,
BESTAND(10) TYPE N,
END OF TABMAT.
DATA: GT_WMDVSX LIKE BAPIWMDVS OCCURS 0 WITH HEADER LINE,
GT_WMDVEX LIKE BAPIWMDVE OCCURS 0 WITH HEADER LINE,
TABLEMAT TYPE TABLE OF TABMAT WITH HEADER LINE.
DATA: MATNR1 LIKE MARA-MATNR,
NORMT1 LIKE MARA-NORMT,
NORMT2 LIKE MARA-NORMT,
NORMT3 LIKE MARA-NORMT,
POSNR(3) TYPE N,
MATNRTAB LIKE MARA-MATNR,
NORMTTAB LIKE MARA-NORMT,
/CMD/MATKURZTEXTTAB LIKE MARA-/CMD/MATKURZTEXT,
BESTANDTAB(10) TYPE N,
MATNR2 LIKE MARA-MATNR,
MATNR3 LIKE MARA-MATNR.
* Erzeugt interne Tabelle mit Materialnummer, Ersatzartikel (alle 3), Materialkurztext und Bestand mit Funktionsbaustein.
SELECT MATNR NORMT /CMD/MATKURZTEXT FROM MARA INTO (MATNRTAB, NORMTTAB, /CMD/MATKURZTEXTTAB).
CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
EXPORTING
PLANT = '1000'
MATERIAL = MATNRTAB
UNIT = 'ST'
CHECK_RULE = 'A'
TABLES
WMDVSX = GT_WMDVSX
WMDVEX = GT_WMDVEX.
READ TABLE GT_WMDVEX WITH KEY COM_DATE = SY-DATUM.
MOVE GT_WMDVEX-COM_QTY TO BESTANDTAB.
MOVE MATNRTAB TO TABLEMAT-MATNR.
MOVE NORMTTAB TO TABLEMAT-NORMT.
MOVE /CMD/MATKURZTEXTTAB TO TABLEMAT-/CMD/MATKURZTEXT.
MOVE BESTANDTAB TO TABLEMAT-BESTAND.
APPEND TABLEMAT.
CLEAR: MATNRTAB, NORMTTAB, /CMD/MATKURZTEXTTAB, BESTANDTAB.
ENDSELECT.
* Schleife über Tabelle
LOOP AT TABLEMAT.
* Erzeugt Materialnummer ohne 0 zur Erstellung der Konditionsnummer
MOVE TABLEMAT-MATNR TO MATNR3.
SHIFT MATNR3 LEFT DELETING LEADING '0'.
* Löscht alle Datensätze des zurzeit bearbeitenden Materials
DELETE FROM KOTD001 WHERE KNUMH = MATNR3.
DELETE FROM KONDD WHERE KNUMH = MATNR3.
DELETE FROM KONDDP WHERE KNUMH = MATNR3.
* Nur Eintragen in die Tabellen wenn Bestand = 0 weil sich sonst Restbestände aufbauen.
IF TABLEMAT-BESTAND <= 0000000000 AND TABLEMAT-NORMT <> ''.
MOVE TABLEMAT-MATNR TO MATNR2.
POSNR = 2.
SPLIT TABLEMAT-NORMT AT ',' INTO NORMT1 NORMT2 NORMT3.
* 1. Ersatzartikel eintragen
CONCATENATE '0000000000000' NORMT1 INTO MATNR1.
* Prüfen ob der Ersatzartikel vorhanden ist
READ TABLE TABLEMAT WITH KEY MATNR = MATNR1.
IF SY-SUBRC = 0.
* Nur eintragen wenn der Bestand des Ersatzartikels nicht 0 ist
IF TABLEMAT-BESTAND > 0.
KONDDP-KNUMH = MATNR3.
KONDDP-KPOSN = POSNR.
KONDDP-SMATN = TABLEMAT-MATNR.
KONDDP-/CMD/CT_MAKTX = TABLEMAT-/CMD/MATKURZTEXT.
INSERT KONDDP.
CLEAR MATNR1.
POSNR = POSNR + 1.
ENDIF.
* 2. Ersatzartikel eintragen
CONCATENATE '0000000000000' NORMT2 INTO MATNR1.
* Prüfen ob der Ersatzartikel vorhanden ist
READ TABLE TABLEMAT WITH KEY MATNR = MATNR1.
IF SY-SUBRC = 0.
* Nur eintragen wenn der Bestand des Ersatzartikels nicht 0 ist
IF TABLEMAT-BESTAND > 0.
KONDDP-KNUMH = MATNR3.
KONDDP-KPOSN = POSNR.
KONDDP-SMATN = TABLEMAT-MATNR.
KONDDP-/CMD/CT_MAKTX = TABLEMAT-/CMD/MATKURZTEXT.
INSERT KONDDP.
CLEAR MATNR1.
POSNR = POSNR + 1.
ENDIF.
* 3. Ersatzartikel eintragen
CONCATENATE '0000000000000' NORMT3 INTO MATNR1.
* Prüfen ob der Ersatzartikel vorhanden ist
READ TABLE TABLEMAT WITH KEY MATNR = MATNR1.
IF SY-SUBRC = 0.
* Nur eintragen wenn der Bestand des Ersatzartikels nicht 0 ist
IF TABLEMAT-BESTAND > 0.
KONDDP-KNUMH = MATNR3.
KONDDP-KPOSN = POSNR.
KONDDP-SMATN = TABLEMAT-MATNR.
KONDDP-/CMD/CT_MAKTX = TABLEMAT-/CMD/MATKURZTEXT.
INSERT KONDDP.
CLEAR MATNR1.
POSNR = POSNR + 1.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* In die KONDD kommt immer der eigene Artikel um ihn immer noch bestellen zu können
KONDD-SMATN = MATNR2.
KONDD-SUGRD = 'Y1'.
KONDD-KNUMH = MATNR3.
INSERT KONDD.
* Eintragen in die Grundtabelle
KOTD001-KAPPL = 'V'.
KOTD001-KSCHL = 'A001'.
KOTD001-MATWA = MATNR2.
KOTD001-DATBI = SY-DATUM.
KOTD001-DATAB = SY-DATUM.
KOTD001-KNUMH = MATNR3.
INSERT KOTD001.
CLEAR: POSNR, MATNR3.
ENDIF.
ENDLOOP.