Beleg-Pipeline (Auftrag → Lieferschein → Rechnung)
Zuletzt geändert: 19.04.2026 04:42

Beleg-Pipeline #

Der typische Verkaufsprozess in EULANDA läuft über eine Kette zusammenhängender Belege. Jeder Folgebeleg wird aus dem Vorgänger abgeleitet und bleibt mit diesem verknüpft. EulandaXtools bietet für jeden Schritt dieser Kette ein passendes Cmdlet.

Die Pipeline auf einen Blick #

flowchart TD A1[New-SalesOrder]:::anlegen --> A2[New-SalesOrderLineItem]:::anlegen A2 --> A3[Close-SalesOrder]:::buchen A3 --> B1[New-DeliveryNoteFromSalesOrder]:::umwandlung B1 --> B2[Close-DeliveryNote]:::buchen B2 --> C1[New-InvoiceFromDeliveryNote]:::umwandlung A3 -. Direkt ohne LS .-> C2[New-InvoiceFromSalesOrder]:::umwandlung C1 --> D1[Send-InvoiceByEmail]:::versand C2 --> D1 D1 --> D2[Send-InvoiceToPrintQueue]:::versand classDef anlegen fill:#2e86c1,color:#fff,stroke:#1a5276 classDef buchen fill:#27ae60,color:#fff,stroke:#196f3d classDef umwandlung fill:#8e44ad,color:#fff,stroke:#5b2c6f classDef versand fill:#566573,color:#fff,stroke:#2c3e50

Blau: Anlegen · Grün: Buchen · Violett: Umwandlung · Grau: Versand (Farbschema analog zur SQL-API Belegfluss-Seite).

Angebot noch nicht in EulandaXtools. Der SQL-API-Fluss beginnt normalerweise mit cn_AnCre (Angebot anlegen) und cn_AnCopyToAf (Angebot -> Auftrag). Dafür gibt es derzeit keine PowerShell-Wrapper; der Einstieg im Modul ist New-SalesOrder. Wer ein Angebot als Vorstufe braucht, legt das aktuell direkt in der EULANDA-Software an.

Parallel dazu gibt es für jede Stufe ein Rückwärts-Verb:

  • Resume-SalesOrder – gebuchten Auftrag wieder in Erfassung nehmen.
  • Resume-DeliveryNote – Lieferschein wieder offen setzen.
  • Remove-SalesOrder / Remove-DeliveryNote – Beleg stornieren.
  • New-CreditNoteFromInvoice – Gutschrift zu einer Rechnung anlegen.
Naming-Schema. Alle Cmdlets folgen einem festen Verb-Substantiv-Raster: New- legt an, Close- bucht/schließt, Resume- öffnet wieder, Remove- storniert. So lässt sich vom Namen direkt auf die Wirkung schließen – ohne in die Funktion schauen zu müssen.

Beispiel: Auftrag mit zwei Positionen anlegen #

Import-Module EulandaXtools

$udl  = 'C:\Eulanda\mandant.udl'
$conn = Get-ConnByUdl -Udl $udl

