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


    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如下

    使用Material Receipt进行一笔接收操作

    接收单如下,分别接收到两个locator中,RAW1和RAW2,数量分别为100,200

    对接收单执行complete操作。

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

    更新代码以后好像出现了一个Counter Document的东西,导致了前面直接建立receipt order出错

    接收完成以后,查看物料的库存,可以看到,已经显示库存量增加

    可以看到,系统的located at 功能,并没有显示现有量的汇总信息,而是直接显示了每个locator的现有量信息

    查看数据库,可以看到,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也增加一行

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

    在当前的库存状态下,尝试建立一张standard SO并且进行complete操作,看系统是否会自动进行reservation操作

    建立的SO数量为20

    SO complete以后,可以看到界面上面reservation qty=20

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

    查看db中的m_reservation表的信息,发现系统更新了reservation行,onhand显示为0,SOTRX=Y,表示这个是一个SO transaction。数量更改为38

    对比onhand,发现onhand的信息没有变,仍然是原来的行记录,数量为100

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

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

     

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

    Complete了以后,可以看到SO行中的数量信息更改了,deliver qty 为17,表示该数量已经发货。

    查看DB,可以看到多了一行m_transaction信息,moveordertype=C-,表示库存减少,类型为Customer。

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

  • 相关阅读:
    Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)
    Codeforces 463C Gargari and Bishops 题解
    kettle入门(七) 之kettle增量方案(一)全量比对取增量-依据唯一标示
    cpp学习笔记 1一个简单的小程序以及一些的知识点
    POJ 1321-棋盘问题(DFS)
    偶遇 smon 进程cpu 开销高异常分析
    Android 虚线切割线
    magento安装wordpress
    分组password算法
    Android_编程规范与经常使用技巧
  • 原文地址:https://www.cnblogs.com/zzyan/p/4167311.html
Copyright © 2020-2023  润新知