在销售单删除特定订单行和对应的库存移动 - 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';