Table of Contents

Liefervorschlag

Der Liefervorschlag soll die Frage "Was kann momentan, mit dem aktuellen Lagerbestand, geliefert werden?" beantworten und bei der sinnvollen Erstellung von Warenausgängen helfen. Dazu wird eine angepasste Form der unitop Verfügbarkeitsberechnung verwendet. Das Modul umfasst außerdem eine Funktion zum verdichten von Warenausgängen.

Konzept

Der Liefervorschlag basiert auf der Verfügbarkeitsberechnung. Da beim Liefervorschlag die physisch verfügbaren Bestände relevant sind, werden bei dieser Form der Verfügbarkeitsberechnung die Zugänge nicht berücksichtigt. Im Ergebnis sind also genau die Belegzeilen verfügbar, die für den Liefervorschlag relevant sind. Diese Belegzeilen werden anschließend in Liefervorschlagszeilen umgewandelt und fest in einer Buch.-Blatt-Struktur (im Folgenden einfach "Liefervorschlag") gespeichert. Aus dem Liefervorschlag heraus lassen sich dann, den Liefervorschlagszeilen entsprechend, gesammelt Warenausgänge erstellen.

Da für die unterschiedlichen Belegarten im Liefervorschlag immer gleichartige Funktionen benötigt werden, diese sich jedoch in ihrer Implementierung abhängig von der Belegart unterscheiden können, wurden diese Funktionen durch ein Interface abstrahiert. Dadurch wird erreicht, dass die Kernlogik des Liefervorschlags generisch bleiben kann und die belegspezifischen Besonderheiten jeweils in einer eigenen Implementierung gekapselt werden können.

Hinweis

Der Liefervorschlag ist nur für die Belegarten Verkaufsauftrag und Umlagerungsauftrag implementiert. Zusätzliche Belegarten können durch Erweiterung des Interfaces hinzugefügt werden.

Erstellung Liefervorschlag

Nach der Verfügbarkeitsberechnung müssen zunächst die Verfügbarkeitsposten zu Belegzeilen ausgewählt werden, die für den Liefervorschlag in Frage kommen.

Involvierte Methoden

Objekt Methode
codeunit 5320523 "GOB Calc. Shipment Proposal" CalculateShipmentProposal()
codeunit 5320523 "GOB Calc. Shipment Proposal" EvaluateResults()
codeunit 5022209 "GOB Calc Availability by Order" CalcAvailabilityByOrder()
codeunit 5320523 "GOB Calc. Shipment Proposal" IncludeInShipmentProposal()
interface "GOB Ship. Proposal Handler Interface" IncludeInShipmentProposal()
codeunit 5320523 "GOB Calc. Shipment Proposal" InsertShipProposalWkshLine()

Die Auswahl der Belegzeilen ist aufgeteilt in Belegköpfe und Belegzeilen: Nur wenn der Belegkopf für den Liefervorschlag in Frage kommt, werden die Zeilen überprüft und gegebenenfalls als Liefervorschlagszeile eingefügt.

Swimlane Shipment Proposal Calculation

Ablauf Erstellung Liefervorschlag

Belegköpfe

Folgende Bedingungen müssen erfüllt sein, damit die Zeilen eines Belegkopfes in den Liefervorschlag aufgenommen werden:

  • Komplettlieferung: Beleg muss vollständig verfügbar sein
  • Teillieferung: Beleg muss mindestens teilweise verfügbar sein
  • Belegspezifische Bedingungen:
    • Verkaufsauftrag
      • Freigabestatus: Freigegeben
      • Debitor nicht gesperrt
    • Umlagerungsauftrag
      • Freigabestatus: Freigegeben

Belegzeilen

Folgende Bedingungen müssen erfüllt sein, damit eine Belegzeile in den Liefervorschlag aufgenommen wird:

  • Bedingungen für den Belegkopf
  • keine Direktlieferung
  • Artikel nicht gesperrt
  • Kein Warenausgang vorhanden
  • Keine Lageraktivität vorhanden
  • Komplettlieferung: Zeile muss vollständig verfügbar sein
  • Teillieferung: Zeile muss mindestens teilweise verfügbar sein

Warenausgangserstellung

Aus den im vorherigen Schritt erstellten Liefervorschlagszeilen lassen sich Warenausgänge erstellen. Die Warenausgangserstellung findet über die Business Central Standardlogik statt, die für die Bedürfnisse des Liefervorschlags über Event Subscriber angepasst wurde. Die Einstiegsfunktion kann mit einer gefilterten Auswahl von Liefervorschlagszeilen aufgerufen werden.

Involvierte Methoden

