【odoo14】经典好书学习没有烂尾,主体已完成,可移步了解。https://www.cnblogs.com/xushuotec/p/14428210.html

背景

近期,有朋友打算上odoo系统。目前已有一套ERP系统了,由于是标准化产品,所以用起来各种不爽,终于在使用了两年后打算迁移。PS,我接的时候已经有一家odoo二开公司在做了,名气还是比较大的,我原本以为开发的东西还是蛮好的。但从朋友的反应及二开出来的代码质量看来,确实名不副实。至少给他们做二开的技术人员有点砸招牌的感觉。

所以,请各位打算上odoo的朋友要仔细甄别哦。odoo虽好,但是二开市场差异性还是蛮大的,别只看公司名气,要看来实际负责的技术哦

数据迁移

数据迁移是所有打算从老系统迁移至odoo的朋友所面对的一大难题,这里的道道就比较多了。

方案

  1. 新建模块

    这种事最简单的了。就是将现有数据直接导入到新的模块,数据与odoo其实中的业务流程模块基本上是数据分割的,历史数据仅做查询时候。

    优点:迁移简单,开发量根据数据原型设计即可,开发周期相对较短,保持原始数据的真实性。

    缺点:与odoo系统业务流程分割,无法实现在相关模块的集成,比如采购、销售等数据要到单独的模块进行查询。
  2. 深度集成

    这种就复杂多了,对于数据迁移人员的要求会很高,将历史数据集成到odoo的业务中去。简单讲就是,将历史数据在odoo中走一遍。

    优点:对于用户而言,可专注于系统本身的业务逻辑,数据更加完整。

    缺点:工作量大,需要技术人员对于数据细致的拆分,对于odoo现有模块有深入理解,否则会出现数据丢失或者不准确的情况。

基于以上,我个人建议做方案二,虽然工作量大很多,但是对于用户而言更加友好。

实施

由于朋友是做跨境电商服务,涉及几个odoo中核心的模块包括:采购、库存、销售、会计、汇率、联系人等。历史数据包括:采购订单、内部调拨、销售、商品报损、商品报溢、退款等。

以上在做数据迁移的时候,需要重点注意的是:时间和金额。这两点是重中之重,不然对于最后的期末估值会有很大影响。

  1. 新建数据迁移模块

    为什么此处又写新建模块了呢?因为这是实现数据录入odoo系统最快的方式了(别问我怎么知道的,说多都是泪)。这里要注意,是录入。并未与odoo系统的业务逻辑做任何的继承。

  2. 数据转odoo模型数据

    对于原始数据而言,odoo是不知道它的真实意义的。所以我们要做的是将这些数据分解到各个模块中去。比如,采购数据其中就涉及到采购单(purchase.order、purchase.order.line)、采购员(res.users、res.partner)、供应商(res.partner)、商品(product.template、product.prodcut)等,这些内容分属于不同的模块。

    坑位: 1) 产品的唯一标识(SKU)不唯一, 2) 采购单后续是库存,这对于原始数据是隐藏的信息,需我们自己分析并添加数据源

  3. 基于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为了安全而做的限制哦。

现在回头看看,似乎也没那么复杂嘛。,哎。

【odoo】[经验分享]数据迁移注意事项的更多相关文章

  1. Oracle中exp,imp(导入导出)数据迁移注意事项

    这几天做开发库schema备份,出现些问题,记录一下.一,exp时,os语言环境和数据库不同时会自动发生转换.   如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能 ...

  2. Elastic数据迁移方法及注意事项

    需求 ES集群Cluster_A里的数据(某个索引或某几个索引),需要迁移到另外一个ES集群Cluster_B中. 环境 Linux:Centos7 / Centos6.5/ Centos6.4Ela ...

  3. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  4. 如何进行大规模在线数据迁移(来自Stripe公司的经验)

    首发于笔者的微信公众号:技术心流FollowFlows 原文地址:Stripe Engineering Blog   各工程团队常面临一项共同挑战:重新设计数据模型以支持清晰准确的抽象和更复杂的功能. ...

  5. SQL SERVER几种数据迁移/导出导入的实践

    SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据 ...

  6. 关于启用 HTTPS 的一些经验分享(一)

    转载: 关于启用 HTTPS 的一些经验分享(一) 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS.就在今天,免费提供证书服务的 Let's Encrypt ...

  7. ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:我开始把ASP.NET 5用于生产系统开发已经有1个多月了,也填了一些坑积累了一些经验,从今天开始会陆陆续 ...

  8. 在Entity Framework 7中进行数据迁移

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...

  9. oracle 数据库数据迁移解决方案

    大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,接下来把心得与大家分享一下   去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁 ...

随机推荐

  1. go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法

    当我们在调用python时,如果传入的参数数据量过大时会报错 python.exe: The filename or extension is too long. 这时候我们的解决办法是放弃传参,将想 ...

  2. sqlmap在https下的一种错误 - ssl连接失败

    在昨天与师傅的交流中师傅考了我一个问题,在用sqlmap跑的时候遇到ssl爆红该怎么办,因为在实战中并没有遇到过这种情况,所以今天补一下知识. 首先查询了ssl的概念,通俗来说,如果一个网站没有安装s ...

  3. go-ini入门教程

    go-ini入门教程 go-ini简介 Package ini provides INI file read and write functionality in Go. 在实际开发时,配置信息一般不 ...

  4. Android Studio 有关 RecycleView 的使用

    •导入相关包 右击File->Project Structure: 搜索  com.android.support: 找到 recyclerview: 导入好后 Sync Now 同步一下,到这 ...

  5. 系统编程-信号-信号发送kill、raise、alarm

    信号发送 kill 和 raise函数 kill函数参数详解: 实验1 raise和kill 的使用 #include <stdio.h> #include <signal.h> ...

  6. 加快Python运行速度

    01 使用哈希表的数据结构 如果在程序中遇到大量搜索操作时,并且数据中没有重复项,则可以使用查找而不是循环.举例如下: items = ['a', 'b',..,'100m'] #1000s of i ...

  7. OO_Unit2 关于性能优化与测试的那些事

    OO_Unit2 关于性能优化与测试的那些事 OO的第2单元到本周也就正式完结了.尽管这个单元的主旋律是多线程,但"面向对象"的基本思想仍然是我们一切架构与优化的出发点与前提.因此 ...

  8. Spring Security OAuth 格式化 token 输出

    个性化token 背景 上一篇文章<Spring Security OAuth 个性化token(一)>有提到,oauth2.0 接口默认返回的报文格式如下: {     "ac ...

  9. java面试一日一题:讲下mysql中的索引

    问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...

  10. 794. Valid Tic-Tac-Toe State

    A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to r ...