【odoo】[经验分享]数据迁移注意事项
【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为了安全而做的限制哦。
现在回头看看,似乎也没那么复杂嘛。,哎。
【odoo】[经验分享]数据迁移注意事项的更多相关文章
- Oracle中exp,imp(导入导出)数据迁移注意事项
这几天做开发库schema备份,出现些问题,记录一下.一,exp时,os语言环境和数据库不同时会自动发生转换. 如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能 ...
- Elastic数据迁移方法及注意事项
需求 ES集群Cluster_A里的数据(某个索引或某几个索引),需要迁移到另外一个ES集群Cluster_B中. 环境 Linux:Centos7 / Centos6.5/ Centos6.4Ela ...
- 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)
简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...
- 如何进行大规模在线数据迁移(来自Stripe公司的经验)
首发于笔者的微信公众号:技术心流FollowFlows 原文地址:Stripe Engineering Blog 各工程团队常面临一项共同挑战:重新设计数据模型以支持清晰准确的抽象和更复杂的功能. ...
- SQL SERVER几种数据迁移/导出导入的实践
SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据 ...
- 关于启用 HTTPS 的一些经验分享(一)
转载: 关于启用 HTTPS 的一些经验分享(一) 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS.就在今天,免费提供证书服务的 Let's Encrypt ...
- ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:我开始把ASP.NET 5用于生产系统开发已经有1个多月了,也填了一些坑积累了一些经验,从今天开始会陆陆续 ...
- 在Entity Framework 7中进行数据迁移
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...
- oracle 数据库数据迁移解决方案
大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,接下来把心得与大家分享一下 去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁 ...
随机推荐
- 2019HDU多校第七场 HDU6646 A + B = C 【模拟】
一.题目 A + B = C 二.分析 比较考验码力的题. 对于$c$,因为首位肯定不为0,那么$a$或者$b$至少有一个最高位是和$c$平齐的,或者少一位(相当于$a$+$b$进位得到). 那么这里 ...
- mysql最权威的总结
1.数据库操作 create database person charset utf8; -- 创建数据库show DATABASES; -- 查看数据库drop database person; - ...
- Python打包之setuptools
参考链接1 参考链接2 参考链接3 一.setuptools介绍 Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时.用 ...
- FTT简单入门板子
DFT : 1 #include <cstdio> 2 #include <iostream> 3 #include <cmath> 4 #include < ...
- C语言宏的使用
使用条件宏进行条件编译 譬如,对于同一份代码,我想编译出两个不同的版本,在其中一个版本中去掉某一部分功能, 这时可以通过条件宏判断是否编译,例: 如果不使用条件宏进行控制,想编译两个不同版本的程序,就 ...
- 92反转链表II
# Definition for singly-linked list.# 这道题还是有点复杂的,但是是有套路的,套用反转链表的想法class ListNode: def __init__(self, ...
- JVM虚拟机知识问答总结(简单复习,快速回忆!)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 鸿蒙运行报错:Failure[INSTALL_PARSE_FAILED_USESDK_ERROR] Error while Deploying HAP
问题描述 近期,使用DevEco-Studio新建手机类型的工程,编译成功,发布到模拟器(鸿蒙P40)时出错,如下图: 原因分析 本地DevEco-Studio使用的SDK版本与设备(P40)不匹配导 ...
- Spring Cloud:面向应用层的云架构解决方案
Spring Cloud:面向应用层的云架构解决方案 上期文章我们介绍了混合云,以及在实际操作中我们常见的几种混合云模式.今天我们来聊一聊Spring Cloud如何解决应用层的云架构问题. 对于Sp ...
- Python爬虫知乎文章,采集新闻60秒
前言 发现很多人需要新闻的接口,所以自己去搜索了下,发现知乎上正好有对应的用户每天发布新闻简讯,所以自己想写一个新闻的爬虫.如果想做成接口的话,可以加上flask模块即可,这里就暂时只进行爬虫部分的编 ...