Objekt Methode
codeunit 5320386 "GOB EIP Create Whse. Shipment" CreateWhseShipment()
codeunit 5320386 "GOB EIP Create Whse. Shipment" PrepareDocuments()
codeunit 5320386 "GOB EIP Create Whse. Shipment" CreateWhseShipmentPerDocument()
interface "GOB Ship. Proposal Handler Interface" CreateWhseShipment()
codeunit 5320620 "GOB EIP GetSrcDocOutbnd Ext." HandleWhseShipmentCreation()
codeunit 5320620 "GOB EIP GetSrcDocOutbnd Ext." UpdateExistingWhseShipments()
codeunit 5320620 "GOB EIP GetSrcDocOutbnd Ext." AddSingleWhseShipmentLine()
codeunit 5320620 "GOB EIP GetSrcDocOutbnd Ext." GetSingleOutboundDocHideUI()

Shipment Proposal Worksheet Warehouse Shipment Creation Ablauf Warenausgangserstellung

Vorbereitung

Zunächst findet eine Prüfung der Liefervorschlagszeilen statt. Die zu liefernde Gesamtmenge der ausgewählten Liefervorschlagszeilen muss größer als Null sein. Außerdem müssen im Falle einer Komplettlieferung alle Zeilen vom Typ "Artikel" des Beleges in der Auswahl vorhanden sein. Abschließend wird noch das Buchungsdatum, jedes in der Auswahl vorhandenen Beleges, auf den aktuellen Arbeitstag gesetzt, wenn dieses Datum in der Vergangenheit liegt.

Ausschluss von Erwarteten Lagerbewegungen

Im nächsten Schritt werden all jene Erwarteten Lagerbewegungen vom Warenausgang ausgeschlossen, die

  • mit diesem Warenausgang sonst automatisch als NICHT lieferbar markiert würden
  • in der Belegzeile schon abgeschlossen sind
  • außerdem werden leere Zeilen herausgefiltert, die sonst dafür sorgen würden, dass nicht genügend Daten für die Warenausgangserstellung vorhanden wären.

Verdichtung der Warenausgänge

Im Anschluss werden bestehende, offene, zum Beleg passende Warenausgänge gesucht. Hier findet, abhängig von der Einrichtung, ein Verdichten von Warenausgängen statt. Nachdem alle bestehenden offenen Warenausgänge überprüft wurden, werden neue Warenausgänge für alle Belege erzeugt, die bisher keinem bestehenden Warenausgang hinzugefügt werden konnten.

Als zusätzliche, optionale Information, werden Standardkommentare für die Belegarten Verkaufsauftrag und Umlagerungsauftrag aus den jeweiligen Stammdaten (Debitor bzw. Lagerort) erstellt.

Automatische Warenausgangserstellung über Batchverarbeitung

Die Warenausgangserstellung kann auch als Batchverarbeitung mit dem Report "Stapelverarbeitung Warenausgänge erstellen" durchgeführt werden.

Involvierte Methoden

Objekt Methode
report 5059454 "GOB Batch Create Whse. Shpts."
codeunit 5249442 "GOB Create Whse. Shpt. Mgt." CalculateLocationShipmentProposal()
codeunit 5249442 "GOB Create Whse. Shpt. Mgt." CreateWhseShpt()

Der Report führt zunächst für jeden Verkaufsauftrag in der Filterung Prüfungen aus der Business Central Standardlogik aus, um zu ermitteln, ob überhaupt ein Warenausgang erstellt werden kann. Wenn ein Warenausgang grundsätzlich erzeugt werden kann, wird als Nächstes geprüft, ob die Warenausgänge über die Standardlogik oder über den Liefervorschlag erstellt werden müssen. Dies ist abhängig von der Verfügbarkeitseinrichtung des Lagerortes der zum Beleg gehörenden Erwarteten Lagerbewegung. Im Falle der Standardlogik wird diese ohne weitere Anpassungen ausgeführt und die Verarbeitung ist abgeschlossen. Für die Verarbeitung über den Liefervorschlag werden die Erwarteten Lagerbewegungen an dieser Stelle nur gesammelt.

Verarbeitung über den Liefervorschlag

Die Verarbeitung über den Liefervorschlag ist ein zweiteiliger Prozess.

Für jede zuvor gesammelte Erwartete Lagerbewegung wird, gefiltert auf ihren jeweiligen Lagerort, der Liefervorschlag erstellt. Um unnötige Erstellungen des Liefervorschlags zu vermeiden, wird der Liefervorschlag pro Lagerort nur einmal erstellt. Die Liefervorschlagszeilen werden unter dem Liefervorschlagsvorlagennamen/Liefervorschlagsnamen-Kombination gespeichert, die auf der Request Page eingegeben wurden.

Im zweiten Schritt werden die Warenausgänge erstellt. Die Warenausgangserstellung erfolgt dabei gruppiert nach Lagerort, damit alle erstellten Liefervorschlagszeilen abgearbeitet werden, bevor der Liefervorschlag für den nächsten Lagerort berechnet wird. Es wird dieselbe Logik wie beim manuellen Prozess verwendet und die Warenausgänge werden immer für alle Liefervorschlagszeilen eines gesamten Beleges gleichzeitig erstellt.

