【odoo14】经典好书学习没有烂尾,主体已完成,可移步了解。https://www.cnblogs.com/xushuotec/p/14428210.html
背景
近期,有朋友打算上odoo系统。目前已有一套ERP系统了,由于是标准化产品,所以用起来各种不爽,终于在使用了两年后打算迁移。PS,我接的时候已经有一家odoo二开公司在做了,名气还是比较大的,我原本以为开发的东西还是蛮好的。但从朋友的反应及二开出来的代码质量看来,确实名不副实。至少给他们做二开的技术人员有点砸招牌的感觉。
所以,请各位打算上odoo的朋友要仔细甄别哦。odoo虽好,但是二开市场差异性还是蛮大的,别只看公司名气,要看来实际负责的技术哦
数据迁移
数据迁移是所有打算从老系统迁移至odoo的朋友所面对的一大难题,这里的道道就比较多了。
方案
- 新建模块
这种事最简单的了。就是将现有数据直接导入到新的模块,数据与odoo其实中的业务流程模块基本上是数据分割的,历史数据仅做查询时候。
优点:迁移简单,开发量根据数据原型设计即可,开发周期相对较短,保持原始数据的真实性。
缺点:与odoo系统业务流程分割,无法实现在相关模块的集成,比如采购、销售等数据要到单独的模块进行查询。 - 深度集成
这种就复杂多了,对于数据迁移人员的要求会很高,将历史数据集成到odoo的业务中去。简单讲就是,将历史数据在odoo中走一遍。
优点:对于用户而言,可专注于系统本身的业务逻辑,数据更加完整。
缺点:工作量大,需要技术人员对于数据细致的拆分,对于odoo现有模块有深入理解,否则会出现数据丢失或者不准确的情况。
基于以上,我个人建议做方案二,虽然工作量大很多,但是对于用户而言更加友好。
实施
由于朋友是做跨境电商服务,涉及几个odoo中核心的模块包括:采购、库存、销售、会计、汇率、联系人等。历史数据包括:采购订单、内部调拨、销售、商品报损、商品报溢、退款等。
以上在做数据迁移的时候,需要重点注意的是:时间和金额。这两点是重中之重,不然对于最后的期末估值会有很大影响。
新建数据迁移模块
为什么此处又写新建模块了呢?因为这是实现数据录入odoo系统最快的方式了(别问我怎么知道的,说多都是泪)。这里要注意,是录入。并未与odoo系统的业务逻辑做任何的继承。数据转odoo模型数据
对于原始数据而言,odoo是不知道它的真实意义的。所以我们要做的是将这些数据分解到各个模块中去。比如,采购数据其中就涉及到采购单(purchase.order、purchase.order.line)、采购员(res.users、res.partner)、供应商(res.partner)、商品(product.template、product.prodcut)等,这些内容分属于不同的模块。
坑位: 1) 产品的唯一标识(SKU)不唯一
, 2) 采购单后续是库存,这对于原始数据是隐藏的信息,需我们自己分析并添加数据源基于odoo原生业务的流程数据处理
在上面我们将原始数据导入odoo模型后,其实我的做法是所有数据都处于draft阶段,这个阶段的数据对于系统而言类似于草稿箱数据。本阶段,我们要做的就是将草稿箱数据转正。
此处又有两种转正的方式:
1)最业务简单但开发复杂的是,按照原始数据的时间顺序,开发处理逻辑。比如,处理方式的是 时间1的采购、时间2的到货、时间3的销售、时间4的发货。其中穿插着新的采购销售的流程。
2)也是我采用的方式,下面重点介绍。
对于库存而言,只有两种方式,入和出;内部调拨想怎么玩怎么玩。因此,我首先梳理了入,包括采购、退货、报溢。出,包括销售、报损。
我首先将所有的采购、退货、报溢进行数据处理,实现库存数量的最大化;然后将内部调拨处理,将商品分配到各自的仓库;最后处理出的问题,实现库存的减操作。
在数据源完整的情况下,以上流程最后的数据是对的起来的。至于如何批量实现基于odoo流程的数据处理,就需要我们针对每个阶段做定制化的处理了。
坑一,必要的流程数据对不上
上面情况处理完后,总数最后虽然对上了,但是缺少部分流程数据。比如,商品A在仓库A发货,但是整个业务数据中并没有发往仓库A的内部调拨,因此商品A理论上发不出的货。这种情况,没好办法,找甲方吧。
坑二,时间修正
不管采用哪种方式进行数据迁移,在数据进odoo的那个瞬间,就已经决定了原始时间数据变了。比如采购商品的到货时间变成了我们在odoo中操作的时间、基于到货的库存价值(stock.valuation.layer)也是错。
因此,我进行时间的修正,包括采购时间、到货时间、销售时间等内容。以上通过odoo模块实现修正可以实现,但是效率不高,且create_datetime是修正不过来的,odoo底层做了限制。因此我在修正库存价值的时候发现时间一直都是错误的,是当前操作的确认收货时的时间。最后,解决方案,直接到postgresql中去操作数据库吧。这操作比较危险,但是是效率最高,准确性最高的方式了。此处,再次强调,对于odoo结构不了解的朋友,别直接去碰数据库,这将绕过很多odoo为了安全而做的限制哦。
现在回头看看,似乎也没那么复杂嘛。,哎。