Odoo 平均成本(AVCO)库存估值与退货处理指南
退货商品的平均价格
::: {#inventory/avg_cost/definition} 平均成本估值(AVCO)是一种库存估值方法,根据期间购买或生产的商品总成本除以手头的商品总数量来评估成本。库存估值用于:
- 反映公司的资产价值;
- 跟踪未售出的商品数量;
- 对尚未产生利润的商品进行货币价值核算;
- 报告季度内商品的流转情况。 :::
因为 AVCO(Average Cost Valuation) 使用加权平均来评估成本,它非常适合 少种类、大批量 的企业。在 Odoo 中,每次收到产品时,成本分析会 自动更新。
因此,当货物被退回供应商时,Odoo 会自动生成会计分录以反映库存估值的变化。但 Odoo 不会 自动更新 AVCO(Average Cost Valuation) 的计算,因为这可能导致 库存估值不一致。
:::: note ::: title 注意 :::
本文仅针对特定理论用例进行说明。有关如何设置和使用 AVCO(Average Cost Valuation),请参阅 库存估值速查表 <../../../inventory_and_mrp/inventory/inventory_valuation/cheat_sheet>。
::::
配置
要在产品上使用平均成本库存估值,进入 库存 --> 配置 --> 产品类别,选择将使用 AVCO(Average Cost Valuation) 的类别。在产品类别页面,将 成本方法 设置为 [Average Cost (AVCO)],并将 库存估值 设置为 [Automated]。
::: seealso 库存估值速查表 <../../../inventory_and_mrp/inventory/inventory_valuation/cheat_sheet> :::
使用平均成本估值
平均成本方法在产品进入仓库时会调整库存估值。以下章节解释其工作原理,如不需要可直接跳到 退货给供应商的用例 <inventory/avg_cost/return>。
公式 {#inventory/avg_cost/formula}
新产品到达时,每种产品的新平均成本使用以下公式重新计算:
$$Avg~Cost = \frac{(Old~Qty \times Old~Avg~Cost) + (Incoming~Qty \times Purchase~Price)}{Final~Qty}$$
- 旧数量(Old Qty):收到新货前的库存数量;
- 旧平均成本(Old Avg Cost):上一次库存估值得到的单件平均成本;
- 进货数量(Incoming Qty):本次到货的商品数量;
- 采购价格(Purchase Price):产品到货时的估算价格(供应商发票可能稍后到达),该金额包括产品本身价格以及运费、税费、
到岸成本 <../../../inventory_and_mrp/inventory/inventory_valuation/landed_costs>等附加费用。收到供应商发票后会进行调整; - 最终数量(Final Qty):库存移动后手头的总数量。
::::: {#inventory/avg_cost/definite_rule} :::: important ::: title 重要 :::
当产品离开仓库时,平均成本 不 变化。关于为何 不 调整平均成本估值,请参阅 此处 <inventory/avg_price/leaving_inventory>。
:::
:::::
计算平均成本 {#inventory/avg_cost/math_table}
下面的表格展示了在不同仓库操作下,平均成本如何随每次出入库而变化。
| 操作 | 进货价值 | 库存价值 | 在手数量 | 平均成本 |
|---|---|---|---|---|
| $0 | 0 | $0 | ||
| 收到 8 张桌子,单价 $10 | 8 × $10 = $80 | $80 | 8 | $10 |
| 再收 4 张桌子,单价 $16 | 4 × $16 = $64 | $144 | 12 | $12 |
| 发货 10 张桌子 | -10 × $12 = -$120 | $24 | 2 | $12 |
:::: {#inventory/avg_cost/ex-1} ::: exercise 请阅读 “收到 8 张桌子,单价 $10” 示例,以确保理解上述计算过程。
- 初始库存为 0,所有数值均为 $0。
- 第一次操作收到 8 张桌子,每张 $10,使用公式:
$$Avg~Cost = \frac{0 + 8 \times $10}{8} = \frac{$80}{8} = $10$$
- 进货数量为 8,采购单价为 $10,分子为 $80,除以 8 得到单件平均成本 $10。
在 Odoo 中,可在 采购 应用创建 8 件、单价 $10 的产品订单,确保产品类别的 成本方法 为 Average Cost (AVCO),库存估值 为 Automated,随后确认收货,即可在 库存估值 报表中看到 8 张桌子价值 $80。
{.align-center} ::: ::::
:::: tip ::: title 提示 :::
当产品类别的 成本方法 设置为 AVCO 时,产品页面的 常规信息 标签页下的 成本 字段会直接显示该产品的平均成本。 ::::
产品交付(用例)
对于出库操作,出库产品不会影响平均成本估值。虽然平均成本不重新计算,但库存价值会因为产品从库存中移出而下降。
::: exercise 请验证 “发货 10 张桌子” 示例:
$$Avg~Cost = \frac{12 \times $12 + (-10) \times $12}{12-10} = \frac{$24}{2} = $12$$
- 发货 10 张,进货数量为 [-10],使用上一次的平均成本 $12;
- 进货库存价值为 -10 × $12 = -$120;
- 旧库存价值 $144 加上 -$120 得到 $24;
- 只剩 2 张,$24 / 2 = $12,仍为原平均成本。
在 Odoo 中,可在 销售 应用中销售 10 张桌子,完成交付后,在 库存 → 报表 → 库存估值 中查看该层的价值变化,发现库存价值减少 $120。
注意:此库存估值记录不包含销售收入,因此这并非公司的亏损。
{.align-center} :::
退货给供应商(用例) {#inventory/avg_cost/return}
由于供应商的实际采购价可能与 AVCO(Average Cost Valuation) 计价的成本不同,Odoo 对退货进行特殊处理:
- 退货时按照原始采购价退回供应商;
- 内部成本估值保持不变。
上述 示例表 更新如下:
| 操作 | Qty*Avg Cost | 库存价值 | 在手数量 | 平均成本 |
|---|---|---|---|---|
| $24 | 2 | $12 | ||
| 退回 1 张原价 $10 的桌子 | -1 × $12 = -$12 | $12 | 1 | $12 |
换言之,退货在 Odoo 中被视为另一种出库行为。因为该桌子在系统中的估值为 $12/件,退回时库存价值会减少 $12,而原始采购价 $10 与平均成本无关。
::: example 退回单件 $10 采购价的桌子:
- 在 库存 应用的 收货 页面找到“8 张桌子”对应的收货单;
- 在已验证的收货单上点击 退货,在弹出的逆向转移窗口中将数量改为 1;
- 确认逆向转移后,返回 库存 → 报表 → 库存估值,可看到库存价值减少 $12。
{.align-center} :::
消除出库产品的库存估值错误 {#inventory/avg_price/leaving_inventory}
若在出库时重新计算平均成本,会导致库存估值不一致。例如:
| 操作 | Qty*Price | 库存价值 | 在手数量 | 平均成本 |
|---|---|---|---|---|
| $24 | 2 | $12 | ||
| 向客户发货 1 件 | -1 × $12 = -$12 | $12 | 1 | $12 |
| 退回 1 件(原价 $10) | -1 × $10 = -$10 | $2 | 0 | $12 |
最终库存价值显示为 $2,虽然实际库存为 0。
::: admonition 正确做法
使用平均成本对退货计价。即使采购价为 $10,退货时仍按系统记录的 $12 计价,库存价值的变化仅表示公司资产中少了价值 $12 的商品。 :::
英式会计
使用 AVCO(Average Cost Valuation) 的企业若采用 英式会计,还会维护一个 库存投入(stock input) 账户,用于记录尚未付款给供应商的金额。供应商发货后,库存价值 按供应商价格上升;库存投入 账户在收到供应商发票后转至 应付账款。
下面的表格展示了相关的分录和账户变化:
| 操作 | 库存投入 | 价格差异 | 库存价值 | 在手数量 | 平均成本 |
|---|---|---|---|---|---|
| $0 | $0 | $0 | 0 | $0 | |
| 收到 8 张桌子,单价 $10 | ($80) | $80 | 8 | $10 | |
| 收到供应商发票 | $0 | $80 | 8 | $10 | |
| 再收 4 张桌子,单价 $16 | ($64) | $144 | 12 | $12 | |
| 收到供应商发票 | $0 | $144 | 12 | $12 | |
| 发货 10 张桌子 | $0 | $24 | 2 | $12 | |
| 退回 1 张原价 $10 的桌子 | $10 | $2 | $12 | 1 | $12 |
| 收到供应商退款 | $0 | $2 | $12 | 1 | $12 |
产品收货
小结
在产品收货时,Odoo 会:
- 将等同于收货价值的金额预先记入 库存投入(负债)账户;
- 同时在 库存价值 账户借记相同金额;
- 待收到供应商发票后,将 库存投入 账户的金额转入 应付账款。
在 Odoo 中操作
- 在产品类别的 成本方法 设为 AVCO,并在 会计属性 中创建 价格差异账户(类型:费用);
- 收货后,可在 会计 → 日记账 中查看对应的分录,验证 库存价值 借记、库存投入 贷记。
产品交付
在上表中,当交付 10 件产品时:
- 库存价值 贷记 $120,表示价值 $120 的商品离开公司;
- 应收账款 借记,以记录销售收入。
::: spoiler 英式会计的费用确认
在销售 10 张桌子时,产品销售、已收税、应收账款 等科目记录销售,费用 科目借记 $120,用于计入存货的持有成本。 :::
产品退货
当退回 1 件原价 $10 的产品时:
- 库存投入 账户借记 $12(平均成本),其中 $10 来自退货,$2 计入 价格差异账户;
- 库存价值 贷记 $12,表示该商品离开库存;
- 供应商退款到账后,库存投入 贷记 $10,应付账款 借记 $10。
:::: note ::: title 注意 :::
价格差异账户 的行为随本地化而异,此处用于存放供应商价与自动库存估值之间的差额。 ::::