1. 背景
瀋陽XX商場推行O2O營銷模式,信息化系統包括:線下零售系統、線上電商系統、網上支付系統,財務覈算系統,爲了實現線上線下系統互動、財務覈算一體化,須要對各系統進行數據集成、系統對接。因爲涉及的集成業務點較多、並且相對複雜,同時爲了知足後續業務方面靈活多變銷售策略,引入統一集成平臺AEAI ESB來作爲企業信息化集成的「龍骨」,實現各系統的業務串聯。web
本文主要對線下零售系統(長益商友)跟財務財務系統(金蝶K3)的憑證對接技術實現進行介紹,這個集成點的主要內容是經過AEAI ESB將長益的商友系統中業務單據以憑證方式導入金蝶K3財務軟件。數據庫
2. 名詞解釋
1.憑證:財務系統中財務覈算單據。憑證包括憑證頭、憑證分錄、輔助覈算。憑證頭跟憑證分錄是一對多的關係,憑證分錄跟輔助覈算也是一對多的關係。憑證分錄關聯會計科目,會計科目是樹形結構的,憑證分錄關聯的會計科目是科目體系中葉子節點。會計科目對應不一樣的核算項目類型,憑證分錄中具體有哪些輔助覈算是由憑證分錄關聯的會計科目決定的。一般覈算項目類型包括客戶、供應商、部門、人員、商品/產品、其餘收入項目等。架構
2.憑證頭:憑證主表,通常有憑證號、記帳人、制單人、審批人、單據類型、等、業務日期、是否過帳、貸方金額總計、借方金額總計等字段。學習
3.憑證分錄:憑證從表,通常有摘要、科目內碼、原幣金額、匯率、現金流量、餘額方向等字段。測試
4.會計科目:按照不一樣經濟業務的經濟特徵分門別類定義的樹形結構。編碼
5.輔助覈算:是針對會計科目對憑證分錄的財務處理方式,通常經過覈算項目實現。spa
6.覈算項目:財務系統涉及的基礎數據專有名詞,通常包括客戶、部門、供應商、品牌、其餘收入項目等。設計
3. 業務分析
3.1. 目標系統
對接過程當中金蝶K3財務系統涉及到如下內容,對應表數據字典參見附件中的「憑證表數據字典.xls」。對憑證涉及的基礎數據(覈算項目),金蝶K3財務供應提供中間表和存儲過程,經過AEAI ESB把憑證涉及的基礎數據導入至中間件表,而後再調用對應的存儲過程把中間表中的數據轉存至實際覈算項目數據表中,相關的存儲過程和中間件表參見附件。日誌
1.憑證表(t_Voucher):憑證頭,記錄不一樣類型憑證,經過主鍵關聯分錄表orm
2.分錄表(t_VoucherEntry):記錄每一個類型憑證下借貸數據,經過FDetailID(覈算項目編碼)關聯輔助覈算橫表
3.輔助覈算橫表(t_ItemDetail):記錄每條分錄下掛的輔助覈算個數和掛哪些輔助覈算
4.輔助覈算縱表(t_ItemDetailV):能夠認爲跟t_itemDtail是同構的。
5.覈算項目類別表(t_itemClass):覈算項目類別定義,沒有直接用到,編碼定義(沒有直接用到)。
6.覈算項目表(t_item):覈算項目定義表,覈算項目均導入此表(沒有直接用到)。
3.2. 來源系統
商友系統按照不一樣類型憑證提供相對應的視圖,每類視圖包括如下基本屬性:日期、金額、覈算項目編碼、覈算項目名稱。
4. 實現思路
1. ESB天天(24:00)定時讀取ERP提供的視圖,查詢財務憑證相關數據。
2. 分析查詢數據,抽取財務分錄相關聯的核算項目。
3. 將憑證頭信息、分錄、關聯表信息同步至K3數據庫。
4. ESB天天(03:00)定時讀取ERP提供視圖,部門與供應商導入K3數據庫
5. 集成設計
5.1. 集成架構
集成架構圖以下:

