全球排名第一免费开源ERP Odoo层次数据结构处理原理

Odoo层次结构(parent_left, parent_right)处理原理

Odoo中很多层次结构表,如库位表(stock.location)、Partner表、包裹(stock.operation.package)等表,都有一个parent_id字段指示其上级记录。为了提高层次结构(树状结构)的处理效率,系统中还另外增加了两个字段(parent_left, parent_right),用于快速遍历树状节点。详细原理可以参考这里:之前的《数据库中存储层级结构算法解析》。

开源ERP Odoo层次数据结构处理原理

图片来源:开源智造-OSCG.CN

Odoo中 child_of 操作符充分利用字段(parent_left, parent_right),快速返回下级记录(包括儿子、孙子)。由于种种原因,系统中字段(parent_left, parent_right)有时候会错乱,child_of 不能正确取值,导致一系列奇怪问题。常见问题是,明明有库存,却总是不能保留出库(原因是库位的 parent_left, parent_right 错乱了)。


具体解决办法

Odoo中parent_left 维护着树状结构前序遍历的顺序,parent_right 总是等于 parent_left 加上 子节点数的两倍再加1 。没有子节点的,parent_right = parent_left + 1 , 2个子节点的,parent_right = parent_left + 4 + 1 。如下图所示的库位表结构。

Odoo中child_of 的实现原理是,一个节点的所有下级节点的条件是:parent_left大于当前节点的parent_left, parent_right 小于当前节点的parent_right的所有节点即为下级节点。如果parent_left, parent_right错乱了,child_of 操作就不对,这会导致很多奇怪错误!

系统的base model有一个方法 _parent_store_compute(),用于重算全表的parent_left, parent_right 。 如果parent_left, parent_right错乱了,可以写一个修正的Server Action,一条语句:model._parent_store_compute() ,执行它,重算一下parent_left, parent_right 即OK。

开源ERP Odoo层次数据结构处理原理

图片来源:开源智造-OSCG.CN

文章编辑:开源智造(OSCG.CN) - 源自欧洲,业界领先的免费开源ERP专业服务商

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Odoo是一款开源ERP(企业资源规划)系统,它提供了一系列的应用模块,可以满足企业的各种需求。这些模块涵盖了人力资源、销售、采购、库存、会计、生产等领域。 对于企业来说,想要快速高效地实施Odoo系统,就需要一本全面的应用手册。这样的手册应该包括以下内容: 1. 系统安装与配置:手册应该提供详细的安装指导,包括环境要求、数据库设置和Odoo的部署过程。此外,还应该介绍如何进行系统配置,包括语言设置、账户设置和菜单布局等。 2. 基础应用模块:手册应该逐一介绍Odoo系统的各个基础应用模块,包括人力资源、销售、采购、库存等。对于每个模块,手册应该介绍其功能和使用方法,并提供示例和截图,以帮助用户更好地理解和运用。 3. 高级应用模块:除了基础应用模块,Odoo还提供了许多高级应用模块,如项目管理、生产、质量控制等。手册应该详细介绍这些模块的功能和操作流程,并提供实际案例,帮助用户更好地应用于实际业务中。 4. 功能定制与扩展:Odoo是一个高度可定制和可扩展的系统,手册应该介绍如何进行功能定制和扩展。这包括添加自定义字段、修改现有模块、开发新模块等。手册应该提供清晰的示例和说明,以帮助用户进行定制和扩展操作。 5. 故障排除与技术支持:最后,手册应该包括故障排除的常见问题和解决方法,以及如何获取Odoo的技术支持。这样,在实施过程中遇到问题时,用户可以方便地找到解决方案。 总之,一本全面的Odoo实施应用手册应该提供系统安装与配置、基础应用模块介绍、高级应用模块操作指南、功能定制与扩展说明以及故障排除与技术支持。这样的手册将帮助企业快速上手和有效应用Odoo系统,提升企业运营效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值