Skip to main content

Lief-an Code in Rahmenauftragszeilen / Customization: Ship-to Code in Blanket Sales Order Lines

🇩🇪 Zweck der Anpassung Im Standard von Business Central wird die Lieferadresse auf Kopfebene des Rahmenauftrags festgelegt. Diese Erweiterung fügt das Feld "Lief-an Code" direkt in die Rahmenauftragszeilen ein. Dies ermöglicht es, bereits bei der Planung des Abrufs unterschiedliche Lieferadressen für verschiedene Positionen zu hinterlegen.

🇺🇸 Purpose of Customization In standard Business Central, the ship-to address is defined at the header level of the blanket order. This extension adds the field "Ship-to Code" directly to the Blanket Sales Order Lines. This allows different ship-to addresses to be stored for various positions during the planning of the release.


⚙️ Funktionsweise / Functional Logic

1. Stammdaten-Bezug / Master Data Reference

🇩🇪 Das Feld greift direkt auf die hinterlegten Lieferadressen des Debitors (Customer Ship-to Addresses) zu und kann dort individuell pro Zeile angepasst werden.

🇺🇸 The field directly accesses the stored Customer Ship-to Addresses and can be customized individually per line.

BC Blanket Sales Order Line Shipto Code Selection

2. Umwandlung in Verkaufsauftrag (Abruf) / Conversion to Sales Order

🇩🇪 Beim Ausführen der Funktion "Auftrag erstellen" (Make Order) steuert das Feld die Erstellung des resultierenden Verkaufsauftrags:

  • Die Lieferanschrift im Verkaufskopf des neuen Auftrags wird auf Basis des "Lief-an Codes" der Rahmenauftragszeile gefüllt.

🇺🇸 When executing the "Make Order" function, the field controls the creation of the resulting sales order:

  • The ship-to address in the Sales Header of the new order is filled based on the "Ship-to Code" of the blanket sales order line.

BC Blanket Sales Order Line Shipto Code Header


⚠️ Validierung & Fehlerprüfung / Validation & Error Handling

📑 Mehrzeilenprüfung / Multi-line Validation

🇩🇪 Prüfung bei mehreren Zeilen: Werden zwei oder mehr Rahmenauftragszeilen gleichzeitig in einen Verkaufsauftrag abgerufen, erfolgt eine automatische Konsistenzprüfung:

  • Identische Codes: Der Vorgang wird normal ausgeführt.
  • Unterschiedliche Codes: Das System erkennt den Konflikt (da ein Auftragskopf nur eine Lieferadresse haben kann). Eine Fehlermeldung erscheint und der Vorgang wird abgebrochen.

🇺🇸 Multi-Line Validation: If two or more blanket order lines are released into one sales order simultaneously, an automatic consistency check is performed:

  • Identical Codes: The process is executed normally.
  • Different Codes: The system detects the conflict (as an order header can only have one ship-to address). An error message appears, and the process is aborted.

🔒 Änderungsschutz bei bestehenden Abrufen / Change Protection

🇩🇪 Schutz der Datenintegrität Um Konsistenz zwischen dem Rahmenauftrag und den bereits daraus erstellten Verkaufsaufträgen zu gewährleisten, verfügt das Feld über eine zusätzliche Sperrlogik:

  • Prüfung auf bestehende Abrufe: Das System prüft, ob für die betroffene Rahmenauftragszeile bereits Verkaufsaufträge (Abrufe) existieren.
  • Änderungsverbot: Sofern das Feld bereits gefüllt war (xRec) und bereits Mengen in Aufträge abgerufen wurden, ist eine nachträgliche Änderung des "Lief-an Codes" nicht mehr zulässig. Der Vorgang wird mit einer Fehlermeldung abgebrochen.

🇺🇸 Data Integrity Protection To ensure consistency between the blanket order and the sales orders already created from it, the field includes additional locking logic:

  • Check for Existing Releases: The system checks if sales orders (releases) already exist for the affected blanket order line.
  • Change Restriction: If the field was already populated (xRec) and quantities have already been released into orders, subsequently changing the "Ship-to Code" is no longer permitted. The process will be aborted with an error message.

❌ Fehlermeldung bei Änderung / Error Message on Change

🇩🇪 "Der Lief-an Code für %1 kann nicht geändert werden, da diese Zeile mit einem oder mehreren Verkaufsaufträgen verknüpft ist." 🇺🇸 "You cannot change %1 because the order is associated with one or more sales orders."

🛠️ Technischer Hintergrund / Technical Background

🇩🇪 Die Prüfung erfolgt im OnValidate-Trigger des Feldes in der Tabelle Blanket Sales Order Line. Dabei wird abgefragt, ob bereits verknüpfte Zeilen in der Tabelle Sales Line vorhanden sind.

🇺🇸 The validation occurs in the OnValidate trigger of the field within the Blanket Sales Order Line table. It verifies if linked rows already exist in the Sales Line table.


💡 Best Practice: Vorgehensweise bei Adressänderungen / Procedure for Address Changes

🇩🇪 Empfohlene Vorgehensweise Sollte ein Kunde die Lieferadresse für die verbleibende Restmenge eines Rahmenauftrags ändern wollen, ist eine direkte Anpassung der bestehenden Zeile aufgrund der oben genannten Prüfung nicht möglich. Um den Vorgang sauber zu dokumentieren, gehen Sie wie folgt vor:

  1. Bestehende Zeile anpassen: Reduzieren Sie das Feld Menge in der aktuellen Zeile auf den Wert, der bereits in Verkaufsaufträge abgerufen wurde.
  2. Neue Zeile anlegen: Erstellen Sie eine neue Rahmenauftragszeile für die verbleibende Restmenge und hinterlegen Sie dort den neuen Lief-an Code.

Dies stellt sicher, dass die Historie der bereits getätigten Lieferungen korrekt bleibt und die neue Adresse für alle zukünftigen Abrufe verwendet wird.

🇺🇸 Recommended Procedure If a customer wishes to change the delivery address for the remaining quantity of a blanket order, a direct adjustment of the existing line is not possible due to the validation logic mentioned above. To document the process correctly, follow these steps:

  1. Adjust Existing Line: Reduce the Quantity field in the current line to the value that has already been released into sales orders.
  2. Create New Line: Create a new blanket order line for the remaining quantity and enter the new Ship-to Code there.

This ensures that the history of shipments already made remains accurate and that the new address is used for all future releases.