Ansicht
Dokumentation

WLB_PO_SPLITTING - Funktionsbaustein zum Splitten von Bestellungen

WLB_PO_SPLITTING - Funktionsbaustein zum Splitten von Bestellungen

BAL Application Log Documentation   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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_EKKO
IN
T_EKPO
T_NEW_EBELN
T_RESTRICTIONS
T_SPLIT_EKET

Ausnahmen

BAD_PARAMS
BAD_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

WVLB

CPI1466 during Backup   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 15808 Date: 20240523 Time: 074340     sap01-206 ( 198 ms )