Odoo 8 - Datenbank-Verknüpfungen - Verkaufsauftrag / Lieferscheine / Rechungen

In diesem Artikel soll kurz aufgezeigt werden, wie man ausgehend von einem Verkaufsauftrag auf Datenbank-Ebene (SQL) die Lieferscheine und auch Rechnungen selektieren kann.

Ausgangspunkt ist die Tabelle: sale_order

Hierzu gibt es eine Many-to-many Beziehungstabelle: sale_order_invoice_rel bei der man über die order_id und die invoice_id die jeweiligen Datensätze joinen kann:

SELECT SO.* FROM sale_order SO
JOIN sale_order_invoice_rel SOR ON SO.id = SOR.order_id
JOIN account_invoice AI ON AI.id = SOR.invoice_id


Um die entsprechenden Auslieferungsaufträge (Lieferscheine) zu einem Verkaufsauftrag zu ermitteln muss man einen gänzlich anderen Weg gehen.

Odoo generiert eine Beschaffungsgruppe, die für die Verknüpfung genutzt werden kann. Hierfür verknüft man die procurement_group_id der sale_order mit der group_id des stock_picking:

SELECT SO.* FROM sale_order SO
JOIN stock_picking SP ON SP.group_id = SO.procurement_group_id


Das folgende Statement ermittelt alle stock_move (Auslieferungsauftrag-Positionen) zu einer Rechnungsposition. Wichtig: Es gibt keine direkte Verknüpfung. Man kann lediglich feststellen, welche Auslieferungsauftrag-Positionen das gleich Produkt besitzen. Bei Teillieferungen bekommt man mehrere (stock_move)-Positionen pro Rechnungsposition ausgegeben:

SELECT SM.*
FROM account_invoice_line AIL
JOIN sale_order_invoice_rel SOR ON SOR.invoice_id = AIL.invoice_id
JOIN sale_order SO ON SO.id = SOR.order_id
JOIN stock_picking SP ON SP.group_id = SO.procurement_group_id
JOIN stock_move SM ON SM.picking_id = SP.id AND SM.product_id = AIL.product_id
WHERE AIL.id = 12345