OpenERP的MRP运算的核心对象--Procurement Order
-
Shit Happens
==========
上回说到Proc与MRP的正统血缘传承,以及“哪里有物料需求哪里就有'需求单'”的心经口诀。心经之神力也的确立时就有应验。一耽上路,即觅得Proc行踪。正暗自庆幸RP,Luck指数,却发现是些Proc in Exception。心下狐疑之际,江湖号称“水哥”,“姐夫”的两位大侠及时赶到,一番指教让小弟们如醍醐灌顶,不再陷于:“打还是不打,或是用正义的口水驱逐异类入侵”的内心挣扎。
原来,我们看到的的确是Exception状态的Proc。这个列表正如“姐夫”所述是通过过滤器将“生病“或”例外“状态的Proc过滤出来得到的。如果我们点击上面的"Clear"按钮就会清除默认设置的过滤器,Tah Tah, 整个Proc家族尽收眼底了:
[attachimg=1]
但是为什么默认情况下会只显示这些肮脏的“例外“Proc呢? 记得电影《阿甘正传》中阿甘在跑步时踩到了狗屎(shit), 旁边一位失意的商人问他对此事的看法,阿甘表情轻松地说:「Shit Happens.」, 意思是说“人生不如意十之八九,何必太过执着”。 我们暂时先忘了这些肮脏的Exception, 把手弄脏(make hands dirty) 来创建一个Proc看看:
Procurement Reason: Test Proc Mouse
Product: Mouse
Quantity: 10
Location: Stock
其他保持默认,然后点击‘Confirm'按钮。
[attachimg=2]
你会看到Proc的状态变为“Confirmed", 并且出现一个“Run Procurement”按钮。
切换到“Extra Information"页。
[attachimg=3]
留意一下这里的字段名,比如:Bom,Date Closed, Reservation, Purchase Order, Properties等,大多数都没有值。特别留意一下唯一有值的字段“Reservation: MOU:Procurement > Stock"。 在以后虚拟库存数量的计算中会再次回到这里介绍的。
好了,既然有一个可以点击的按钮(Run Procurement),我们这些追求"让自己的手更脏一点吧“的黑手党成员一定会按奈不住,我们点它一下又如何!
'oops', 'shit', ’我靠‘, Exception又来了...
我们现在已经学会了另一个心经了--[b]“Shit Happens“[/b], 微笑,从容。看看Latest Error中告诉我们什么,“该货品未定义供应商”。那我们点击“Mouse”这个产品链接,进入Mouse产品的定义界面一看究竟:
[attachimg=4]
注意这里有几个与Procurement相关的字段:Product Type, Procurement Method, Supply Method。 这里的Procurement Method的默认值是Make to Stock, 而我们之前创建的Proc中好象也有这个字段,只不过默认的值好象是Make to Order, 他们到底有什么关系呢?先把这个问号揣在口袋里吧。Product Type是Stockable Product(库存商品)倒也好理解,可是其他选项:Consumable, Service又做合解呢?Supply Method这里是Buy,如果换做Produce有如何呢?好象陷阱重重,此地不宜久留。
切换到“Procurement & Location":
[attachimg=5]
这里又是一堆跟Proc相关的参数,总体来说是跟时间(Lead Time),地点(Stock Location), 库存规则(最小库存规则)相关的参数。回忆一下上一回对MRP的定义,MRP运算就是在确定的地点,指定的时间,按照库存规则确定物料需量的计算。可是我们该怎么设置这些参数呢?口袋里揣的问号越来越多了,可是我们还有为Mouse设置供应商的任务尚未完成。不求甚解,继续前进...
切换到‘Supplier'界面时,我们已经有点筋疲力尽了,不过这里总算柳暗花明,姐妹弟兄们春天到了:
[attachimg=6]
在这里我们可以定义该产品的
'供应商'--Supplier,
供应商对该产品的称呼--Supplier Product Name,
供应商对该产品的编码--Supplier Product Code,
供应商要求的最小订货批量--Minimal Quantity,
供应商的发货时间--Delivery Lead Time,
供应商供应产品的计量单位--Supplier UOM,
以及根据产品订货数量不同供应商的价层次表(Tier Price)--Price list
通过对上述各字段的解释,大家可以了解到OpenERP对产品上相关供应商的设置内容还是做得很细致的。他不但对供应商供货的价格,数量,时间都有明确的定义,甚至还考虑到了供应商和我们对产品的称呼和代码编号的不同。这样我们在开具采购订单时,内部选择我们熟悉的产品名称和代码,而发给供应商的采购订单上是供应商熟悉的名称和代码。
为了简便操作我们只录入了供应商和最小订货批量(Minimal Quantity)。保存后,返回到刚才的Procurement Exception, 点击“Retry"按钮。
[attachimg=7]
'Tah tah', Proc的状态变为了'running', 我们再切换到‘Extra Info'页面:
[attachimg=8]
Reservation的值依旧不变,Purchase Order却多了一个值,点击进去:
[attachimg=9]
发现一张采购订单的草稿已经创建好了。注意他的状态是“Request for Quotation", 表示还处于请求报价的草稿状态。其供应商正是我们在Mouse产品的Supplier页中定义供应商,而其采购数量则并不等于需求单上的需量10,而是20。这个也好理解,因为我们在产品的供应商信息中定义了采购的最小批量20。
[info height=30 border=red]
事实上,我们在为客户的OE项目中开发了一个模块,可以在产品的供应商定义信息中将最小订购批量设置为警告信息。就是说,由Proc生成的采购订单的数量还是严格按照需求单的数量,但是提供一个警告信息,表示此订单的数量小于供应商要求的最小订货批量。此模块不久就会公开发布到Launchpad上。
[/info]
这个时候如果我们返回Warehouse->Scheduler->Procurement Exceptions, 刚才那个Proc不见了。记得吗,这个需求单已经不再是Exception状态了,你可以Clear默认过滤器,然后比如按产品名称或其他相关字段搜索来找到这张需求单。
那么这张running的需求单什么时候会变成done完成状态?需求单上的Reservation又是肿么个意思?难道我们每次都要手动创建需求单,然后手动去运行他吗?如果我对PC1(demo数据)这个产品创建需求单,有会如何?
欲知后事如何,且听下回分解。。。 -
[quote author=mrshelly link=topic=2923.msg9884#msg9884 date=1336973840]
为什么要为供应商的最小订货量去改模块警告呢? 为神马不是修改供应商的最小订货量?
[/quote]
供应商的最小订货量,这是一个经验值,是和供应商长期接触后从供应商那里得到的刚性指标,本公司的人不可能因为一个订单去改别人的指标。
OpenERP默认的行为是,当你本次需要采购的数量低于供应商的最小订货量,它会把订单行数量改为等于供应商的最小订货量(减少与供应商的沟通确认成本)。
我们的客户希望按实际需求数量下采购订单,而采购员要知道此数量未达到供应商的最小订货量,并与供应商沟通。 -
[quote author=Jeff link=topic=2923.msg9887#msg9887 date=1336975077]
[quote author=mrshelly link=topic=2923.msg9884#msg9884 date=1336973840]
为什么要为供应商的最小订货量去改模块警告呢? 为神马不是修改供应商的最小订货量?
[/quote]
供应商的最小订货量,这是一个经验值,是和供应商长期接触后从供应商那里得到的刚性指标,本公司的人不可能因为一个订单去改别人的指标。
OpenERP默认的行为是,当你本次需要采购的数量低于供应商的最小订货量,它会把订单行数量改为等于供应商的最小订货量(减少与供应商的沟通确认成本)。
我们的客户希望按实际需求数量下采购订单,而采购员要知道此数量未达到供应商的最小订货量,并与供应商沟通。
[/quote]
Jeff解释的非常的清晰。实施上我们的这个模块提供的是一个更多的选项。在产品供应商信息上有一个‘是否将moq显示为警告‘的勾选项。如果不选,则使用默认的方法计算采购量;如果勾选了,则用Proc中的数量作为采购量,但是提供警告信息。
[quote author=hifly link=topic=2923.msg9888#msg9888 date=1336977042]
校长出手,都是精品。
讲的非常好,鼓掌中。。。
有了OpenERP中文版本,演示界面是中文的就更好了。
[/quote]
多谢海飞兄夸奖。
选择英文界面和在文章中多处使用英文术语的原因主要还是为了准确性的考虑。Procurement相关的术语的中文翻译中还是有一些不够准确,希望借这次机会能梳理出一个勘误表。 -
需求在哪里呀,需求在哪里
================
感谢各位朋友的抬爱。有朋友提醒,在以前的回合中过多的无关主题的信口雌黄可能会分散对专题内容的注意力,所以以后会有所收敛。
我们在上一回中介绍了Proc有几个不同的状态,而菜单项"Procurement Exception"只是过滤显示出了因为某些原因而无法进一步处理的"有问题"的Procurement。在保持"Shit Happens"的良好心态下,我们按图索骥解决了问题发生的原因,并且成功运行了Proc, 生成了对应的采购订单。在此过程中我们浮光掠影的了解到产品的定义界面中涉及了很多涉及时间,地点,库存规则等与Proc相关的设置参数。
如果哪位姐妹弟兄在看完上回介绍内容后竟然还对上回中最后提到的那个问题动手做了试验,本人真得就感动的hold不住了。如果你做了,运行该Proc可能会是两个结果:Proc变成了一个没有任何错误提示的Exception状态的Proc, 或者幸运的发现系统生成了一张生产单,如果再仔细一点就会发现系统还生成了一系列跟这张生产单相关的Proc 。
[attachimg=1]
创建的生产单单号为MO/00013,而以上列表中显示的是OpenERP同时生成的与这张生产单相关的Proc
对于第一种结果,那是因为你没有安装生产模块(MRP)。至于为什么对PC1这个产品运行Proc不会象之前那样生成采购单而是生成生产单的原因,想必大家也想到了。这是因为PC1这个产品的定义上Supply Method是Produce而之前的Mouse则是Buy。
[attachimg=2]
好了,我们知道当为定义了不同的Supply Method的产品创建Proc并运行时,OpenERP会生成采购订单或生产单。事实上我们基本可以将为Supply Method为Produce的产品创建的Proc称为"生产计划单",而将Supply Method为Buy的产品创建的Proc称之为"请配单/请购单"。那么在产品定义表单的Supply Method之上还有个Product Type字段。目前我们试验用到的产品(Mouse,PC1)都是Stockable Product,[b]将其换成“Service”又如何(请分别使用produce和buy)?不妨动手试试。[/b]至于Conumable的类型以后再做交待吧
到目前为止我们都是自己创建Proc,然后又自己点击运行按钮运行这个Proc,这是不是太不够自动化了。尤其是象之前那个生成生产单的同时又生成很多相关Proc的情况,难道我们还要一个个的找出他们然后点击那个劳什子"运行"按钮"? 答案当然是不必的。你可能已经注意到在Procurement Exceptions这个菜单项上有个Compute Scheduler这个菜单。点击它就会弹出一个表单,再点击上面的Compute Scheduler按钮就会自动运行所有Confirmed的Proc,当然上面还有一个Automatic Order Porint的选项,也放到以后介绍:
[attachimg=3]
其实,OpenERP连点击这个按钮都想为你省了。当你将Settings-Configuration-Scheduler-Scheduled Actions下的Run Mrp Scheduler定时器激活,并设定时间及运行周期(一般让它在夜深人静的时候运行,因为MRP运行比较耗费系统资源)后,一切就都和谐了。
[attachimg=4]
那么,为什么在生成生产单的同时OpenERP又生成了一堆Proc呢? 要回答这个问题就要对"哪里有物料需求哪里就有需求单" 这句绕口令钻钻牛角尖了。先来考虑一下[b]企业对物料的需求到底有哪几类?企业的物料需求到底源自哪里?[/b]这两个问题看似简单,其实如果回答的靠谱,后面的交代就轻松了。请各位试试回答这两个问题吧! -
首先感谢校长早上五点钟的大作。
实际试验了一下那个手动创建需求单,PC1,需求1个。
[quote] 05/22/2012 [PC1] Basic PC 1.000 PCE on order Running [/quote]
运行了proc之后,单据变成
[b]Running[/b], [b]Reservation :PC1: Stock > Stock[/b]
想着也是,我这样平白无故地创建了一个从 库存->库存的需求,让仓库管理人员原地搬了一下货物,心生愧疚(看了下下面的Proc workflow,看来路还远着呢..)。想把这个Proc单了结了,但是好像这个这个单一直在运行状态,我点击了 Reservation,进去就是一个Stock Moves,这怎么办呢?
[quote]先来考虑一下企业对物料的需求到底有哪几类?企业的物料需求到底源自哪里?[/quote]
[attachimg=2]
1.企业对物料的需求,生产和销售。
2.物料来源.采购和生产。
盼望校长指正。 -
[quote author=ccdos link=topic=2923.msg9932#msg9932 date=1337650504]
Procurement 就是 一个中间过程的单据,根据产品定义的供应方法,分别再生成 采购单 和 生产单,各自进行后续的流程,对否 ?
[/quote]
中间过程单据的说法基本正确,但同时也不妨碍它的独立使用。另外还有多个影响其后续流程的因素,会在后面的话题中介绍
[quote author=Joshua link=topic=2923.msg9933#msg9933 date=1337650833]
实际试验了一下那个手动创建需求单,PC1,需求1个。
[quote] 05/22/2012 [PC1] Basic PC 1.000 PCE on order Running [/quote]
运行了proc之后,单据变成
[b]Running[/b], [b]Reservation :PC1: Stock > Stock[/b]
想着也是,我这样平白无故地创建了一个从 库存->库存的需求,让仓库管理人员原地搬了一下货物,心生愧疚(看了下下面的Proc workflow,看来路还远着呢..)。想把这个Proc单了结了,但是好像这个这个单一直在运行状态,我点击了 Reservation,进去就是一个Stock Moves,这怎么办呢?
[/quote]
还真是有动手做试验的人,如果你注意一下这个字段值在Run Proc前后的变化就能大致看出点名堂了。我们在后面会从代码上剖析其原因
[quote]
1.企业对物料的需求,生产和销售。
2.物料来源.采购和生产。
[/quote]
还不正确
[quote author=mrshelly link=topic=2923.msg9937#msg9937 date=1337665934]
[quote author=digitalsatori]
企业对物料的需求到底有哪几类?企业的物料需求到底源自哪里 ?
[/quote]
1 采购? 自制?
2 最终都是采购?
[/quote]
第二个问题的回答,是否正确取决于这个采购是企业的物料采购还是客户的物料采购。 -
企业对物料的需求可以分为两类,独立需求和相关需求。
独立需求又被称为主生产计划(MPS),是由企业的销售预测(今年哪类产品能卖出多少数量)结合产品大类里的具体产品比例分配计算出来的。一般用于可供销售的最终产品,相关需求是独立需求的产品数量根据BOM展开的原材料或项目工时等。
以上是指基于销售预测的运营方式,如果是按单生产,那就是销售订单上的产品是独立需求,然后为制造这个产品需要投入的原材料就是相关需求。
用于销售的最终产品一定是独立需求,但原材料不一定是相关需求。比如一些配件,你可以直接在产品右侧输入proc,这时就是独立需求了(数量不是从BOM来的)。
没看书,不知回答得靠不靠谱。 -
[quote author=Jeff link=topic=2923.msg9947#msg9947 date=1337759600]
企业对物料的需求可以分为两类,独立需求和相关需求。
独立需求又被称为主生产计划(MPS),是由企业的销售预测(今年哪类产品能卖出多少数量)结合产品大类里的具体产品比例分配计算出来的。一般用于可供销售的最终产品,相关需求是独立需求的产品数量根据BOM展开的原材料或项目工时等。
以上是指基于销售预测的运营方式,如果是按单生产,那就是销售订单上的产品是独立需求,然后为制造这个产品需要投入的原材料就是相关需求。
用于销售的最终产品一定是独立需求,但原材料不一定是相关需求。比如一些配件,你可以直接在产品右侧输入proc,这时就是独立需求了(数量不是从BOM来的)。
没看书,不知回答得靠不靠谱。
[/quote]
没看书,但是回答照样标准,一丝不走样。虽然不是我期待的答案,但确实对所介绍的内容的一个很好的补充。其实我的这个需求类型的提问设计的并不好,按照不同的标准划分,就会有不同的答案。
[quote author=dquo link=topic=2923.msg11212#msg11212 date=1338413597]
可变物料/不可变物料?
可变:材料,人?
不可变物料:车间(车间相关服务人员工资,车间水电杂费及车间的房租等)
咨询校长:OE的人的使用方法?象服装等很多非标准流水线工厂,人多人少直接影响生产进度,发现OE有人这个选项,但这个人可以从哪几个方面来影响生产任务单呢?
[/quote]
感谢鱼的热情参与。材料,人或者更准确的说是人所花费的时间都是需求所涉及的对象而非需求本身。关于生产任务单的问题最好能另开帖子讨论,我们就不在这里纠缠了