Reservierte Mengen im Lager inkonsistent

Wenn durch Datenbankmanipulationen die Quants nicht mehr stimmen

Jamotion GmbH
Renzo Meister

Jeder Informatiker weiss es. Änderungen direkt auf der Datenbank sind gefährlich! Und trotzdem kommt man manchmal nicht um direkte DB-Eingriffe herum.

Hier haben wir es geschafft und mittels direktem Eingriff auf die Daten der Tabellen stock.move.line und stock.quant eine Inkonsistenz der reservierten Mengen herbei zu führen. Deshalb müssen wir dies jetzt wieder korrigieren.

Hierzu hilft ein "einfacher" SQL-Befehl:

UPDATE stock_quant
SET
reserved_quantity = sub.product_uom_qty
FROM
(SELECT
sq.id,
sum(sml.product_uom_qty) product_uom_qty
FROM
stock_move_line sml
INNER JOIN stock_quant sq ON sq.product_id = sml.product_id AND sq.location_id = sml.location_id
WHERE
sml.state != 'done'
AND sml.location_id = 12
GROUP BY sq.reserved_quantity, sml.product_id, sq.id
HAVING
sq.reserved_quantity != sum(sml.product_uom_qty)
ORDER BY sml.product_id, sq.id) sub
WHERE
sub.id = stock_quant.id

Warnung!

Dieser SQL-Befehl berücksichtigt nur den Lagerort mit der ID 12. Dies ist normalerweise das WH/Lager. Werden mehrere Zentrallager oder Lagerorte genutzt so ist eine Erweiterung des SQL Statements nötig.