draft/list 与 StocktakeDraft.to_dict 用 float(x or 1) 序列化实盘数,而 0 是 falsy —— 货架盘到 0 的物料会被报成 1。前端「重复扫码」提示读的正是这个值,库管看到“当前实盘为 1”会以为填错而改成 1,真实盘亏就这么被抹掉。改为显式 None 判断,保住合法的 0。
draft/list 与 StocktakeDraft.to_dict 用 float(x or 1) 序列化实盘数,而 0 是 falsy —— 货架盘到 0 的物料会被报成 1。前端「重复扫码」提示读的正是这个值,库管看到“当前实盘为 1”会以为填错而改成 1,真实盘亏就这么被抹掉。改为显式 None 判断,保住合法的 0。