Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

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

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

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

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

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

    Odoo 开发与实施交流
    2
    5
    5242
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 随
      随风 最后由 编辑

      如题, 我在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
      • digitalsatori
        digitalsatori 管理员 最后由 编辑

        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
        • 随
          随风 最后由 编辑

          首先先谢谢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
          • digitalsatori
            digitalsatori 管理员 最后由 编辑

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

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

            1 条回复 最后回复 回复 引用 0
            • First post
              Last post