【odoo】【經驗分享】數據遷移注意事項


【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為了安全而做的限制哦。

現在回頭看看,似乎也沒那么復雜嘛。😂,哎。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM