原文来自:http://shine-it.net/index.php/topic,16409.0.html

库存移动(Stock Move)新玩法
Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单(Picking)。链式库存移动被广泛应用在各类库存操作中比如:多步收货或多步发货操作,多仓库间的配、补货操作等;而不仅限于之前OpenERP中MTO供货类型产品的发货等待对应供应商收货这样的链式库存移动的应用场景了。我们会描述如何通过“推”,“拉”规则来创建这些链式库存移动。

库存移动与拣货单的关联
仓管人员手动进行的库存操作的一般顺序是:先创建拣货单然后在明细中选择不同的产品及数量从而创建相应的库存移动。但是在确认销售订单时,Odoo则是自动创建对应销售订单明细的库存移动在先,然后才会去将这些库存移动与一个现有的拣货单关联或创建一个新的拣货单。

库存移动与拣货单关联的前提条件是库存移动设置了拣货类型(比如:我的公司:发货单)。如果库存移动有设置拣货类型,Odoo则会尝试搜索拣货单并与之关联。搜索的条件是这个拣货单要与库存移动有一致的状态,拣货类型,需求组(Procurement group, 即一组相关需求,比如来自同一订单), 源货位和目的货位。如果没有找到相应的拣货单则会新建一个拣货单并与之关联。

这种机制大大增加了灵活性。比如某些货品需要进入包装车间再包装,有些货品不需要的情况,订单中需包装的产品会被组合到一个拣货单中而不需要包装的产品会被组合进另一个拣货单中,而在发货时所有的货品又被重新组合到一个新的拣货单中。

拣货单几乎完全由其所含的库存移动决定。其状态由库存移动的状态和拣货类型决定,源货位和目的货位与其所含的库存移动的一致。预期拣货时间由所有库存移动指定日期中的最小日期决定。
拣货单的状态主要尤其所包含的库存移动决定:

如果所有的移动都是草稿状态,则拣货单也为草稿状态
如果所有的移动都是完成或取消,则拣货单也为完成或取消。

其他状态则同时取决于移动类型。移动类型用于决定客户是希望一次性完成全部产品的发货(一次性发货all at once)还是希望尽快收货(分批发货partial)。这种移动类型可以手动选择,也可以来自销售订单通过需求组传入。

如果是分批发货,则有一个特殊的状态:部分可用。当一个库存移动处于“确认/等待”状态时,部分库存已预留,这样的情况在Odoo中是允许的。该库存会仍然处于“确认/等待”的状态,但是会有一个“部分可用”的标签。这种情况下,拣货单的状态不再是“确认/等待"状态而会变为“部分可用”状态,这使得分批发货成为可能。另外,当拣货单中的部分库存移动处于预留可用状态,而其他库存移动仍然不可用时,拣货单也会变为“部分可用”状态。

有时一个库存移动并不会指定拣货类型,这意味着没有关联的拣货单。比如盘点操作及生产操作中所对应的库存移动。

创建链式库存移动的拉式(需求)和推式规则

推式规则:
根据一个库存移动的目标库位激发创建另一个库存移动的规则。新创建的库存移动的源库位与原库存移动的目标库位相同。

例如:当货品到达“收货”库位时,设定的推式规则将它们移动到“库存”库位。

所以,当“供应商库位”->"收货“库位的库存移动确认时,该规则会创建另一个库存移动:“收货库位“->“库存库位”。规则允许3中模式:自动(第二个库存移动会被自动确认),手动(第二个库存移动必须手动确认),手动不添加步骤(不创建第二个库存移动而是将第一个库存移动的目标库位替换为指定库位)

推式规则一般用于当采购订单确认后的收货操作,货品需要移入库存库位。
需求 (=拉式)规则:

拉式规则并非推式规则的反向操作!他们的基本不同点在于推式规则影响的是库存移动,而拉式规则影响的是需求。实际上称他们为需求规则更准确。但是,我们也可以这么说:推式规则作用于目标库位,而拉式规则作用于源库位。
当库存移动确认后,如果其需求方式(procurement method)为‘高级:应用需求规则’,则会在其源库位创建一个跟库存移动数量一致的需求单。需求规则会作用于该需求单用以满足需求。不同类型的需求规则会导致需求单运行后产生不同的结果,比如:从其他库位移动产品到原库存移动对应的源库位以满足其对产品的需求,或者通过采购收货到源库位以满足其对产品的需求,也或者通过生产入库到源库位来满足其对产品的需求。参见下图及说明:

