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

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

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

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

关于OE里, 产品库存的计算, 是怎么计算的, 有没有人帮我解释一下以下代码



  • 如题, 我在product.py找到如下代码, 但是没有找到具体如何算的方法,大侠们帮帮! 
    def _get_product_available_func(states, what):
            def _product_available(self, cr, uid, ids, name, arg, context=None):
                return {}.fromkeys(ids, 0.0)
            return _product_available

        _product_qty_available = _get_product_available_func(('done',), ('in', 'out'))
        _product_virtual_available = _get_product_available_func(('confirmed','waiting','assigned','done'), ('in', 'out'))
        _product_outgoing_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('out',))
        _product_incoming_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('in',))


  • 管理员

    OpenERP中的库存计算是通过对stock.move的统计运算来完成的。

    在OpenERP中实际有两种库存:实际库存, 未来库存(虚拟库存,账面库存)

    比如对某个库存地点(Stock Location)的[b]实际库存[/b]:就是对所有已完成的(状态为done)进入(in)该库存地点库存移动(stock.move)- 所有已完成的移出该库存地点的库存移动
    翻译成代码就是:

    _product_qty_available = _get_product_available_func(('done',), ('in', 'out'))
    


    而对于某库存地点的[b]未来库存[/b],就要考虑尚未完成的库存移动,或者说是在途的库存移动,这些状态为:confirmed(确认了但库存移动的起始地点尚没有货物),waiting(比如在连锁库位的情况下,之前的库存尚未完成,因此该库存移动的起始地点尚还没有货物),assigned(库存移动的其实地点已有货物,但移动尚未完成),翻译成代码就是:

    _product_virtual_available = _get_product_available_func(('confirmed','waiting','assigned','done'), ('in', 'out'))
    



    理解了以上两行代码,下面的代码就应该不言而喻了。



  • 首先先谢谢digitalsatori,
    意思大概清楚了,但是:

    def _get_product_available_func(states, what):<br />&nbsp; &nbsp; &nbsp; &nbsp; def _product_available(self, cr, uid, ids, name, arg, context=None):<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {}.fromkeys(ids, 0.0)<br />&nbsp; &nbsp; &nbsp; &nbsp; return _product_available<br /><br />&nbsp; &nbsp; _product_qty_available = _get_product_available_func((&#039;done&#039;,), (&#039;in&#039;, &#039;out&#039;))<br />&nbsp; &nbsp; _product_virtual_available = _get_product_available_func((&#039;confirmed&#039;,&#039;waiting&#039;,&#039;assigned&#039;,&#039;done&#039;), (&#039;in&#039;, &#039;out&#039;))<br />&nbsp; &nbsp; _product_outgoing_qty = _get_product_available_func((&#039;confirmed&#039;,&#039;waiting&#039;,&#039;assigned&#039;), (&#039;out&#039;,))<br />&nbsp; &nbsp; _product_incoming_qty = _get_product_available_func((&#039;confirmed&#039;,&#039;waiting&#039;,&#039;assigned&#039;), (&#039;in&#039;,))<br />
    


    对于def _get_product_available_func(states, what):
            def _product_available(self, cr, uid, ids, name, arg, context=None):
                return {}.fromkeys(ids, 0.0)
            return _product_available
    如何取数据库数据不明白, return {}.fromkeys(ids, 0.0)实际上是初始化, 比如product id = 1 {}.fromkeys(ids,0) = {1:0.0}, 在这里没有看到执行汇总, 或查询记录, 所以另人费解


  • 管理员

    在stock 模块中product这些函数字段都被override 了,看一下stock/product.py