1. ofbiz数据库表结构设计(5)- 库存INVENTORY

库存是ERP里的核心模块之一。ofbiz的库存管理,主要集中在INVENTORY_ITEM和INVENTORY_DETAIL中。

转载自云中漫步

库存是ERP里的核心模块之一。ofbiz的库存管理,主要集中在INVENTORY_ITEM和INVENTORY_DETAIL中。

ofbiz的库存是按照批次进行管理的。批次的概念是,某个商品每进一次货,单独会对这次进货的商品进行管理。所以,同一个商品,每一个批次,就会生成一条INVENTORY_ITEM数据。批次的管理,在药品食品中就很重要,因为同样的药,每个批次的保质期会不一样,所以要分开管理。还有,同样的商品,不同批次进货,可能进货价格不一样,也就是成本会不一样,也需要分开管理,财务方面会有计算成本的需求。

INVENTORY_DETAIL则是针对每个INVENTORY_ITEM,记录下所有的进出货记录。所以,当某个商品新进一批货的时候,会产生一条INVENTORY_ITEM,同时也会产生一条INVENTORY_ITEM_DETAIL(外键指向先前的INVENTORY_ITEM)。同样的商品,再进一批货的时候,会再产生一条INVENTORY_ITEM,同时还会产生一条INVENTORY_ITEM_DETAIL(外键指向刚刚生成的INVENTORY_ITEM)。接下来,当该商品产生一次销售的时候,会在最先生成的INVENTORY_ITEM(根据先进先出的原则)里扣除该次销售的商品数量,并且生成一条新的INVENTORY_ITEM_DETAIL数据记录。

在ofbiz中,有三个库存概念,一个是实际库存(QUANTITY_ON_HAND),一个是可用库存(AVAILABLE_TO_PROMISE)和一个财务库存(ACCOUNTING_QUANTITY)。实际库存代表该批次实际有的商品数量,可用库存代表该批次可以销售的商品数量(可能用户已经买了,但是还没发货,会导致可用库存小于实际库存),财务库存代表了库存资产。

在INVENTORY_ITEM中,实际库存存在QUANTITY_ON_HAND_TOTAL中,QUANTITY_ON_HAND没有用,可用库存存在AVAILABLE_TO_PROMISE_TOTAL中,AVAILABLE_TO_PROMISE没有用,财务库存存在ACCOUNTING_QUANTITY_TOTAL中,ACCOUNTING_QUANTITY没有用。

在INVENTORY_ITEM_DETAIL中,QUANTITY_ON_HAND_DIFF保存的是某次进出货记录实际库存的差额(正数代表加库存,负数代表减库存),AVAILABLE_TO_PROMISE_DIFF是可用库存的差额,ACCOUNTING_QUANTITY_DIFF代表财务库存的差额。

很多时候,当我们生成一条销售订单的时候,我们会发现某个INVENTORY_ITEM关联的INVENTORY_ITEM_DETAIL会产生三条记录。一条是减去可用库存,一条是减去实际库存,一条是减去财务库存。我们很容易想到,在电子商务里,当用户下了一条订单,我们首先生成一条INVENTORY_ITEM_DETAIL记录,减去可用库存,这时导致了这个批次的库存中,可用库存少于实际库存,当我们发货的时候,再生成一条INVENTORY_ITEM_DETAIL记录,减去实际库存,这时,这个批次的库存中,实际库存又跟可用库存相等了。当财务把这次交易记上账后,再生成一条记录,减去财务库存。

稍微复杂一点的情况,当用户下了单,生成了减去可用库存的记录后,用户又不想要了,这时,系统不会把刚生成的那条INVENTORY_ITEM_DETAIL记录给删除,或把AVAILABLE_TO_PROMISE_DIFF修改为0,而是再生成一条INVENTORY_ITEM_DETAIL记录,把刚才减去的那个AVAILABLE_TO_PROMISE的值给加回来。

最后需要注意一点,对于用户退货退回来的商品,即使我们知道是哪个批次的商品,在ofbiz中也还是生成一条新的INVENTORY_ITEM记录,原因是,对于已经出去的商品,总是存在风险,是需要单独批次单独管理。

Copyright © 神都花已开 2021 all right reserved,powered by Gitbook修订时间: 2021-11-01 15:05:12

results matching ""

    No results matching ""