这是一个"库存移动“的表单视图,默认情况下其“供应方式”(Supply Method)是“取自库存”(Default:Take from Stock),表示当该库存移动确定时将检查“源库位”是否有足够库存,如果库存不足则进入“等待可用”状态。而当我们将“供应方式”设为:”高级:应用需求规则时“,Odoo就会去检查与该库存移动的”源库位“相关的”需求规则“, 见下图:

上图中可以看到“需求规则”中有定义“需求库位”(Procurement Location), 并且在“动作”(action)中可以选择“采购”,“生产”,和“从其他库位移动存货“(选择此项会显示更多选项),根据“动作”的选择不同会产生对应的需求单,在需求单运行后会产生对应的采购或生产,或其他库存移动来满足“需求库位”的存货需求。

但是需求单也不必一定由库存移动产生。用户可以手动创建需求单,或在确认销售订单时,Odoo为每一个销售订单明细在“客户”货位创建需求单。事实上这个由需求单,库存移动单和需求规则所构建的体系在Odoo系统里是贯彻始终的。比如在最简单的库存管理设置中,当我们运行这些由销售订单创建的需求单时,这些需求规则就会创建出发运单。

在正常情况下需求单会经历下列状态:

已确认:需求单创建之后的状态
运行中:成功应用了一个需求规则(导致创建一个库存移动或报价单或生产单)
完成:   需求规则已应用并且产品已经转运到或已经在需求单所对应的货位了。

当不能找到需求规则或无法应用需求规则(比如产品上没有定义供应商)时,需求单会进入“出错”(Exception)状态。如果对产品的需求不再需要,也可以取消需求单。

默认情况下,Odoo会安装JIT计划模块。Odoo会在需求单确认时自动运算该需求。如果这导致了系统性能问题,我们也可以卸载该模块。这样只有销售订单创建的需求单会被立刻自动运行从而创建出发运单,而由库存移动创建的需求单则不会立即自动运算,而会由计划运行(Scheduler)统一安排运算时间。

由拉式规则生成的规则不能再应用推式规则了,所以拉式规则优先于推式规则。

需求规则和库存移动的需求方式  

库存移动确认后是否会在其源库位创建需求单并应用需求规则取决于其需求方式的设置。只有设置了需求方式为“高级:应用需求规则”的库存移动会生成需求单。

当用户创建一个在拣货单时,其中的库存移动将使用默认的需求方式:“默认:取自库存”。这表示该库存移动不会在其源库位创建一个需求单,而会在源库位查找是否有足够的可用库存。这也是诸如“移动呆滞库存产品到滞销库位“这样的内部移库的基本逻辑。                                                                                                                                                                                 
但是如果用户将库存移动的需求方式改变为”高级:应用需求规则“,Odoo就会在该库存移动的源库位创建需求单。(译者:写文档的人这一通反反复复,是怕自己忘了吗:-) 比如,创建发货单可以导致一个与该发货单对应的采购订单的生成。
                                                                      
当我们设置了“拣货->包装->发货“这样的需求规则时。应用该需求规则,Odoo会自动生成从仓库货位向包装货位的库存移动。这样即使你手动创建一个从仓库的发货单,Odoo也会自动创建拣货/包装流程。           
                                                                                                                                                                       
需求方式只对内部调拨,和发货有意义。收货操作不需要预留库存,所以他们总是使用默认设置”默认:来自库存“。
                                                                                                                                                                    
你可能会想是否可以连续创建多个这样的链式库存移动呢。事实上,当一个需求规则创建一个新的库存移动时,新的库存移动的需求方式可以被事先定义好。也就是说,需求规则可以决定新创建的库存移动是寻找并应用与其匹配的需求规则还是使用默认“来自库存”的设置。         
                                                                                                                                                                    
这样就可以创建出下例表述的库存移动的长链。假设我们有设置了拣货-包装-发货的需求规则的MTS需求类型的产品,当包含该产品的销售订单确认时,“链式反应“启动。首先销售订单会在客户库位创建需求单,该需求单的运行会创建从仓库出货库位到客户库位的库存移动,而该库存移动的”需求方式“为”高级:应用需求规则“,这样就会在在”出货库位“创建一个需求单,如此循环直到在”包装货位“的需求单创建库存移动单,并且该库存移动单的需求方式为”默认:来自库存“。

