Kommissionierung – Prozess-Details
Diese Seite erklärt den technischen Ablauf hinter dem Kommissionierprozess: wann der Bestand gebucht wird, wie Status-Übergänge funktionieren und was bei Teilpicks passiert.
Status-Flow: Aufträge
Status-Flow: Picklisten
Zeitlinie einer Pickliste
Bestandsbuchung: Das Kernprinzip
Der Bestand wird erst am Ende gebucht — nicht während des Pickens.
Das ist ein zentrales Designprinzip. Die complete_picklist() Datenbankfunktion (RPC) fĂĽhrt am Ende des Pickens in einer einzigen atomaren Transaktion aus:
- Bestand fĂĽr alle gepickten Positionen reduzieren
- Stock Movements fĂĽr jede Position eintragen (
movement_type: 'pick') - Auftragsstatuse aktualisieren
Das bedeutet: Während der Picker die Pickliste abarbeitet, zeigt der Bestand noch die ursprünglichen Mengen. Erst nach Abschluss ist die Reduzierung im System sichtbar.
Warum diese Entscheidung?
Beim Picken verlässt die Ware das Lager Richtung Versand. Der genaue Zeitpunkt des Buchens innerhalb des Pick-Prozesses ist weniger kritisch als beim Nachfüllen (wo Ware den Platz wechselt und der Bestand jederzeit stimmen muss). Eine Buchung am Ende vereinfacht Fehlerfälle: Wenn eine Pickliste abgebrochen wird, gibt es nichts rückzubuchen.
Keine Reservierung bei Picklisten-Erstellung
Wenn eine Pickliste erstellt wird, wird der Bestand nicht reserviert. Das bedeutet:
- Zwei Picklisten können theoretisch dieselben Artikel enthalten
- Wer zuerst abschlieĂźt, bucht den Bestand
- Falls beim zweiten Abschluss nicht mehr genug Bestand da ist: die betroffenen Positionen werden als
is_out_of_stockmarkiert
Dieses Verhalten ist fĂĽr die Praxis akzeptabel, weil Picklisten typischerweise nicht stark ĂĽberlappen und der Lagerleiter die Picklisten-Erstellung kontrolliert.
Was trackt total_quantity_picked?
Das Feld total_quantity_picked auf picklist_items wächst während des Pickens mit jeder Bestätigung. Es spiegelt wider, wie viel der Picker tatsächlich genommen hat — und ist die Grundlage für die spätere Buchung.
Beispiel: Der Picker soll 5 Einheiten nehmen, findet aber nur 3 → total_quantity_picked = 3. Am Ende werden genau 3 Einheiten vom Bestand abgezogen.
Teilpicks: Was passiert?
Ein Teilpick entsteht, wenn der Picker weniger nimmt als gefordert:
Bei Teilpicks gilt:
- Nur tatsächlich gepickte Mengen werden gebucht — niemals mehr als
total_quantity_picked - Aufträge, für die alle Positionen vollständig gedeckt sind, erhalten Status
picked - Aufträge mit fehlenden Positionen bleiben auf ihrem aktuellen Status und müssen in einer neuen Pickliste abgearbeitet werden
is_out_of_stock
Wenn der Picker eine Position als “Nicht vorrätig” markiert:
is_out_of_stock = trueauf dempicklist_item- Beim Abschluss wird keine Buchung fĂĽr diese Position erzeugt
- Die zugehörigen Aufträge werden nicht auf
pickedgesetzt (die Position gilt als ungeklärt) - Im Abschluss-Ergebnis erscheint die Position unter
items_out_of_stock
Manueller Abschluss durch Admin
Admins können eine Pickliste mit der Option “Manuell abschließen” beenden. In diesem Fall setzt das System total_quantity_picked = total_quantity_required für alle nicht-out-of-stock Positionen — also werden alle geforderten Mengen als gebucht behandelt, unabhängig davon, was der Picker tatsächlich eingegeben hat.
Einsatz: Wenn eine Pickliste außerplanmäßig beendet werden muss (z.B. Picker ausgefallen, Ware bereits physisch entnommen).
Technische Details: complete_picklist() RPC
Die complete_picklist() SQL-Funktion fĂĽhrt alle Buchungen in einer einzigen Transaktion aus:
Schritt 1 — Temp-Tabelle: Alle zu buchenden Positionen (NOT is_out_of_stock AND total_quantity_picked > 0) werden in eine temporäre Tabelle geschrieben.
Schritt 2 — Batch-UPDATE: Die stock-Tabelle wird für alle Positionen auf einmal aktualisiert (quantity - total_quantity_picked). Die CHECK-Bedingung (quantity >= 0) verhindert negativen Bestand.
Schritt 3 — Batch-INSERT: stock_movements werden für alle Positionen in einem einzigen INSERT erzeugt (movement_type: 'pick', negativer quantity_change).
Schritt 4 — Auftragsstatus: Ein set-based UPDATE setzt alle vollständig abgearbeiteten Aufträge auf picked. Ein Auftrag gilt als vollständig, wenn keine seiner Picklist-Assignments unter-versorgt oder is_out_of_stock ist.
Die Funktion ist als SECURITY DEFINER deklariert und läuft mit erhöhten DB-Rechten — alle RLS-Prüfungen werden durch explizite Workspace- und Nutzer-Checks in der Funktion selbst ersetzt.
Picking vs. NachfĂĽllung: Der entscheidende Unterschied
| Merkmal | Kommissionierung | NachfĂĽllung |
|---|---|---|
| Buchungszeitpunkt | Beim Abschluss der gesamten Pickliste | Sofort bei jeder Position |
| Buchungsrichtung | Lagerplatz → (Versand) | Lagerplatz → Lagerplatz |
| Reservierung | Keine | Nicht nötig (Echtzeit) |
| Teilmengen | Möglich (Picker bestimmt Menge) | Möglich (Mitarbeiter bestimmt Menge) |
| Storno-Verhalten | Keine Buchungen rückgängig nötig | Bereits gebuchte Bewegungen bleiben |
Weitere Details zur Nachfüllung: Nachfüllung – Prozess-Details