【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. python2文件开头两行

    #!/usr/bin/python  或者  #!/usr/bin/env python 告诉操作系统python位置 # -*- coding:utf-8 -*- 设置文件编码为utf-8  (默认 ...

  2. 认清 React 的useState逻辑

    useState运行过程解析 function App() { const [n, setN] = useState(0); //使用 myUseState() return ( <div> ...

  3. (二)SpringBoot启动过程的分析-环境信息准备

    -- 以下内容均基于2.1.8.RELEASE版本 由上一篇SpringBoot基本启动过程的分析可以发现在run方法内部启动SpringBoot应用时采用多个步骤来实现,本文记录启动的第二个环节:环 ...

  4. Redis实战篇(四)基于GEO实现查找附近的人功能

    如果现在要开发一个功能: 要为一款交友App实现查找附近的人,并按距离进行排序. 让你来开发这个功能,你会如何实现? MySQL 不合适 你可能想到,把用户用户的经纬度坐标使用MySQL等关系数据库( ...

  5. shell的配置文件

    1. bash shell 的配置文件 bash shell的配置文件很多,可以分成下面类别 1.1 按生效范围划分两类 全局配置:针对所有用户皆有效 /etc/profile /etc/profil ...

  6. 快速了解 JavaScript ES2019 的五个新增特性

    ES2019 规范是对 JavaScript 的一个较小的补充,但它仍然带来了一些有用的功能.本文将向你展示五个 ES2019 新增的特性,这些特性或许可以让你的编程轻松一点.这些特性包括 trimS ...

  7. C#中SQLite的使用及工具类

    目录 SQLite简介 存储类 亲和类型 引用System.Data.SQLite.dll 软件包分类 使用本机库预加载 常用部署包 工具类 参考资料 SQLite简介 SQLite是一款轻型的数据库 ...

  8. go中panic源码解读

    panic源码解读 前言 panic的作用 panic使用场景 看下实现 gopanic gorecover fatalpanic 总结 参考 panic源码解读 前言 本文是在go version ...

  9. JAVAEE_Servlet_08_HTTP状态码以及错误页面设置

    HTTP协议状态码 * HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用, HTTP状态码共分为5种类型: - 1** 信息,服务器收到请求,需要请求者 ...

  10. JavaScript实现斐波那契数列

    什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&qu ...