文本描述
编辑导读:WMS 的移库功能是指将货物从一个仓位移到另一个仓位,然后两个仓位的货 物各自增减数量。本文作者对一次移库功能设计进行了复盘,总结了在设计过程中遇到的 一些坑,以及应对方式,与大家分享。 前言 WMS 的移库功能在不同的仓库或者不同的系统定义不一样,有些地方把移库当成两个仓 库间货物的转移,有些地方把移库当成不同的库区间的货物转移,例如从拆零区到整箱区 ,或者从高货值区转移到低货值区等。 但是本文所提到的移库其实就是指货位(库位)间转移,将货物从库位 A 移库到仓位 B, 然后库位 A 的货品扣减数量,仓位 B 的货品增加数量。 看似很简单的功能,但是结合到实际业务中,也让我踩了挺多坑。所以我特地花了一些时 间整理出此篇文章,复盘一下我在设计该功能的时候遇到了哪些问题,收获了哪些感悟。 那么,我们开始吧。 一、简易版的移库 很多海外仓没有做效期管理,也没有做批次管理,所以基本上对货物的管控粒度都是在 SKU 层面。如果是 SKU 层面的移库,只需要将源库位的 SKU 扣减数量,然后转移到目标 库位上,SKU 对应的的增加数量即可。 简易版移库 简易版的移库主要是因为管理粒度在 SKU,所以在移库的时候,只需要判断目标库位的货 主和料区是否和源库位一致,只要一致就可以移库,没有其他额外的判断逻辑。 货主为什么要一致? 这个各个仓库的管理要求不一样,我们不允许一个库位放两个货主的货物是因为两个货主 的货物可能会一样(你卖 iPhone,我也可以卖 iPhone),为了避免这种货物识别可能带 来的风险,所以我们是只允许一个库位放一个货主的货物的。 料区是什么?为什么要一致? 这个也和仓库的管理要求有关系,有些仓库对货物的品质管控只要求区分良品,残次品或 者其他粒度。而我们对品质的管控要求细一些,除了要求好坏之分的话,还会有更细的粒 度。 例如退货回来的货物区分售后良品,售后不良品;所以一个库位只能放一个料区的货物, 将良品放在一起,残次品放在另外的库位,那么移库的时候,一个良品库位的货物也就只 能移库到其他良品的库位上了。 二、业务升级,引入批次概念 批次是仓库对货品的管理粒度还要再细一层,要精确到批次号(批号)上。批号这个概念 在医药 WMS 中很常见,大家身边如果有药品盒子可以查看一下,一般来说药品上都会印 有生产批号,如下图所示: 药品的生产批号 一般来说产品上有批号信息的商品其实还算方便管理,毕竟有个显眼的标识让你去查看。 但是如果有些商品没有批号展示,但是又需要进行批次管理,那么难度就显然高了一些。 业内通用的做法有两种: 第一种:在商品入库的时候,逐个商品贴批次码,这样每次到货的商品都要拆包贴码,成 本比较高; 第二种:入库的时候不贴码,而是根据入库时间或者上架时间,系统自动对 某个 SKU 进行批号的标记,然后记录这个批次关联的库位是哪个; 而往往大多数仓库采用的,就是第二种。 今天仓库收到了 100 箱维他柠檬茶,SKU 为 vita100,这 100 箱维他柠檬茶都是一年后 过期。然后在系统在生成上架单的时候,会对这些产品自动标记一个批次号,例如就叫做 BN20200725001。 过了两天仓库又收到了 50 箱维他柠檬茶,SKU 还是 vita100,但是这 50 箱维他柠檬茶是 半年后就过期。在系统在生成上架单的时候,还是会对这些产品自动标记一个批次号,例 如就叫做 BN20200727001。 所以在系统中,就会知道一共有 150 箱维他柠檬茶,一共有两个批次,批次号 BN20200725001 的是 100 箱,批次号 BN20200727001 的是 50 箱。 如果仓库不要求对批次进行管控,那么这 150 箱的维他柠檬茶就是可以放在同一个库位的 ,到时出库的时候也就可以随机拣货出库了。 这个也就是为什么一些电商网站会说新老包装随机发货的原因,因为在仓库管理的时候新 老包装都是同一个 SKU,没有做批次管理,所以新老包装就放在一起了,拣货的时候就随 机拿了。 如果仓库要求对批次进行管控,那么系统的功能设计上就要复杂一些了,因为批次管控意 味着不能混批次(一个库位上不能放不同批次的同款商品)。上面提到,一般仓库不会采 用重新贴码的方式来管理批次,所以都是用的第二种,也就是跟踪批次号对应的仓位的方 式来管理。 那么之前的批次号为 BN20200725001 的 100 箱维他柠檬茶就应该放在一个库位,而 BN20200727001 的 50 箱应该放在另外一个库位,两者不能重叠。所以上架的时候应该 要对批次号做限制,某个仓位有该产品的批次了,那么其他批次就不能放上去了。 此时如果我们加大业务量,一天同时入库 10 个货主,100 款 SK