🏗️ 🇩🇪 Architektur-Übersicht | 🇺🇸 Architecture Overview
🇩🇪 Kernkomponenten Die Architektur basiert auf einer klaren Trennung zwischen Blanket Orders, dem NPI-Management-Codeunit und den generierten Inventardokumenten.
🇺🇸 Core Componets The architecture is based on a clear separation between Blanket Orders, the NPI management codeunit, and the generated inventory documents.
graph TD A[Blanket Order Sales Line] -->|NPI Flag| B(Codeunit 64000: NPI Management) B -->|MakeInventoryShipment| C[Inventory Document Header] B -->|Create Lines| D[Inventory Document Lines] C -->|Ext 64000| E[Partner & Address Data] D -->|Ext 64001| F[Item & Reservation Data]
💾 Datenmodell-Erweiterungen | 🇺🇸 Data Model Extensions
Table Extension 64000: Invt. Document Header
🇩🇪 Diese Erweiterung fügt dem Inventardokument-Header wichtige Partner- und Adressinformationen hinzu, die für den Versandprozess notwendig sind.
🇺🇸 This extension adds important partner and address information to the inventory document header, which is necessary for the shipping process.
🇩🇪 Neue Felder | 🇺🇸 New Fields:
| Feld / Field | Datentyp / Data Type | 🇩🇪 Beschreibung | 🇺🇸 Description |
|---|---|---|---|
| Partner No. | Code[20] | Kundennummer (bei Shipment) oder Lieferantennummer (bei Receipt). | Customer Number (for Shipment) or Vendor Number (for Receipt). |
| Partner Name | Text[100] | Name des Partners. | Name of the partner. |
| Partner Name 2 | Text[50] | Zusätzliche Adresszeile für Partner. | Additional address line for partner. |
| Address | Text[100] | Adresse des Partners. | Address of the partner. |
| Address 2 | Text[50] | Adresszusatz. | Address supplement. |
| City | Text[30] | Stadt. | City. |
| Post Code | Code[20] | Postleitzahl. | Postal code. |
| County | Text[30] | Landkreis. | County. |
| Country/Region Code | Code[10] | Land/Region. | Country/Region. |
| Ship-to Code | Code[10] | Versandadresscode. | Ship-to address code. |
| Ship-to Name | Text[100] | Name der Versandadresse. | Name of the ship-to address. |
🇩🇪 Validierungslogik / 🇺🇸 Validation Logic
| Aspekt / Aspect | 🇩🇪 Beschreibung | 🇺🇸 Description |
|---|---|---|
| Partner No. Änderung | Beim Ändern von "Partner No." werden Adressen automatisch vom Kunden- oder Lieferantendatensatz kopiert. | When changing "Partner No.", addresses are automatically copied from the customer or vendor record. |
| Adress-Synchronisation | Eine automatische Versandadress-Synchronisation stellt sicher, dass die Daten konsistent bleiben. | Automatic ship-to address synchronization ensures data remains consistent. |
Table Extension 64001: Invt. Document Line
🇩🇪 Diese Erweiterung verknüpft Inventardokumentzeilen direkt mit den zugrunde liegenden Blanket Orders und verwaltet Reservierungsinformationen.
🇺🇸 This extension links inventory document lines directly to the underlying Blanket Orders and manages reservation information.
🇩🇪 Neue Felder | 🇺🇸 New Fields:
| Feld / Field | Datentyp / Data Type | 🇩🇪 Beschreibung | 🇺🇸 Description |
|---|---|---|---|
| Reserved Qty. (Base) | Decimal (FlowField) | Reservierte Menge in Basiseinheit. | Reserved quantity in base unit. |
| Blanket Order No. | Code[20] | Referenz zur Blanket Order. | Reference to the Blanket Order. |
| Blanket Order Line No. | Integer | Referenz zur Blanket Order-Zeile. | Reference to the Blanket Order line. |
🇩🇪 Validierungslogik / 🇺🇸 Validation Logic
| Aspekt / Aspect | 🇩🇪 Beschreibung | 🇺🇸 Description |
|---|---|---|
| Validierung | Es erfolgt eine strenge Prüfung auf den Link zur Blanket Order-Zeile sowie eine Validierung gegen die Sales Line, insbesondere bezüglich des Non-Perpetual Inventory Flags. | There is a strict check on the link to the Blanket Order line as well as a validation against the Sales Line, particularly regarding the Non-Perpetual Inventory flag. |
Table Extension 64100: Sales Line
🇩🇪 Die Sales Line wird erweitert, um das NPI-Kennzeichen zu speichern und den Status der Inventarversände zu verfolgen.
🇺🇸 The Sales Line is extended to store the NPI flag and track the status of inventory shipments.
🇩🇪 Neue Felder | 🇺🇸 New Fields:
- Non-Perpetual Inventory (Boolean): 🇩🇪 Kennzeichen für Non-Perpetual Inventory. 🇺🇸 Flag for Non-Perpetual Inventory.
- Inventory Shipments (Integer, FlowField): 🇩🇪 Anzahl der zugehörigen Inventarversände. 🇺🇸 Number of associated inventory shipments.
🇩🇪 Prozeduren | 🇺🇸 Procedures:
- ShowInventoryShipmentLines(): Zeigt die zugehörigen Versandzeilen an. 🇺🇸 Displays associated shipment lines.
- ShowBlanketOrderPostedInventoryShipmentLines(): Zeigt gebuchte Versandzeilen der Blanket Order. 🇺🇸 Shows posted shipment lines of the Blanket Order.
🔌 API-Referenz | 🔌 API Reference
Codeunit 64000: hop365NonPerpetualInventory
- 🇩🇪 Dies ist die zentrale Steuereinheit für die Erstellung von Inventarversanden aus Blanket Orders.
- 🇺🇸 This is the central control unit for creating inventory shipments from Blanket Orders.
Procedure: MakeInventoryShipment()
- 🇩🇪 Zweck: Erstellt ein Inventarversanddokument für Non-Perpetual Inventory Zeilen einer Blanket Order.
- 🇺🇸 Purpose: Creates an inventory shipment document for Non-Perpetual Inventory lines of a Blanket Order.
Signatur | Signature:
procedure MakeInventoryShipment(pBlanketSalesOrder: Record "Sales Header")
Ablauf | Process Flow:
- Validierung | Validation
- 🇩🇪 Sicherstellen, dass die Order vom Typ "Blanket Order" ist.
- 🇺🇸 Ensure the order is of type "Blanket Order".
- Filterung | Filtering
- 🇩🇪 Auswahl aller Zeilen mit Qty. to Ship
<>0 und Non-Perpetual Inventory = true. - 🇺🇸 Select all lines with Qty. to Ship
<>0 and Non-Perpetual Inventory = true.
- Dokumentenerstellung | Document Creation
- 🇩🇪 Neues Invt. Document Header vom Typ "Shipment" anlegen.
- 🇺🇸 Create new Invt. Document Header of type "Shipment".
- Datenkopie | Data Copy
- 🇩🇪 Übertragen von Standort, Kundeninfo und Versandadresse.
- 🇺🇸 Transfer location, customer info, and ship-to address.
- Zeilenanlage | Line Creation
- 🇩🇪 Erstellen der Invt. Document Lines mit Item, Menge und Blanket Order Referenzen.
- 🇺🇸 Create Invt. Document Lines with item, quantity, and Blanket Order references.
- Abschluss | Completion
- 🇩🇪 Setzen von Sales Line.Qty. to Ship auf 0.
- 🇺🇸 Set Sales Line.Qty. to Ship to 0.
⚙️ Event Subscriber & Integration | ⚙️ Event Subscriber & Integration
Blanket Order Conversion Validation
Event: Codeunit "Blnkt Sales Ord. to Ord. (Y/N)" - OnBeforeRun Purpose:
- 🇩🇪 Validiert Blanket Order-Zeilen, bevor diese in Verkaufsaufträge konvertiert werden.
- 🇺🇸 Validates Blanket Order lines before they are converted to sales orders.
Logik | Logic:
- 🇩🇪 Der Subscriber prüft, dass keine Zeilen mit Non-Perpetual Inventory = true und Qty. to Ship
<>0 in einen regulären Auftrag konvertiert werden, es sei denn, sie wurden vorher versandt. Zudem wird sichergestellt, dass alle Zeilen denselben Location Code haben. - 🇺🇸 The subscriber checks that no lines with Non-Perpetual Inventory = true and Qty. to Ship
<>0 are converted into a regular order unless they have been shipped beforehand. It also ensures that all lines have the same Location Code.
Wichtige Logikschritte | Key Logic Steps:
- Reservierungsprüfung | Reservation Check
- 🇩🇪 Es wird geprüft, ob für die Warensendungslinie Reservierungseinträge existieren.
- 🇺🇸 Checks if reservation entries exist for the warehouse shipment line.
- Lagerplatzzuweisung | Bin Code Assignment
- 🇩🇪 Die Funktion GetBinCodeFromWarehouseEntry ermittelt den korrekten Bin Code basierend auf Lot und Paket.
- 🇺🇸 The GetBinCodeFromWarehouseEntry function determines the correct Bin Code based on lot and package.
- Zeile-Splitung | Line Splitting
- 🇩🇪 Falls die Menge der Reservierung von der zu bearbeitenden Menge abweicht, wird die Warehouse Activity Line gesplittet (SplitLine), um die genaue Menge zu erfassen.
- 🇺🇸 If the reservation quantity differs from the quantity to handle, the Warehouse Activity Line is split (SplitLine) to capture the exact quantity.
- Attribut-Mapping | Attribute Mapping
- 🇩🇪 Lot No. und Package No. werden explizit in die "Take" und "Place" Aktionen der Warehouse Activity geschrieben.
- 🇺🇸 Lot No. and Package No. are explicitly written to the "Take" and "Place" actions of the Warehouse Activity.
⚙️ Konfiguration | ⚙️ Configuration
Erforderliche Einrichtung | Required Setup
- Non-Perpetual Inventory Flag:
- 🇩🇪 Aktivieren Sie das Feld "Non-Perpetual Inventory" auf den Sales Lines für relevante Artikel.
- 🇺🇸 Enable the "Non-Perpetual Inventory" field on Sales Lines for relevant items.
- Rahmenaufträge | Blanket Orders:
- 🇩🇪 Stellen Sie sicher, dass der Document Type "Blanket Order" ist und die Zeilen vom Typ "Item" sind.
- 🇺🇸 Ensure the Document Type is "Blanket Order" and lines are of type "Item".
- Kundenadresse | Customer Address:
- 🇩🇪 Definieren Sie den Ship-to Code auf der Sales Line, damit dieser korrekt in das Inventardokument übernommen wird.
- 🇺🇸 Define the Ship-to Code on the Sales Line so it is correctly transferred to the inventory document.
🔄 Workflow-Beispiel | 🔄 Workflow Example
Szenario | Scenario
- 🇩🇪 Non-Perpetual Inventory Shipment erstellen
- 🇺🇸 Create Non-Perpetual Inventory Shipment
- Erstellung | Creation
- 🇩🇪 Eine Blanket Order wird angelegt und Zeilen mit dem NPI-Flag versehen.
- 🇺🇸 A Blanket Order is created and lines are marked with the NPI flag.
- Verarbeitung | Processing
- 🇩🇪 Der Codeunit MakeInventoryShipment wird ausgeführt.
- 🇺🇸 The MakeInventoryShipment codeunit is executed.
- Ergebnis | Result
- 🇩🇪 Der Codeunit MakeInventoryShipment wird ausgeführt. Ein Inventarversanddokument wird erstellt, die Menge in der Blanket Order wird auf 0 gesetzt.
- 🇺🇸 An inventory shipment document is created, and the quantity in the Blanket Order is set to 0.
- Lagerort | Warehouse
- 🇩🇪 Beim Erstellen des Pick-Dokuments werden Lot- und Paketnummern korrekt zugeordnet.
- 🇺🇸 When creating the pick document, lot and package numbers are correctly assigned.