跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 关于OE里, 产品库存的计算, 是怎么计算的, 有没有人帮我解释一下以下代码

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

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
5 帖子 2 发布者 5.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 随 离线
    随 离线
    随风
    写于 最后由 编辑
    #1

    如题, 我在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',))

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #2

      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'))
      



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

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • 随 离线
        随 离线
        随风
        写于 最后由 编辑
        #3

        首先先谢谢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}, 在这里没有看到执行汇总, 或查询记录, 所以另人费解

        1 条回复 最后回复
        0
        • digitalsatoriD 离线
          digitalsatoriD 离线
          digitalsatori 管理员
          写于 最后由 编辑
          #4

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

          【上海先安科技】(tony AT openerp.cn)

          1 条回复 最后回复
          0

          • 登录

          • 没有帐号? 注册

          • 登录或注册以进行搜索。
          • 第一个帖子
            最后一个帖子
          0
          • 版块
          • 标签
          • 热门
          • 用户
          • 群组