Ansicht
Dokumentation
WLB_PO_SPLITTING - Funktionsbaustein zum Splitten von Bestellungen
BAL Application Log Documentation TXBHW - Original Tax Base Amount in Local CurrencyDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Dieser FB dient zur Splittung von Bestellungen. Dabei werden zwischen den folgenden Hauptfunktionalitäten unterschieden:
- Durchführung der reinen physikalischen Bestellsplittung auf der Datenbank (DB) (Eingabparameter: IN-WLBWITHPOS = 'X') => siehe 1. physikalische Bestellsplittung
- Splittung einer Bestellung durch Reduzierung der Bestellpositionsmengen der Originalbestellung unter Berücksichtigung von Restriktionen (Eingabeparameter: IN-WLBWITHPOS = ' ') => siehe 2. allgemeine Bestellsplittung
1. Physikalische Bestellsplittung
Bei der physikalischen Bestellsplittung werden dem FB alle Informationen über die Bestellung über die Eingabeparameter mitgeteilt.
Wichtige Einschränkung:
Zur Zeit ist ein Absplitten von Teilmengen (d.h. nicht die komplette Menge = EKET-MENGE) einer Liefereinteilung nur für Bestellpositionen mit genau einer Liefereinteilung möglich. Existieren zu einer Bestellposition mehrere Liefereinteilungen, so können nur die kompletten Mengen (= EKPO-MENGE) aller Liefereinteilungen oder keine Menge der Bestellposition abgesplittet werden.
Ablaufbeschreibung
- Prüfung der Eingabeparameter
- Schreibschutz für die Bestellung anlegen
- Wichtig:
- Soll dieser Schreibschutz nicht im FB gesetzt werden (IN-WLBLOCKOBJ = " "), so wird davon ausgegangen, daß dieser Schreibschutz vor dem Aufruf von WLB_PO_SPLITTING durch Aufrufe der entsprechende FB gesetzt wurde.
- Die Liefereinteilungen zu jeder Bestellposition werden auf Splittinformationen untersucht. Liegt eine Splittung für die Bestellposition vor, werden die folgenden Fälle unterschieden:
- Soll die komplette Menge der Bestellposition abgesplittet werden, wird die Position in der DB auf gelöscht gesetzt.
- Soll nur eine Teilmenge der Bestellposition abgesplittet werden, wird die Menge der Position in der DB entsprechend geändert (bzw. vermindert).
- Wichtig für Stücklistenartikel:
- Bei Stücklistenartikel müssen die Splittinformationen konsistent auf Topartikel-Ebene (bzw. Kopfartikel-Ebene) und Komponenten-Ebene hinterlegt sein.
- DB-Änderung abschließen
- Wichtig:
- Alle DB-Änderungen werden mit Hilfe des SAP-Verbuchers vorgenommen. Die physikalische Verbuchung in der DB wird jedoch erst endgültig durch die Ausführung von einem expliziten COMMIT WORK in der Aufrufstelle abgeschlossen.
- Bei einem Fehler (FB endet mit einer Ausnahme) sollte in der Aufrufstelle immer ein ROLLBACK WORK ausgeführt und alle Sperrobjekte mit Hilfe von FB DEQUEUE_ALL aus der Sperrtabelle gelöscht werden, damit der ursprünglichen DB-Zustand für die Bestellung vor dem Aufruf des FBs wieder hergestellt wird.
- Für die abgesplitten Mengen werden neue Bestellungen angelegt. Auch hier wird die DB-Neuanlage erst endgültig durch die Ausführung von einem COMMIT WORK in der Aufrufstelle wirksam.
- Wichtig:
- In der neuen Bestellung ist im Bestellkopf (EKKO) ein Verweis (EKKO-BEDNR) auf die ursprüngliche Bestellung (IN-WLBEBELN) hinterlegt.
- Rückgabewerte füllen
2. Allgemeine Bestellsplittung
Bei der allgemeinen Bestellsplittung besteht die Hauptaufgabe in der Bestimmung der Splittmengen zu einer vorgebenen Bestellung (IN-WLBEBEN) mit Hilfe eines Splittverfahrens, damit die verbleibenden Restmengen der Bestellpositionen jede der mitgegebenen Restriktionen erfüllen.
Ablaufbeschreibung:
- Prüfung der Eingabeparameter
- Schreibschutz für die Bestellung anlegen (siehe hierzu 1. Physikalische Bestellsplittung)
- Bestimmung der Bestelldaten zu der Bestellung (Kopf-, Positions- und Liefereinteilungsdaten)
- Plausiprüfung auf den bestimmten Bestelldaten
- Es dürfen keine Sammelbestellungen und keine Aufteiler-Bestellungen gesplittet werden.
- Bestellpositionen auswählen
- Für die nachfolgenden Schritte werden nur Bestellpositionen berücksichtigt, die nicht gelöscht sind, die nicht zur Lohnbearbeitung zählen und die keine Dienstleistung darstellen.
- Für alle ausgewählten Bestellpositionen werden die Ist-Werte für die Restriktionsprüfung bestimmt.
- Bestimme für alle ausgewählten Bestellpositionen die Ist-Werte für die Restriktionsprüfung.
- Durchführung der Restriktionsprüfung auf den summierten Ist-Werten der Bestellung
- Sortierung der Bestellpositionen (bzw. Liefereinteilungen)
- Auswahl des Splittverfahrens und Durchführung der logischen Splittung gesteuert durch den Eingabeparameter IN-WLBSPLITOP =
- "01" siehe a) Bestellsplitt mit Restriktionstypenprioritäten
- "02" siehe b) Bestellsplitt bei Vielfachrestriktion mit User-Exit
- "03" siehe c) Bestellsplitt mit User-Exit
- Durchführung der physikalischen Splittung, wenn keine Simulation der Bestellsplittung durchgeführt werden soll (IN-WLBSIMU = " "). (siehe hierzu die Schritte von 1. Physikalische Bestellsplittung)
- Rückgabewerte füllen
a) Bestellsplitt mit Restriktionstypenprioritäten
Bei diesem Splittverfahren werden den Restriktionstypen verschiedene Prioritäten zugeordnet:
- Minimum-Restriktion = Prio 1 => höchste Priorität
- Vielfach-Restriktion = Prio 2 => 2.höchste Priorität
- Maximum-Restriktion = Prio 3 => niedrigste Priorität
Für alle Restriktionen wird das Ergebnis der Restriktionsprüfung auf Erfüllung bzw. Nicht-Erfüllung untersucht. Dabei werden die Bedingungen der folgenden Schritte nacheinander überprüft. Ist die jeweilige Bedingung erfüllt, werden die entsprechende Anweisung (des Schrittes) ausgeführt und alle nachfolgenden Schritte werden nicht berücksichtigt.
- 1. Bed.: Mindestens eine Minimum-Restriktion nicht erfüllt
- Eine Splittung macht keinen Sinn, d.h. es wird keine Splittung durchgeführt => fertig (Ausnahme: MIN_REST_FAULT).
- 2. Bed.: Mindestens eine Vielfachrestriktion erfüllt und die Ist-Werte umfassen mindestens zweimal das Vielfache
- Hierbei werden die folgende Fälle unterschieden:
- Es existieren mehr als eine gültige Bestellposition
- Die erste Bestellposition wird gelöscht. Die Ist-Werte der Bestellung werden ohne die gelöschte Position bestimmt und die Restriktionsprüfung wird wieder auf diesen neuen Ist-Werten durchgeführt. Mit dem Ergebnis der Restriktionsprüfung beginnt wieder dieser Prozeß (Restriktionen Erfüllung oder Nicht-Erfüllung) von neuem (=> rekursiver Aufruf).
- Es existiert nur eine gültige Bestellposition
- Die Splittung kann nicht erfolgreich durchgeführt werden => Splittung nicht möglich => fertig (Ausnahme: SPLIT_NOT_POSSIBLE)
- 3. Bed.: Mindestens eine Vielfachrestrikion erfüllt und die Ist-Werte umfassen nur einmal das Vielfache.
- Die Splittung wird beendet mit:
- Keine Splittung durchgeführt, wenn der 2. Schritt nicht in vorherigen Rekursionsschritten erfolgreich durchgeführt wurde => fertig (Ausnahme: SPLIT_NOT_NECESSARY)
- Splittung korrekt durchgeführt, wenn der 2. Schritt in vorherigen Rekursionsschritten erfolgreich durchgeführt wurde => fertig
- 4. Bed.: Existiert eine Vielfachrestriktion die nicht erfüllt ist
- Keine Splittung wird durchgeführt => fertig (Ausnahme: SPLIT_NOT_NECESSARY)
- 5. Bed.: Eine Maximum-Restriktion ist nicht erfüllt
- Führe zuerst die Splittung mit Hilfe des User-Exit 007 durch.
- Bei nicht erfolgreicher Splittung durch den User-Exit werden die folgenden Fälle unterschieden:
- Es existieren mehr als eine gültige Bestellposition
- Die erste Bestellposition wird gelöscht. Die Ist-Werte der Bestellung werden ohne die abgesplittete Menge bestimmt und die Restriktionsprüfung wird wieder auf diesen neuen Ist-Werten durchgeführt. Mit dem Ergebnis der Restriktionsprüfung beginnt wieder dieser Prozeß (Restriktionen Erfüllung oder Nicht-Erfüllung) von neuem (=> rekursiver Aufruf).
- Es existiert nur eine gültige Bestellposition
- Die Splittung kann nicht erfolgreich durchgeführt werden => Splittung nicht möglich => fertig (Ausnahme: SPLIT_NOT_POSSIBLE)
- 6. Bed.: Keine der vorherigen Bedingungen ist erfüllt
- Der Prozeß wird korrekt beendet, wenn mindestens eine Bestellposition gesplittet wurde (T_SPLIT_EKET-SPLIT_YES = "X" für einen Eintrag). => fertig
- Der Prozeß wird mit Splittung nicht notwendig beendet, wenn keine Bestellposition gesplitet wurde => fertig (Ausnahme: SPLIT_NOT_NECESSARY)
Wichtig:
Existiert eine Vielfachrestriktion, so werden alle Maximumsrestriktionen nicht beachtet, d.h., eine Kombination aus Vielfach und Maximumsrextriktion macht keinen Sinn.
Problem bei mehr als einer Vielfachrestriktion:
Mehrere Vielfachrestriktionen machen keinen Sinn. Tritt dieser Fall jedoch auf, wird der 2. Schritt für die 1. Vielfachrestriktion durchgeführt, für die die entsprechende Bedingung erfüllt ist. Die Reihenfolge erst 3. Schritt dann 4. Schritt kann nicht mehr gewährleistet werden. Erfüllt keine Vielfachrestriktion die Bedinung des 2. Schritts, dann wird der entsprechende Schritt (3. Oder 4.) für die 1. Vielfachrestriktion ausgeführt, für die die entsprechende Bedingung erfüllt ist.
b) Bestellsplitt bei Vielfachrestriktion mit User-Exit
Bei diesem Verfahren wird identisch zum Bestellsplitt mit Restriktionstypenprioritäten vorgegangen mit dem Unterschied, daß beim Zutreffen der 2. Bedingung eine andere Vorgehenswese gewählt wird (2. wird durch 2'. erstetzt):
- 2'. Bed.: Mindestens eine Vielfachrestriktion erfüllt und die Ist-Werte umfassen mindestens zweimal das Vielfache
- Die Bestellplittung wird mit Hilfe des User-Exits 004 durchgeführt. Der User-Exit wird mindestens einmal aufgerufen und erhält alle bisher bestimmten Bestelldaten berechneten Ist-Werte der Bestellpositionen und das Ergebnis der Restriktionsprüfung. Als Ergebnis gibt der User-Exit die neuen Splittinformationen auf Liefereinteilungsebene zurück.
- Vor jedem weiteren Aufruf des User Exits werden die Ist-Werte der Bestellpositionen unter Berücksichtigung der bestimmten Splitt-Informationen (in T_SPLIT_EKET) neu berechnet.
- Für diese neuen Ist-Werte wird die Retriktionsprüfung durchgeführt.
- Der erneute Aufruf des User-Exits erfolgt mit den neu bestimmten Daten (d.h., mit den gelöschten bzw. mengenreduzierten Bestellpositionen)
- Erfolgt kein weiterer Aufruf des User-Exits, wird bei erfolgreicher Splittung der Prozeß korrekt bendet. => Splittung erfolgreich => fertig
- War eine Splittung mit dem User-Exit nicht möglich, wird keine Splittung durchgeführt => Splittung nicht möglich => fertig (Ausnahme: SPLIT_NOT_POSSIBLE)
Bestellsplitt mit User-Exit
Bei diesem Verfahren wird die logische Splittung der Bestellung komplett dem User-Exit 005 überlassen. Der User-Exit wird mindestens einmal aufgerufen und erhält alle bisher bestimmten Bestelldaten, berechneten Ist-Werte der Bestellpositionen und das Ergebnis der Restriktionsprüfung. Als Ergebnis gibt der User-Exit die neuen Splitinformationen auf Liefereinteilungsebene zurück. Vor jedem weiteren Aufruf des User Exits werden die Ist-Werte der Bestellpositionen unter Berücksichtigung der bestimmten Splitt-Informationen neu berechnet. Für diese neuen Ist-Werte wird die Retriktionsprüfung neu durchgeführt. Der erneute Aufruf des User-Exits erfolgt mit den neu bestimmten Daten. Ist die Bestellsplittung fertig, werden bei erfolgreicher Splittung die nächsten Schritte der Ablaufbeschreibung ausgeführt, bei nicht erfolgreicher Splittung wird der Splittprozeß mit einer Fehlermeldung und einer Ausnahme beendet.
Beispiel
Ein Beispiel für den Aufruf des FB befindet sich in dem FB WLB_MULTIPLE_PO der Funktionsgruppe WVLB.
Hinweise
Weiterführende Informationen
Parameter
CH_EKKOIN
T_EKPO
T_NEW_EBELN
T_RESTRICTIONS
T_SPLIT_EKET
Ausnahmen
BAD_PARAMSBAD_RESTRICTION_TYP
CALCULATION_FAULT
DB_ERROR
ERROR
MIN_REST_FAULT
NO_PO
NO_PO_ITEMS
RESTRICTION_FAULT
RESTRICTION_OK
SPLIT_NOT_NECESSARY
SPLIT_NOT_POSSIBLE
Funktionsgruppe
WVLBCPI1466 during Backup ABAP Short Reference
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 15808 Date: 20240523 Time: 074340 sap01-206 ( 198 ms )