Verdichten von Warenausgängen

Bei der Erstellung von Warenausgängen kann eine Verdichtung stattfinden. Das bedeutet, dass mehrere Warenausgänge für denselben Debitoren zu einem einzelnen Warenausgang zusammengefasst werden, damit mehrere Aufträge nicht als Einzellieferungen abgewickelt werden.

Hinweis

Das Verdichten von Warenausgängen ist ausschließlich für Verkaufsaufträge implementiert.

Involvierte Methoden

Objekt Methode
codeunit 5320620 "GOB EIP GetSrcDocOutbnd Ext." FindMatchingWhseShipmentForAggregation()
interface "GOB Ship. Proposal Handler Interface" CheckSourceDocumentHeaderViableForAggregation()
codeunit 5320638 "GOB Shipment Proposal Library" BuildWhseShipmentAggregationCriteriaString()
interface "GOB Ship. Proposal Handler Interface" GetWhseShipmentAggregationCriteria()

Damit Warenausgänge verdichtet werden müssen folgende Bedingungen gegeben sein:

  • Belegart Verkaufsauftrag
  • Debitor hat Kennzeichen "Warenausgänge verdichten gesetzt"
  • Passender, offener Warenausgang vorhanden

Um zwei Warenausgänge zusammenzufassen müssen folgende Felder der Herkunftsbelege dieselben Werte aufweisen:

  • "Sell-to Customer No."
  • "Ship-to Code"
  • "Shipping Agent Code"
  • "Shipping Agent Service Code"
  • "Shipment Method Code"
  • "Ship-to Address"
  • "Ship-to Address 2"
  • "Ship-to City"
  • "Ship-to Contact"
  • "Ship-to Country/Region Code"
  • "Ship-to County"
  • "Ship-to Name"
  • "Ship-to Name 2"
  • "Ship-to Post Code"

Diese Feldwerte werden bei der Erstellung eines Warenausgangskopfes aus einem für die Verdichtung in Frage kommenden Beleg zu einem String (Aggregationsfilterkriterium) verkettet und im Warenausgangskopf gespeichert. Falls mehrere Belege in einem Warenausgang gesammelt werden, so zählt hierfür die Erstellung des Aggregationsfilterkriteriums der Beleg zu dem die Erwartete Lagerbewegung gehört, die bei der initialen Erstellung des Warenausgangskopfes herangezogen wird. Bei einem Versuch, für einen Beleg einen passenden Warenausgang zu finden gilt folgendes Vorgehen:

  1. Aggregationsfilterkriterium des Beleges generieren
  2. Warenausgangsköpfe auf Aggregationsfilterkriteriums des Beleges filtern
  3. FindLast() auf Warenausgangsköpfe im Filter

Erweiterbarkeit

Durch die Verwendung eines Interfaces für die belegspezifischen Methoden, lässt sich der Liefervorschlag mit minimalem Aufwand um weitere Belegarten erweitern. Dies gilt nur für Belegarten, die bereits in der Verfügbarkeitsberechnung berücksichtigt werden. Anderenfalls muss zuvor die Verfügbarkeitsberechnung um die betreffende Belegart erweitert werden, da sich die Berechnung des Liefervorschlages auf die Verfügbarkeitsberechnung stützt.

Bei der Erweiterung des Enums ist darauf zu achten, dass für eine Belegart in Verfügbarkeitsberechnung und Liefervorschlag jeweils dasselbe Ordinal verwendet wird.

Abgesehen vom Interface, bei dem fachliche Unterschiede zum Tragen kommen können, können alle anderen Anpassungen komplett analog zur bereits vorhandenen Implementierung umgesetzt werden.

Objekt Methode/Event Anpassung
interface "GOB Ship. Proposal Handler Interface" alle Methoden implementieren
enum 5021650 "GOB Ship. Prop. Handler Type" Erweiterung um Belegart; WICHTIG: value aus enum 5021579 "GOB Availability Data Type" kopieren
codeunit 5320638 "GOB Shipment Proposal Library" OnMapDocumentLineToHeaderTableNo_NewDocumentType ggfs. Ergänzung Zuordnung Belegkopf - Belegzeile
codeunit 5320386 "GOB EIP Create Whse. Shipment" OnBeforeCreateWhseShipmentPerDocument manuelles Binding der Subscriber für folgende Events
codeunit 5752 "Get Source Doc. Outbound" OnAfterFindWarehouseRequestFor<DocumentType> analog vorhandene Subscriber in "GOB EIP GetSrcDocOutbnd Ext."
report 5753 "Get Source Documents" OnBefore<DocumentLine>OnAfterGetRecord analog vorhandene Subscriber in "GOB EIP GetSrcDocOutbnd Ext."
codeunit 5750 "Whse.-Create Source Document" OnBeforeCreateShptLineFrom<DocumentLine> analog vorhandene Subscriber in "GOB EIP GetSrcDocOutbnd Ext."