Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

Sale order 的workflow改过之后,不能自动产生采购单



  • 我在sale order的demo下做的时候,销售的Supply method=buy的product,workflow从state=draft -> state=manual系统自动会产生采购单的,可是我改了sale orderd的workflow过后,仍旧调用原来的function:action_wait(),但采购单不能自动生成了
    demo的workflow:
    <record id="act_draft" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="flow_start">True</field>
    <field name="name">draft</field>
    </record>
    <record id="act_router" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">router</field>
    <field name="kind">function</field>
    <field name="action">action_wait()</field>
    <field name="split_mode">OR</field>
    </record>
    <record id="trans_draft_router" model="workflow.transition">
    <field name="act_from" ref="act_draft"/>
    <field name="act_to" ref="act_router"/>
    <field name="signal">order_confirm</field>
    </record>
    改过之后的workflow:
    <record id="act_bmapprove" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">bm_approve</field>
    <field name="kind">function</field>
    <field name="action">write({'state':'bm_approved'})</field>
    </record>
    <record id="act_gmapprove" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">gm_approve</field>
    <field name="action">action_wait()</field>
    <field name="split_mode">OR</field>
    </record>
    <record id="trans_bmapprove_gmapprove" model="workflow.transition">
    <field name="act_from" ref="act_bmapprove"/>
    <field name="act_to" ref="act_gmapprove"/>
    <field name="signal">gm_approve</field>
    </record>

    action_wait的function没有改过:
    def action_wait(self, cr, uid, ids, *args):
    event_p = self.pool.get('res.partner.event.type').check(cr, uid, 'sale_open')
    event_obj = self.pool.get('res.partner.event')
    for o in self.browse(cr, uid, ids):
    if event_p:
    event_obj.create(cr, uid, {'name': 'Sale Order: '+ o.name,
    'partner_id': o.partner_id.id,
    'date': time.strftime('%Y-%m-%d %H:%M:%S'),
    'user_id': (o.user_id and o.user_id.id) or uid,
    'partner_type': 'customer', 'probability': 1.0,
    'planned_revenue': o.amount_untaxed})
    if (o.order_policy == 'manual'):
    self.write(cr, uid, [o.id], {'state': 'manual'})
    else:
    self.write(cr, uid, [o.id], {'state': 'progress'})
    self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])



  • 我在sale order的demo下做的时候,销售的Supply method=buy的product,workflow从state=draft -> state=manual系统自动会产生采购单的,可是我改了sale orderd的workflow过后,仍旧调用原来的function:action_wait(),但采购单不能自动生成了
    demo的workflow:
    <record id="act_draft" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="flow_start">True</field>
    <field name="name">draft</field>
    </record>
    <record id="act_router" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">router</field>
    <field name="kind">function</field>
    <field name="action">action_wait()</field>
    <field name="split_mode">OR</field>
    </record>
    <record id="trans_draft_router" model="workflow.transition">
    <field name="act_from" ref="act_draft"/>
    <field name="act_to" ref="act_router"/>
    <field name="signal">order_confirm</field>
    </record>
    改过之后的workflow:
    <record id="act_bmapprove" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">bm_approve</field>
    <field name="kind">function</field>
    <field name="action">write({'state':'bm_approved'})</field>
    </record>
    <record id="act_gmapprove" model="workflow.activity">
    <field name="wkf_id" ref="wkf_sale"/>
    <field name="name">gm_approve</field>
    <field name="action">action_wait()</field>
    <field name="split_mode">OR</field>
    </record>
    <record id="trans_bmapprove_gmapprove" model="workflow.transition">
    <field name="act_from" ref="act_bmapprove"/>
    <field name="act_to" ref="act_gmapprove"/>
    <field name="signal">gm_approve</field>
    </record>

    action_wait的function没有改过:
    def action_wait(self, cr, uid, ids, *args):
    event_p = self.pool.get('res.partner.event.type').check(cr, uid, 'sale_open')
    event_obj = self.pool.get('res.partner.event')
    for o in self.browse(cr, uid, ids):
    if event_p:
    event_obj.create(cr, uid, {'name': 'Sale Order: '+ o.name,
    'partner_id': o.partner_id.id,
    'date': time.strftime('%Y-%m-%d %H:%M:%S'),
    'user_id': (o.user_id and o.user_id.id) or uid,
    'partner_type': 'customer', 'probability': 1.0,
    'planned_revenue': o.amount_untaxed})
    if (o.order_policy == 'manual'):
    self.write(cr, uid, [o.id], {'state': 'manual'})
    else:
    self.write(cr, uid, [o.id], {'state': 'progress'})
    self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])


  • 管理员

    是否转为采购单与你改的那部分workflow无关。

    销售单是否转为采购单需要运行mrp运算来决定,可以在生产管理模块中手动运行,或者在系统管理的设置里有自动按时来启动mrp运算的。



  • 我觉得是跟process有关系的问题,是从一个flow转到另一个flow的


  • 管理员

    你大概理解错了我的意思,系统对销售订单的处理当然会涉及工作流,但是你所改动的workflow部分与所提到的不能产生采购订单没有直接关系。
    我们看一下sale.order.basic这个工作流,当通过点击销售订单确认按钮(gm_approve),工作流pass router节点来到ship节点时就会激发action_ship_create函数,其中:[code] wf_service = netsvc.LocalService("workflow")
    wf_service.trg_validate(uid, 'mrp.procurement', proc_id, 'button_confirm', cr)
    self.pool.get('sale.order.line').write(cr, uid, [line.id], {'procurement_id': proc_id})
    [/code]上面的代码意思是根据你的销售订单创建并确认了一个对应的Procurement order(物料需求单)
    你只有运行mrp运算(或者叫run procurement)它才能决定是否产生采购订单。(当你的订单和产品数量非常多时,一般mrp运算是很耗时的,所以我们在管理菜单中可以设置让它定时自动运行,比如在晚上没有人用系统的时候)

    为什么要多一个Procurement的过程,举一个最简单的例子,比如有两个不同的客户订了同样的东西,系统中有两张销售订单,通过procurement运算就可以合并这个需求生成一张采购订单。
    procurement order 长的样子(我这里是开发中的v5.2,可能跟v5.0X稍有不同):
    [attach]461[/attach]

    [[i] 本帖最后由 digitalsatori 于 2010-3-25 17:38 编辑 [/i]]



  • 我在qq群里也是这么解释的,但楼主和老肖都坚持 只要在产品获取方式上设置为采购就可以确认销售订单直接生成采购订单,楼主说他生成了,老肖说OpenERP Book里写得很清楚

    我几次测试都没生成采购订单,一定是走 需求单 mrp 采购订单 这个路径

    搞得我以为我RP问题。。。

    校长,你真滴确定么?


  • 管理员

    @wjfonhand, 我确定你没有RP问题
    @jimmy_zjw 在系统管理菜单下检查一下你的 mrp.procurement.basic 工作流的confirm节点,其出转换(outgoing transition)名字为confirm_wait是否有定义一个叫button_check的Signal。

    如果没有定义这个signal,销售订单确定后直接生成采购订单是可能的。 可是在我本地电脑安装的OE中(5.0.X stable和 5.2dev)无论是在xml workflow定义中还是在系统菜单下都有这个button_check的signal.
    但是在demo.shine-it.net中却没有这个signal, 可能是有人删除了,也有可能是OE在某个小版本中没有设置这个signal。

    但是不设置这个signal的procurement工作流,虽然似乎确实能满足某些用户的简单需求,不过实际上可能就是个后来被fix的bug:)

    [[i] 本帖最后由 digitalsatori 于 2010-3-26 12:59 编辑 [/i]]



  • 这里设置为采购后,还需要添加默认的产品供应商。如果走需求单的话,那就太麻烦了


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待