在销售单删除特定订单行和对应的库存移动 - xiaohao0576/odoo-doc GitHub Wiki
注意:此方法仅适用于离线部署的情况,需要操作postgresql数据库
查找订单行的id
可通过product_id进行查找特定商品的订单行,使用ID倒序排序,可以查看最近发生的销售。
SELECT
ID,
ORDER_ID,
PRODUCT_ID,
NAME,
PRODUCT_UOM_QTY,
QTY_DELIVERED,
STATE,
concat(id,',') as ids
FROM
SALE_ORDER_LINE
WHERE
PRODUCT_ID = 4054
AND STATE = 'sale'
ORDER BY
ID DESC
LIMIT
77;
查询出结果,复制到Excel, 统计出需要删除的产品数量和对应的订单行ID
查找和删除对应的move_line
SELECT
ID,
PRODUCT_ID,
NAME,
STATE,
QUANTITY,
CONCAT(ID, ',') AS IDS
FROM
STOCK_MOVE
WHERE
SALE_LINE_ID IN (
721828,
721823,
721822,
721818,
721817,
721812)
DELETE FROM STOCK_MOVE
WHERE
ID IN (IDS)
根据stock_move的ID查询stock_move_line的ID,并删除
DELETE
FROM
STOCK_MOVE_LINE
WHERE
MOVE_ID IN (
519015,
520086,
520872,
521267,
520358)
根据stock_move的ID查询STOCK_VALUATION_LAYER的ID,并删除
DELETE FROM STOCK_VALUATION_LAYER
WHERE
STOCK_MOVE_ID IN (
519015,
520086,
520872,
521267,
520358)
重新计算销售订单的金额
UPDATE SALE_ORDER SO
SET
AMOUNT_TOTAL = (
SELECT
SUM(PRICE_TOTAL)
FROM
SALE_ORDER_LINE SOL
WHERE
SOL.ORDER_ID = SO.ID
)
WHERE
STATE = 'sale'
AND COMMITMENT_DATE > '2025-1-1 17:00:00';