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

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

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

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

关于OpenERP里面的线程问题


  • 管理员

    今日研究OpenERP的mrp,想重写下这个方法,因为当我运行mrp的时候会自动生成PO,但是他们是一个个地通过make_po生成,如果我想一次过将这次运行mrp所有缺货的产品,不成功,因为里面调用make_po是逐个id调用的
    对于python的线程不是很了解,跟踪代码的时候发现id是一个个传过来,运行下图的代码是这个
    问题:如何可以一次过得到所有的Procurement Order
    [code]
    class procurement_compute_all(osv.osv_memory):
        _name = 'procurement.order.compute.all'
        _description = 'Compute all schedulers'

        _columns = {
            'automatic': fields.boolean('Automatic orderpoint',help='Triggers an automatic procurement for all products that have a virtual stock under 0. You should probably not use this option, we suggest using a MTO configuration on products.'),
        }

        _defaults = {
            'automatic': lambda *a: False,
        }

        def _procure_calculation_all(self, cr, uid, ids, context=None):
            """
            @param self: The object pointer.
            @param cr: A database cursor
            @param uid: ID of the user currently logged in
            @param ids: List of IDs selected
            @param context: A standard dictionary
            """
            proc_obj = self.pool.get('procurement.order')
            for proc in self.browse(cr, uid, ids, context=context):
                proc_obj.run_scheduler(cr, uid, automatic=proc.automatic, use_new_cursor=cr.dbname,<br />                    context=context)
            return {}

        def procure_calculation(self, cr, uid, ids, context=None):
            """
            @param self: The object pointer.
            @param cr: A database cursor
            @param uid: ID of the user currently logged in
            @param ids: List of IDs selected
            @param context: A standard dictionary
            """
            threaded_calculation = threading.Thread(target=self._procure_calculation_all, args=(cr, uid, ids, context))
            threaded_calculation.start()
            return {'type': 'ir.actions.act_window_close'}

    procurement_compute_all()

    # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
    [/code]
    [attachimg=1]


  • 管理员

    今日研究OpenERP的mrp,想重写下这个方法,因为当我运行mrp的时候会自动生成PO,但是他们是一个个地通过make_po生成,如果我想一次过将这次运行mrp所有缺货的产品,不成功,因为里面调用make_po是逐个id调用的
    对于python的线程不是很了解,跟踪代码的时候发现id是一个个传过来,运行下图的代码是这个
    问题:如何可以一次过得到所有的Procurement Order
    [code]
    class procurement_compute_all(osv.osv_memory):
        _name = 'procurement.order.compute.all'
        _description = 'Compute all schedulers'

        _columns = {
            'automatic': fields.boolean('Automatic orderpoint',help='Triggers an automatic procurement for all products that have a virtual stock under 0. You should probably not use this option, we suggest using a MTO configuration on products.'),
        }

        _defaults = {
            'automatic': lambda *a: False,
        }

        def _procure_calculation_all(self, cr, uid, ids, context=None):
            """
            @param self: The object pointer.
            @param cr: A database cursor
            @param uid: ID of the user currently logged in
            @param ids: List of IDs selected
            @param context: A standard dictionary
            """
            proc_obj = self.pool.get('procurement.order')
            for proc in self.browse(cr, uid, ids, context=context):
                proc_obj.run_scheduler(cr, uid, automatic=proc.automatic, use_new_cursor=cr.dbname,<br />                    context=context)
            return {}

        def procure_calculation(self, cr, uid, ids, context=None):
            """
            @param self: The object pointer.
            @param cr: A database cursor
            @param uid: ID of the user currently logged in
            @param ids: List of IDs selected
            @param context: A standard dictionary
            """
            threaded_calculation = threading.Thread(target=self._procure_calculation_all, args=(cr, uid, ids, context))
            threaded_calculation.start()
            return {'type': 'ir.actions.act_window_close'}

    procurement_compute_all()

    # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
    [/code]
    [attachimg=1]



  • 应该与 python 线程无关...

    参考 
    addons\procurement\schedulers.py (OE server 6.0.2)

                procurement_obj = self.pool.get('procurement.order')
                if not ids:
                    ids = procurement_obj.search(cr, uid, [], order="date_planned")

    可以得到 需要处理的 procurement.order


  • 管理员

    的确与线程无关。make_po是procurement order的一个方法, 而每个procuement order只与一个产品相关,生成的PO必然是:一个产品一个PO

    一个简单的解决方法,也是给当前客户实施采用的方法是:重载run_scheduler, 在其中增加merge po的逻辑(可以调用purchase.order中的do_merge方法),将生成的单个产品的PO按照产品对应的供应商设置进行合并。


  • 管理员

    谢谢各位回复,确实与线程无关。 :-[


登录后回复
 

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