Odoo 的库存管理与OpenERP之前的版本有了很大的不同,解读Odoo新的WMS模块中的新特性的更多相关文章

  1. Odoo 库存管理-库存移动(Stock Move)新玩法

    库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存 ...

  2. openerp经典收藏 OpenERP库存管理的若干概念讲解(新增库存价值)(转载)

    OpenERP库存管理的若干概念讲解(新增库存价值) 原文:http://shine-it.net/index.php/topic,2425.0/topicseen.html 一.复式库存(Doubl ...

  3. 全球第一免费开源ERP Odoo WMS库存管理高级路线设置详解

    概览 路线就是推规则和拉规则的合并整理.Odoo可以配置高级推/拉路线的配置, 例如 : 管理产品的制造链条 为每个产品管理默认位置 根据业务需求在仓库中定义路线, 例如质检, 售后和供应商退货 租用 ...

  4. 疯狂C#~伴随着我的库存管理¥

    每次的等待都是期待下一次的勃发!但激进的我非常想和大家学习一些东西,所以特地的分享了一个库存管理, 生活中容易运用的很多,但现在的学业希望能够得到各界人士的帮助!!! 首先:会有几个类来让它们协调 ( ...

  5. C#的库存管理之旅的别样意义

    我不知道大家对C#的一些基础知识掌握得怎么样了? 但无论怎么样,都应该静心下来去慢慢品味我的总结以及“库存管理”项目需用到的一些知识和技巧.你将会得到你料想不到的收获哦. 知识梳理: 数据类型:boo ...

  6. EBS业务学习之库存管理

    库存管理业务流程 企业结构 库存结构 库存结构定义 指定每个子库存的特性: •子库存的数量跟踪 •资产类子库存 •保留子库存 •净值子库存 •包含在有效承诺中Include in ATP •子库存级库 ...

  7. 【MM系列】SAP的库存管理

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP的库存管理   前言部分 库存 ...

  8. 「SAP技术」为正常库存管理的物料做成本中心采购会是什么结果?

    SAP 为正常库存管理的物料做成本中心采购会是什么结果? 这种采购可以正常进行,收货后SAP会更新采购订单里指定的费用类科目,而库存数量和库存价值都不会增加. 1, 如下物料号,是正常做库存管理的物料 ...

  9. Java生鲜电商平台-库存管理设计与架构

    Java生鲜电商平台-库存管理设计与架构 WMS的功能: 1.业务批次管理 该功能提供完善的物料批次信息.批次管理设置.批号编码规则设置.日常业务处理.报表查询,以及库存管理等综合批次管理功能,使企业 ...

随机推荐

  1. C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\Team Foundation\4.0\Cache\VersionControl.config is not valid and cannot be loaded.

    Recently, we experienced a strange problem with TFS 2010. We spent a few days before we figured it o ...

  2. ZOJ3229 Shoot the Bullet(有源汇的上下界最大流)

    #pragma warning(disable:4996) #include <iostream> #include <cstring> #include <string ...

  3. 【Spark】概述

    大数据数据处理模型: 1.Google的MapReduce是一个简单通用和自动容错的批处理计算模型.但,不适合交互式和流式计算! 2.Storm 3.Impala 4.GraphLab 5.Spark ...

  4. Heroku 与 ASP.NET 5

    一. Heroku 简单来讲,Heroku是一个支持多种语言.极易部署.多价位可免费的 Pass 平台,通过 Buildpack 搭建语言运行环境, 默认内建的大部分是 Web 开发中较为常见的语言, ...

  5. SQL Server 中的存储过程

    一:初步了解存储过程的使用 创建一个简单的存储过程 CREATE PROC spEmployee AS SELECT * FROM HumanResources.Employee; 执行这个存储过程: ...

  6. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  7. sql主键的一点重要理解

    sql只会读取数据,不会自动设置主键,所以绑定数据后要设置主键(前台) 不管是int或者uniqueidentifier只要类型对得上就可以用,int自增其实没什么太大优势(但是通常都会用自增来做,从 ...

  8. iOS开发--项目内存优化

    在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点 ...

  9. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate

    为了使查询数据库时,可以使用命名参数,则要用NamedParameterJdbcTemplate 1.Java文件配置 @Bean public NamedParameterJdbcTemplate ...

  10. React-组件嵌套-子组件通过委托向父组件传值

    一.简述 父组件嵌套子组件,父组件的处理函数通过属性的方式赋值组子组件( <GenderSelect handleSelect={this.handleSelect}></Gende ...