OpenERP的复式库存运算
-
半年前在介绍 [检测到链接无效,已移除] 时提到需要对OpenERP复式库存做交代后才能进一步深入介绍。
本系列的介绍中,我们会涉及:
什么是OpenERP的复式库存运算?
什么是存货地点?
存货地点如何设置?
存货地点与仓库的联系
存货地点的chain location有什么用途?
Stock Move与库存管理,生产,需求运算的关系等
====================
[b]OpenERP复式库存运算[/b]
====================
OpenERP在计算库存数量时采用了与大多数库存管理软件不太一样的方法,其基本原理与财务管理的复式记账原理一致。即:“有借必有贷,借贷必相等”。OpenERP的复式库存运算中的一个核心对象就是所谓Stock Move。与财务对资金的流动的记录和分析相同,OpenERP就是通过Stock Move来对货品数量的流动进行记录和分析的。Stock Move对象上记录了货品从一个“存货地点”向另一个“存货地点”移动的数量,时间,和状态等。
[b]存货地点(Stock Location)[/b]
==========================
Stock Location在OpenERP的用户界面中往往被翻译成“库位”。这样的理解只有在Stock Location归属于仓库这个容器下才是正确的。事实上,Stock Location 在OpenERP中远远超出了“库位”的概念范畴。其与财务记账中的科目有相似的意义。而Stock Location的灵活配置可以解决库存运算中的很多复杂情况。与财务科目表类似,Stock Location 可以组织为树状结构。比如下面这样的结构:<br />公司A----仓库A<br /> -----货位1<br /> -----货位2<br /> ----质检A<br /> ----发货A<br />
存货地点类型
-------------
[b]视图类型[/b]
''''''''
Stock Location之所以能组织为树状结构是因为有“视图”(View)类型的Stock Location的存在,这类视图类型的Stock Location并不直接参与库存移动(Stock Move),但是因为它们的存在,我们可以归集其下子集的信息。比如:上图中:公司A(视图类型)可以归集“仓库A”,“质检A”,“发货A”的库存数据,而“仓库A”可以归集“货位1”,“货位2”的库存数据。
[b]内部类型[/b]
''''''''
内部(internal)类型又被称作“物理”(physical)类型,就是存在实际地点的Stock Location。这是最直观理解的存货地点类型,但是要强调的是这个实际存在的存货地点不一定是你仓库中的货位。
[b]虚拟类型[/b]
''''''''
这类Stock Location的存在是OpenERP实现复式库存运算的关键。因为OpenERP实现库存运算是通过Stock Move,而Stock Move涉及两个库存地点,一个移出库存地点,一个移入库存地点。为了保证货物的移动能用Stock Move来表述,我们必须引入一批虚拟库存类型的Stock Location使这样的库存移动匹配成对。比如从供应商进货: 我们就要从“供应商虚拟存货地点”移动到我们仓库的存货地点; 比如向客户发货:我们就要从仓库所辖的存货地点向”客户虚拟存货地点“移动;再比如:生产领料,就是从仓库所辖存货地点向"生产虚拟存货地点“的存货移动,而产成品入库,则是从”生产虚拟存货地点“向仓库所辖存货地点的移动。由此看来,复式库存运算听起来玄奥,其实就是通过这些虚拟存货地点的设置,使 所有 的库存变动在两个地点成对发生。
这类的虚拟存货地点类型总共有以下几种:
* 供应商类型(Supplier)
* 客户类型 (Customer)
* 生产类型 (Production)
* 盘库类型 (Inventory)
* 需求类型 (Procurement)
* 中间类型 (Transit)
需求类型(Procurement)的存货地点在"OpenERP的MRP运算的核心对象--Procurement Order" 一文中有提到,以后还会重点介绍。
[b]Stock Move简介[/b]
==============
Stock Move除了与上面介绍的Stock Location紧密关联以外,很显然还与产品,数量,计量单位,单价,时间等关联。这里只强调Stock Move上的一个非常重要的概念,他的状态。
[b]Stock Move的状态[/b]
----------------
Stock Move的状态一般上有以下几种:
* 草稿(draft)
* 取消(cancel)
* 等待(waiting)
* 已确认(confirmed)
* 已分配(assigned)
* 完成(done)
草稿和取消一目了然,无需介绍。“等待”表示该Stock Move有一个与其连锁的上游Stock Move尚未完成,等待上游连锁Stock Move的处理结果。关于连锁Stock Move 以及连锁存货地点将在后续的介绍中讲解。“已确认“表示该Stock Move已被确认,但是源存货地点尚没有足够完成本次库存移动的产品库存,在界面上OpenERP显示为“等待可用”(Waiting Availability); "已分配“是指在该Stock Move的源库存地点已有足够本次库存移动的产品,这些产品已被预留,但本次移动尚未完成;“完成”当然表示本次库存移动已经完成。
[b]
库存计算的简单公式[/b]
==================
OpenERP的Stock Move似乎都在描述一个动态的货品移动过程。那么具体到每一个存货地点的库存量到底如何计算呢?其实公式非常简单,如图:
在图中,我们需要计算存货地点M的存货量。以I开头的Stock Move 比如I-A1M(done)表示流入M的Stock Move, 其状态为done, 而流出M的Stock Move则以O开头比如:O-MB2(confirmed)表示流出存货地点M的Stock Move其状态为“confirmed"
[attachimg=1]
计算库存的简单公式是:
实际库存(on hand) = Σ(I-nM<done>)-Σ(O-Mm<done>)
未来库存(virtual stock) = Σ(I-nM<not cancel>)-Σ(O-Mm<not cancel>)
自己动手试试计算图中的实际库存和未来库存,以及在途收货库存,以及待发货库存数量等
下回将介绍Stock Location与仓库的关系,以及库存管理与Stock Move的关系等,敬请期待!