本帖最后由 amtath 于 2025-1-5 10:05 编辑
原理理解
先进先出(FIFO)算法是一种存货计价方法,它基于先购入的存货先发出的假设。在库存管理系统中,当有出库需求时,按照商品购入的时间顺序来分配出库的商品。
具体算法步骤
步骤一:确定初始库存信息
记录每次购入商品的数量和单价。在这个例子中,有两次购入记录,第一次购入 4 件,单价 30 元;第二次购入 5 件,单价 35 元。
步骤二:处理出库请求
首先检查最早购入批次的商品数量是否满足出库需求。在这里,出库需求是 6 件。最早购入的是第一次的 4 件商品,因为 4 < 6,所以这 4 件全部出库。
计算这 4 件商品的金额,即数量乘以单价120元。
然后,计算还需要出库的数量,用总的出库需求数量减去已经从最早批次出库的数量,即件。
接着从下一个最早购入批次(第二次购入)中取出剩下的 2 件商品。
计算这 2 件商品的金额,元。
步骤三:生成出库明细
将每次出库的批次、数量、单价和金额小计记录下来。第一次购入批次出库 4 件,单价 30元,金额小计120 元;第二次购入批次出库 2 件,单价 35 元,金额小计 70 元。
最后可以汇总计算总的出库数量和金额,总的出库数量为 6 件,总的出库金额为190元。
- // 模拟库存,每个元素是一个包含购入数量和单价的对象
- const inventory = [
- { quantity: 4, unit_price: 30 },
- { quantity: 5, unit_price: 35 }
- ];
- // 定义出库数量
- const outQuantity = 6;
- // 用于记录出库明细的数组
- const outDetail = [];
- // 遍历库存,按照先进先出原则处理出库
- for (const stock of inventory) {
- if (stock.quantity >= outQuantity) {
- // 如果当前批次数量大于等于出库数量,全部从当前批次出库
- outDetail.push({
- batch: inventory.indexOf(stock) + 1, // 批次编号,从1开始计数
- quantity: outQuantity,
- unit_price: stock.unit_price,
- amount: outQuantity * stock.unit_price
- });
- break;
- } else {
- // 如果当前批次数量小于出库数量,先把当前批次全部出库
- outDetail.push({
- batch: inventory.indexOf(stock) + 1, // 批次编号,从1开始计数
- quantity: stock.quantity,
- unit_price: stock.unit_price,
- amount: stock.quantity * stock.unit_price
- });
- outQuantity -= stock.quantity; // 更新剩余的出库数量
- }
- }
复制代码
|