try {
  # 1) Auftrag anlegen -- Rechnungs- und Lieferadresse können gleich sein
  $orderId = New-SalesOrder -Conn $conn `
    -InvoiceAddressId 42 `
    -ConsigneeAddressId 42 `
    -BuyerOrderNo 'Bestellung 2026/0815'

  # 2) Positionen hinzufügen
  New-SalesOrderLineItem -Conn $conn `
    -SalesOrderId $orderId -ArticleId 1 -Quantity 3 | Out-Null

  New-SalesOrderLineItem -Conn $conn `
    -SalesOrderId $orderId -ArticleId 2 -Quantity 1 | Out-Null

  # 3) Auftrag buchen (EULANDA: "weitererfassen")
  Close-SalesOrder -Conn $conn -OrderId $orderId

  Write-Host "Auftrag $orderId angelegt und gebucht."
}
finally {
  $conn.Close()
}
-Conn ist bei einigen Anlage-Cmdlets Pflicht. New-SalesOrder und New-SalesOrderLineItem akzeptieren ausschliesslich -Conn, kein -Udl / -ConnStr. Die meisten anderen Cmdlets nehmen alle drei, aber der -Conn-Weg ist ohnehin der schnellere – jeder vermiedene Verbindungsaufbau spart auf VPN leicht 100–200 ms.

Beispiel: Lieferschein und Rechnung aus dem Auftrag erzeugen #

# Lieferschein aus dem gerade gebuchten Auftrag anlegen
$deliveryNoteId = New-DeliveryNoteFromSalesOrder -Conn $conn -OrderId $orderId

# Lieferschein abschließen (Warenausgang buchen)
Close-DeliveryNote -Conn $conn -DeliveryNoteId $deliveryNoteId

# Rechnung aus dem Lieferschein erzeugen
$invoiceId = New-InvoiceFromDeliveryNote -Conn $conn `
  -DeliveryNoteId $deliveryNoteId

# Rechnung per E-Mail verschicken
Send-InvoiceByEmail -Conn $conn -InvoiceId $invoiceId `
  -To 'kunde@example.com'

Direkt vom Auftrag zur Rechnung #

Wenn kein separater Lieferschein geführt wird (z.B. reine Dienstleistungs-Rechnungen), geht es direkt:

$invoiceId = New-InvoiceFromSalesOrder -Conn $conn `
  -OrderId $orderId `
  -BookOrder
# -BookOrder bucht den Auftrag automatisch mit, falls er noch offen war

Gutschriften #

Eine Gutschrift ist immer an eine bestehende Rechnung gebunden. Je nach Folgelogik gibt es drei Varianten – gesteuert über Switches:

flowchart TD Re[Rechnung 20214925] Re --> V1{{"Variante 1
New-CreditNoteFromInvoice"}}:::umwandlung Re --> V2{{"Variante 2
-ReopenDeliveryNotes"}}:::umwandlung Re --> V3{{"Variante 3
-ReopenDeliveryNotes
-ReopenSalesOrder"}}:::umwandlung V1 --> R1[Nur Gutschrift
Folgebelege bleiben]:::anlegen V2 --> R2[Gutschrift +
Lieferschein wieder offen
Ware kommt zurück]:::teilstorno V3 --> R3[Gutschrift +
Lieferschein + Auftrag
alles in Erfassung]:::storno classDef anlegen fill:#2e86c1,color:#fff,stroke:#1a5276 classDef umwandlung fill:#8e44ad,color:#fff,stroke:#5b2c6f classDef teilstorno fill:#e67e22,color:#fff,stroke:#af601a classDef storno fill:#c0392b,color:#fff,stroke:#7b241c

Blau: Nur neue Gutschrift · Orange: Teilweiser Rückweg (Lieferschein offen) · Rot: Vollständiger Rückweg (alles wieder in Erfassung).

# Variante 1: Reine Gutschrift, alle Folgebelege bleiben unverändert
New-CreditNoteFromInvoice -Conn $conn -InvoiceNo 20214925

# Variante 2: Gutschrift + Lieferschein wieder öffnen (Ware kommt zurück)
New-CreditNoteFromInvoice -Conn $conn -InvoiceNo 20214925 -ReopenDeliveryNotes

# Variante 3: Gutschrift + Lieferschein + Auftrag alles in Erfassung
New-CreditNoteFromInvoice -Conn $conn -InvoiceNo 20214925 `
  -ReopenDeliveryNotes -ReopenSalesOrder

Storno und Wiederaufnahme #

Niemals direkt DELETE auf Beleg-Tabellen ausführen. EULANDA hat für jede Beleg-Sorte einen eigenen ERP-konformen Storno-Pfad: Lagerbewegungen werden zurückgebucht, Belegnummern protokolliert, abhängige Dokumente invalidiert. Ein direkter DELETE FROM Auftrag WHERE Id = ... zerstört diese Konsistenz stumm und ist auf EULANDA-Seite gesperrt. EulandaXtools kapselt den korrekten Pfad jeweils in einem Remove- oder Resume--Cmdlet.
# Lieferschein stornieren (Lagerbestände werden zurückgebucht)
Remove-DeliveryNote -Conn $conn -DeliveryNoteNo 12345

# Auftrag stornieren (mit allen Positionen)
Remove-SalesOrder -Conn $conn -OrderNo 20212869

# Auftrag aus dem Archiv zurückholen und wieder öffnen
Resume-SalesOrder -Conn $conn -OrderNo 20212869
Rechnungs-Storno noch nicht als Wrapper. Auf SQL-Ebene existiert cn_ReStorno (siehe SQL-API Belegfluss), dafür gibt es aktuell kein Remove-Invoice-Cmdlet. In aller Regel läuft die Korrektur einer Rechnung ohnehin über eine Gutschrift – dafür steht New-CreditNoteFromInvoice zur Verfügung.

Typischer kompletter Ablauf #

Die wiederkehrende Struktur in produktiven Skripten:

$conn = Get-ConnByUdl -Udl $udl
try {
  $orderId = New-SalesOrder -Conn $conn -InvoiceAddressId 42 `
    -ConsigneeAddressId 42 -BuyerOrderNo 'WEB-0815'
  foreach ($zeile in $positionen) {
    New-SalesOrderLineItem -Conn $conn -SalesOrderId $orderId `
      -ArticleId $zeile.ArtikelId -Quantity $zeile.Menge | Out-Null
  }
  Close-SalesOrder -Conn $conn -OrderId $orderId

  $lfId = New-DeliveryNoteFromSalesOrder -Conn $conn -OrderId $orderId
  Close-DeliveryNote -Conn $conn -DeliveryNoteId $lfId

  $reId = New-InvoiceFromDeliveryNote -Conn $conn -DeliveryNoteId $lfId
  Export-InvoiceXml -Conn $conn -InvoiceId $reId -OutputXml ".\out\$reId.xml"
  Send-InvoiceByEmail -Conn $conn -InvoiceId $reId -To $email
}
finally {
  $conn.Close()
}

Übersicht der wichtigsten Cmdlets #

SchrittCmdlet
Auftrag anlegenNew-SalesOrder
Auftrag buchenClose-SalesOrder
Auftrag weitererfassenResume-SalesOrder
Auftrag stornierenRemove-SalesOrder
Lieferschein aus AuftragNew-DeliveryNoteFromSalesOrder
Lieferschein abschließenClose-DeliveryNote
Lieferschein wieder öffnenResume-DeliveryNote
Lieferschein stornierenRemove-DeliveryNote
Rechnung aus LieferscheinNew-InvoiceFromDeliveryNote
Rechnung aus AuftragNew-InvoiceFromSalesOrder
Gutschrift zu RechnungNew-CreditNoteFromInvoice
Rechnung lesenGet-InvoiceData, Get-InvoiceLineItemData
Rechnung exportierenExport-InvoiceXml, Export-Invoice
Rechnung versendenSend-InvoiceByEmail, Send-B2bRouterInvoice
Rechnung druckenSend-InvoiceToPrintQueue