1.客戶提供測試賬套、憑證導入模板,在功能聯測過程當中協做配合聯調
2.K3提供數據庫的數據字典,存儲過程
3.長益提供ERP財務憑證相關數據(視圖)
4.ESB負責查詢視圖進行數據封裝導入至K3財務系統
5.2. 轉換分析
在ESB封裝數據前,須要經過K3數據字典詳細瞭解涉及到的表的每個字段意義,這個字段是須要從商友提供的視圖獲取,或者須要查詢K3數據庫或得字段值,仍是須要ESB根據財務提供的模板進行封裝處理等。例如:憑證表的憑證內碼、會計年度,分錄表的分錄號,輔助覈算橫表的核算項目內碼等都須要經過查詢K3數據庫某個表獲取值。這一個階段的需求瞭解對後續的開發以及憑證可否在K3系統正確顯示將起到重要做用。
5.3. 功能設計
下面介紹主要的功能設計流程:
5.3.1. 定時流程
5.3.1.1. 流程圖

5.3.1.2. 組件說明
u TimerRequest:設置定時,設置天天00:05
u 封裝入參:封裝查詢流程入參數據
u 調用主流程:調用主流程,傳入數據參數
5.3.2. 查詢子流程
5.3.2.1. 流程圖

5.3.2.2. 組件說明
u 線上線下分支:判斷查詢數據來源,線上/線上
u 查詢線下視圖:查詢線下數據
u 查詢線上視圖:查詢線上數據
u 合併路由:配合分支路由
u 查詢收款方式編碼表:因爲不一樣的收款方式要對應不一樣的科目,經過此編碼表確認收款方式對應哪一個科目
u 數據轉換:將從長益獲取的數據進行封裝處理,提取輔助覈算
u 封裝日誌:封裝執行日誌信息
u 更新日誌:更新執行日誌信息
注意:K3財務分錄表存在科目代碼、對方科目代碼屬性,若憑證一借一貸,借方的對方科目代碼就是貸方的科目代碼;若多借多貸會存在對方科目代碼具體指代哪個不肯定。
因爲分錄表中還有一個借貸屬性,區分此分錄是借仍是貸,針對以上多借多貸對方科目指代問題,只須要標識清楚此分錄是借仍是貸,入借方的對方科目代碼能夠隨意指代一個貸方科目代碼便可。
5.3.3. 基礎數據同步流程
5.3.3.1. 流程圖

5.3.3.2. 組件說明
u 判斷數據是否爲空:判斷輔助覈算數據是否爲空
u 分支路由:判斷數據是否爲空
u 遍歷輔助覈算:遍歷數據,按照不一樣的核算項目進行分類
u 部門同步子流程:調用同步部門基礎數據子流程
u 客戶同步子流程:調用同步客戶基礎數據子流程
u 品牌同步子流程:調用同步品牌基礎數據子流程
u 供應商同步子流程:調用同步供應商基礎數據子流程
u 其餘業務收入同步子流程:調用同步其餘業務收入基礎數據子流程
u 合併路由:配合分支路由使用
5.3.4. 基礎數據同步子流程
5.3.4.1. 流程圖

5.3.4.2. 組件說明
u 接收數據:判斷覈算項目是否爲空
u 分支判斷:判斷數據是否爲空
u 循環合併:配合循環分支路由使用
u 循環內容:數據處理,或得覈算項目
u 線上線下分支路由:判斷是線上數據仍是線下數據
u 調用判斷存儲過程:判斷該覈算項目在K3庫中是否存在,經過覈算項目編碼、名稱、覈算項目類型判斷,分三種狀況:
1.該覈算項目編碼不存在,對應數據存儲過程作插入操做
2.該覈算項目編碼存在,名稱不一樣,對應數據存儲過程作更新操做
3.該覈算項目編碼存在,名稱相同,不須要作基礎數據同步操做
u 分支判斷:判斷判斷存儲過程返回值
u 插入臨時表:將覈算項目基礎數據插入臨時表
u 調用存儲過程:基礎數據同步存儲過程查詢臨時表將數據導入K3庫
u 線上線下合併路由:配合分支路由使用
u 循環分支:循環或得的基礎數據
u 分支合併配合分支路由使用
5.3.5. 部門定時同步子流程
5.3.5.1. 流程圖

