Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/
iDempiere官方中文wiki主页 http://wiki.idempiere.org/zh
iDempiere 中文社区www.idempiere.org.cn
iDempiere 中文社区QQ群 65713012

 

本文研究iDempiere的库存出入库机制,主要涉及到2张表格m_storageonhand, m_storagereservation以及视图m_storage。
可以先参照花生的wiki,了解一下这3张表的用途,然后再回来看一下本文的实际测试部分。
http://wiki.idempiere.org/zh/库存管理机制

本测试使用的组织为Fertilizer,warehouse为Fertilizer
由于后面account设置问题,最后一个测试切换到HQ组织进行,但是原理是相同的。

仓库设置locator如下
iDempiere 使用指南 库存出入库研究

使用Material Receipt进行一笔接收操作
iDempiere 使用指南 库存出入库研究

接收单如下,分别接收到两个locator中,RAW1和RAW2,数量分别为100,200
iDempiere 使用指南 库存出入库研究

对接收单执行complete操作。

由于account设置问题,Complete出错,新建PO再建立receipt order操作了

更新代码以后好像出现了一个Counter Document的东西,导致了前面直接建立receipt order出错
iDempiere 使用指南 库存出入库研究

接收完成以后,查看物料的库存,可以看到,已经显示库存量增加
iDempiere 使用指南 库存出入库研究

可以看到,系统的located at 功能,并没有显示现有量的汇总信息,而是直接显示了每个locator的现有量信息
iDempiere 使用指南 库存出入库研究

查看数据库,可以看到,M_Storage是一个视图,定义如下
m_storage由两张表组成,分别是m_storageonhand和m_storagereservation

CREATE OR REPLACE VIEW m_storage AS 
 SELECT s.m_product_id,
    s.m_locator_id,
    s.ad_client_id,
    s.ad_org_id,
    s.isactive,
    s.created,
    s.createdby,
    s.updated,
    s.updatedby,
    s.qtyonhand,
    0 AS qtyreserved,
    0 AS qtyordered,
    s.datelastinventory,
    s.m_attributesetinstance_id,
    s.m_storageonhand_uu AS m_storage_uu,
    s.datematerialpolicy
   FROM m_storageonhand s
UNION ALL
 SELECT sr.m_product_id,
    w.m_reservelocator_id AS m_locator_id,
    sr.ad_client_id,
    sr.ad_org_id,
    sr.isactive,
    sr.created,
    sr.createdby,
    sr.updated,
    sr.updatedby,
    0 AS qtyonhand,
    sr.qty AS qtyreserved,
    0 AS qtyordered,
    sr.datelastinventory,
    sr.m_attributesetinstance_id,
    sr.m_storagereservation_uu AS m_storage_uu,
    NULL::timestamp without time zone AS datematerialpolicy
   FROM m_storagereservation sr
     JOIN m_warehouse w ON sr.m_warehouse_id = w.m_warehouse_id
  WHERE sr.issotrx = 'Y'::bpchar AND sr.qty <> 0::numeric
UNION ALL
 SELECT so.m_product_id,
    w.m_reservelocator_id AS m_locator_id,
    so.ad_client_id,
    so.ad_org_id,
    so.isactive,
    so.created,
    so.createdby,
    so.updated,
    so.updatedby,
    0 AS qtyonhand,
    0 AS qtyreserved,
    so.qty AS qtyordered,
    so.datelastinventory,
    so.m_attributesetinstance_id,
    so.m_storagereservation_uu AS m_storage_uu,
    NULL::timestamp without time zone AS datematerialpolicy
   FROM m_storagereservation so
     JOIN m_warehouse w ON so.m_warehouse_id = w.m_warehouse_id
  WHERE so.issotrx = 'N'::bpchar AND so.qty <> 0::numeric;

 

从m_storagereservation的表列信息可以看到,除了基本的onhand信息以外没有源单据的信息,所以没有办法从reservation反向查询到订单等信息

执行前面的接收以后,m_storageonhand增加一行,同时m_transaction也增加一行
iDempiere 使用指南 库存出入库研究

查看M_transaciton,可以看到多了一行记录。
从M_transaction表格可以看出,movemnettype有3种,V,M,C,测试对比以后,这3个代码应该代表如下意思。
V 表示Vender
M应该表示move order或者类似的组织/仓库内部移动,代表库存内部移转
C表示Customer,销售订单出货时候,movementtype为 C-
对应的3种主类型后面的信息均包括+/-号,表示该locator的数量值增减

iDempiere 使用指南 库存出入库研究

在当前的库存状态下,尝试建立一张standard SO并且进行complete操作,看系统是否会自动进行reservation操作
iDempiere 使用指南 库存出入库研究
建立的SO数量为20
iDempiere 使用指南 库存出入库研究

SO complete以后,可以看到界面上面reservation qty=20
iDempiere 使用指南 库存出入库研究

刷新product界面,查看onhand信息,发现其中一行onhand qty=0的行中,on order qty 变为了38,刚好比刚才多了20个数量,说明reservation记录已经创建。
iDempiere 使用指南 库存出入库研究

查看db中的m_reservation表的信息,发现系统更新了reservation行,onhand显示为0,SOTRX=Y,表示这个是一个SO transaction。数量更改为38
iDempiere 使用指南 库存出入库研究

对比onhand,发现onhand的信息没有变,仍然是原来的行记录,数量为100
iDempiere 使用指南 库存出入库研究

以上界面也说明了我们的m_storage是m_storageonhand和m_reservation两个表的union all。而product info上面的located at信息直接抓取了m_storage视图。

我们再新建一张订单,这时候选择订单类型为POS,同时创建好订单以后执行complete操作,由于是POS订单,所以系统会自动执行出货操作。我们把订单数量设置为17
iDempiere 使用指南 库存出入库研究

 

由于fertilizer的库存组织没有设置account信息,所以SO没有办法complete,直接切换到HQ组织做一次。重新对HQ采购100数量到HQ Warehouse。建立SO,数量17,并尝试complete操作。
iDempiere 使用指南 库存出入库研究

Complete了以后,可以看到SO行中的数量信息更改了,deliver qty 为17,表示该数量已经发货。
iDempiere 使用指南 库存出入库研究

查看DB,可以看到多了一行m_transaction信息,moveordertype=C-,表示库存减少,类型为Customer。
iDempiere 使用指南 库存出入库研究

查看onhand信息,可以看到,系统并没有扣减我们最新的一行记录,而是把我们旧的数据中的一笔记录的数量进行了扣减,说明默认情况下,iDempiere的库存扣减是通过先进后出(FIFO)的方式扣减onhand数量的。
iDempiere 使用指南 库存出入库研究

相关文章: