FIFO余额信息更新 — 完整触发规则分析

存货核算模块 | 按「触发入口」分为两大类:系统参数保存触发、商品保存触发 | 2026-07-10

背景 成本核算体系速览

三种计价方法

移动平均法 加权平均法 先进先出法 (FIFO)

两种核算模式

模式计价方法来源批次/辅助属性来源
按参数设置 参数「计价方法」 参数中的勾选
按商品设置 商品属性「成本计算方法」 商品属性中的勾选

重要规则

  • 「总仓核算」还是「分仓核算」始终由系统参数决定,不受模式切换影响,不由商品属性控制。
  • 当商品使用先进先出法时,系统每期按最小维度生成FIFO结余序列。该序列是下期FIFO计算的输入依赖。
  • 一旦核算维度(计价方法/总-分仓/批次/辅助属性)发生变更,旧结余表与新维度不匹配,必须重算更新

最小核算维度

商品 + 仓库(分仓时) + 批次(按批次时) + 辅助属性(按辅助属性时)
触发入口:系统参数页面 → 点击【保存】

参数触发 规则概览(共 7 条)

重算所有商品
重算 FIFO 商品
重算非FIFO商品

用户在「存货核算参数」页面修改配置后点击【保存】,系统根据修改前后的参数值差异判断是否触发FIFO重算。

#场景描述修改前参数状态修改后参数状态重算范围
P1a 按参数模式 · 方法切换 按参数核算
计价方法 ≠ 先进先出
按参数核算
计价方法 = 先进先出
所有商品
P1b 按参数模式 · 维度变更 按参数核算
计价方法 = 先进先出
按参数核算
计价方法 = 先进先出
+ 批次 / 辅助属性 / 总-分仓 变化
所有商品
P2 按商品模式 · 总-分仓变更 按商品核算 按商品核算
+ 总-分仓 变化
所有FIFO商品
P3① 模式切换
按参数 ⇄ 按商品
按参数核算
计价方法 ≠ 先进先出
按商品核算 所有FIFO商品
P3② 按参数核算
计价方法 = 先进先出
按商品核算
+ 批次/辅助属性/总-分仓 变化
所有FIFO商品
P3③ 按商品核算 按参数核算
计价方法 = 先进先出
批次/辅助属性/总-分仓 未变化
所有非FIFO商品
P3④ 按商品核算 按参数核算
计价方法 = 先进先出
+ 批次/辅助属性/总-分仓 变化
所有商品
P3③ 与 P3④ 的关键区别
  • P3③(维度未变):原本就是FIFO的商品无需重算(旧结余表仍有效),只需重算那些从非FIFO被强制改为FIFO的商品。
  • P3④(维度变化):所有商品都必须重算——FIFO商品因维度变化而失效,非FIFO商品被强制改为FIFO需首次生成结余表。
触发入口:商品编辑页【保存】/ 批量修改【确定】

商品触发 规则概览(共 4 条)

全局前置条件

存货核算参数 → 成本核算维度 = 按商品设置核算成本

当前模式为「按参数设置核算成本」时,商品属性中的计价方法/批次/辅助属性不被成本计算使用,修改它们不会触发任何FIFO重算。


提示策略

单个商品编辑批量修改商品
是否弹窗 是,切换计价方法为「先进先出法」时立即弹出 否,界面已有 tips 说明
弹窗时机 下拉框切换时(非保存时)
提示文案 "若商品有库存余额和业务单据,修改成本计价方法将影响后续出库成本核算结果。"
设计考量 提示前置到切换时而非保存时:保存时校验逻辑多,提示容易淹没;切换时即告知风险,用户有心理预期。

触发规则

用户在商品编辑页修改后点击【保存】,或批量修改后点击【确定】,系统逐商品检查是否满足以下条件之一。

#操作类型条件修改前修改后重算范围
G1 单个商品编辑
触发:点击【保存】
a 计价方法 ≠ 先进先出 计价方法 = 先进先出 该商品本身
b 计价方法 = 先进先出 计价方法 = 先进先出 + 批次/辅助属性勾选变化
G2 批量修改商品
触发:点击【确定】
a 计价方法 ≠ 先进先出 计价方法 = 先进先出 符合条件的所有商品
b 计价方法 = 先进先出 计价方法 = 先进先出 + 批次/辅助属性勾选变化
条件 a:非FIFO → FIFO(方法切换) 商品之前没有FIFO结余表,改为先进先出后需要首次生成结余表。

条件 b:FIFO → FIFO + 维度变化 商品本就使用先进先出,但批次或辅助属性的勾选改变 → 最小核算维度变了 → 旧结余表失效,需要重算
提醒:关于条件 b 在批量场景下的触发 G2b 的条件是「计价方法保持FIFO不变 + 批次/辅助属性勾选变化」。如果批量修改弹窗只允许改计价方法而不允许同时改批次/辅助属性勾选,则条件 b 在批量场景下永远不会成立。建议核实批量修改弹窗的字段范围。若确实不支持,G2b 可标记为"预留规则"或删除。
潜在问题与缺口分析

缺口 需要补充的场景

缺口 1(原缺口2):FIFO → 非FIFO 时旧结余表处理

两个子场景:①参数模式下,计价方法从FIFO切换为非FIFO;②商品模式下,单个商品计价方法从FIFO改为非FIFO。

问题:商品不再使用FIFO,历史结余表是否需要清理/归档/标记失效?需求未提及。建议明确策略。

缺口 2(原缺口3):按参数模式下,商品属性字段的UI状态

按参数模式下,商品编辑页中的「成本计算方法」「按批次核算」「按辅助属性核算」是否应置灰禁用?当前这些字段可编辑,但修改后不生效也不触发重算,可能造成用户困惑。

速查表 全部 11 条触发规则

入口#触发时点一句话条件重算范围
参数 P1a参数页
【保存】
按参数 + 非FIFO→FIFO(方法切换)所有商品
P1b 按参数 + FIFO + 维度变化所有商品
P2 按商品 + 总/分仓变化FIFO商品
P3① 按参数(非FIFO) → 按商品FIFO商品
P3② 按参数(FIFO) → 按商品 + 维度变化FIFO商品
P3③ 按商品 → 按参数(FIFO) + 维度未变非FIFO商品
P3④ 按商品 → 按参数(FIFO) + 维度变化所有商品
商品 G1a商品页
【保存】
单商品 非FIFO→FIFO该商品
G1b 单商品 FIFO → FIFO + 维度变化该商品
G2a批量
【确定】
批量 非FIFO→FIFO符合条件的商品
G2b 批量 FIFO → FIFO + 维度变化符合条件的商品
所有商品
FIFO商品
非FIFO商品
被修改商品自身

文档用途:需求分析与开发评审参考 | 请逐条验证触发条件与商品范围的正确性 | 建议优先处理缺口1(FIFO→非FIFO旧数据清理)