5.3.5.2. 組件說明
u 查詢部門視圖:查詢部門基礎數據,包括部門代碼、部門名稱
u 查詢臨時表:查詢部門臨時表,此表爲了判斷數據源發生更改或新增的數據
u 數據轉換:視圖查詢出的數據與臨時表查詢出來的數據進行比對,或得作修改和新增的數據,去除沒有變化數據
u 調用基礎數據同步流程:調用基礎數據同步流程
u 更新臨時表:更新部門臨時表
部門在商友系統錄入後,因爲仍未產生數據部門未導入財務系統,而此部門又到財務交錢會查詢不到此部門,此流程的目的即是爲了解決以上情況的發生。
供應商與部門同樣都須要定時傳送至K3財務,與部門流程一致,這裏就不作具體說明,參考部門定時同步子流程便可。
5.3.6. 憑證數據轉換流程
5.3.6.1. 流程圖

5.3.6.2. 組件說明
u 判斷查詢數據是否爲空:判斷是否查詢到數據
u 分支路由:判斷數據是否爲空
u 數據轉換:判斷輔助覈算數據是否爲空
u 封裝獲取主鍵SQL:封裝獲取表主鍵最大值SQL
u 封裝查詢K3t_item表查詢參數:封裝獲取覈算項目FItemID
u 查詢K3t_item表:查詢覈算項目FItemID
u 獲取表主鍵最大值:調用獲取獲取表主鍵最大值流程
u 封裝成輔助覈算橫表:將數據封裝成K3財務輔助覈算橫表格式
u 封裝成輔助覈算縱表:將數據封裝成K3財務輔助覈算縱表格式
u 封裝成K3分錄表:將數據封裝成K3財務分錄表格式
u 封裝成K3憑證表:將數據封裝成K3財務憑證表格式
u 封裝日誌:封裝日誌出參
u 更新日誌:更新執行日誌信息
u 導入K3庫:調用導入K3庫流程
u 合併路由:配合分支路由使用
在財務對接中,此流程起到相當重要的做用,將從視圖查詢的數據封裝成K3數據庫表的格式導入K3數據庫。前期的瞭解表結構以及每個字段的含義在此起到了重要性,每個字段設置哪些默認值、或者從視圖獲取、查詢K3庫等。
5.3.7. 導入K3庫
5.3.7.1. 流程圖

5.3.7.2. 組件說明
u 線上線下;判斷數據來源線上線下
u 插入輔助覈算橫表:插入K3輔助覈算橫表
u 插入輔助覈算縱表:插入K3輔助覈算縱表
u 插入分錄表:插入K3分錄表
u 插入憑證表:插入K3憑證表
u 封裝日誌:設置日誌信息
u 更新日誌:更新數據庫log日誌
6. 筆者後記
在財務對接過程當中,筆者也學習了不少、成長了不少,也更加的認識到溝通的重要性,經過溝通深刻了解整個業務流程,瞭解客戶需求,不然很容易走入誤區。
基於AEAI ESB實現業務系統跟財務憑證對接也是筆者第一次工做實戰,對於AEAI ESB集成平臺掌握相對容易,但對財務的一些專業名詞以及一些具體業務不甚瞭解,在需求調研階段與後續開發過程當中遇到了不少困難,走了不少彎路,基於此緣由,寫出該文檔但願對一樣是第一次接觸財務憑證對接的朋友有所幫助,更但願有經驗朋友可以提出更多寶貴的經驗。
基於ESB實現商友與K3財務憑證集成文檔及附件 下載