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 mitcn_AnCre(Angebot anlegen) undcn_AnCopyToAf(Angebot -> Auftrag). Dafür gibt es derzeit keine PowerShell-Wrapper; der Einstieg im Modul istNew-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()
}
-Connist bei einigen Anlage-Cmdlets Pflicht.New-SalesOrderundNew-SalesOrderLineItemakzeptieren 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 direktDELETEauf 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 direkterDELETE FROM Auftrag WHERE Id = ...zerstört diese Konsistenz stumm und ist auf EULANDA-Seite gesperrt. EulandaXtools kapselt den korrekten Pfad jeweils in einemRemove-oderResume--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 existiertcn_ReStorno(siehe SQL-API Belegfluss), dafür gibt es aktuell keinRemove-Invoice-Cmdlet. In aller Regel läuft die Korrektur einer Rechnung ohnehin über eine Gutschrift – dafür stehtNew-CreditNoteFromInvoicezur 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 #
| Schritt | Cmdlet |
|---|---|
| Auftrag anlegen | New-SalesOrder |
| Auftrag buchen | Close-SalesOrder |
| Auftrag weitererfassen | Resume-SalesOrder |
| Auftrag stornieren | Remove-SalesOrder |
| Lieferschein aus Auftrag | New-DeliveryNoteFromSalesOrder |
| Lieferschein abschließen | Close-DeliveryNote |
| Lieferschein wieder öffnen | Resume-DeliveryNote |
| Lieferschein stornieren | Remove-DeliveryNote |
| Rechnung aus Lieferschein | New-InvoiceFromDeliveryNote |
| Rechnung aus Auftrag | New-InvoiceFromSalesOrder |
| Gutschrift zu Rechnung | New-CreditNoteFromInvoice |
| Rechnung lesen | Get-InvoiceData, Get-InvoiceLineItemData |
| Rechnung exportieren | Export-InvoiceXml, Export-Invoice |
| Rechnung versenden | Send-InvoiceByEmail, Send-B2bRouterInvoice |
| Rechnung drucken | Send-InvoiceToPrintQueue |