FMS財(cái)務(wù)管理系統(tǒng):日常數(shù)據(jù)核對(duì)與處理

6 評(píng)論 10904 瀏覽 62 收藏 17 分鐘

開發(fā)FMS財(cái)務(wù)管理系統(tǒng),每天都會(huì)與數(shù)據(jù)打交道,數(shù)據(jù)的核對(duì)與處理是日常工作的一部分,相信接觸過財(cái)務(wù)系統(tǒng)的同學(xué)都深有感觸,為了一個(gè)差異查來查去,最終發(fā)現(xiàn)是前端業(yè)務(wù)系統(tǒng)的問題,白忙一場,本篇就說一下關(guān)于財(cái)務(wù)數(shù)據(jù)核對(duì)的過程與方法,希望讀后有所幫助!

一、系統(tǒng)數(shù)據(jù)生成過程

對(duì)于財(cái)務(wù)管理系統(tǒng)的數(shù)據(jù)是通過前端業(yè)務(wù)系統(tǒng)的數(shù)據(jù)進(jìn)行抽取、計(jì)算、匯總生成的,其中又包括財(cái)務(wù)結(jié)算、付款、收款等核銷過程,數(shù)據(jù)的準(zhǔn)確性是第一位的。

之前曾整理過數(shù)據(jù)核對(duì)的內(nèi)容,這里回顧下幾個(gè)原則:

1. 三個(gè)原則

(1)財(cái)務(wù)數(shù)據(jù)的生成原則

從業(yè)務(wù)單據(jù)明細(xì)->財(cái)務(wù)明細(xì)->財(cái)務(wù)匯總,即從細(xì)到粗的順序生成。

為什么這么做?

因?yàn)樵诔槿∝?cái)務(wù)相關(guān)數(shù)據(jù)時(shí),有時(shí)候?yàn)榱朔奖憧梢詮臉I(yè)務(wù)相關(guān)的統(tǒng)計(jì)查詢報(bào)表中獲取數(shù)據(jù),這樣能減少很多工作(不需要了解具體的邏輯)。

但是如果這樣設(shè)計(jì)就使得財(cái)務(wù)的數(shù)據(jù)過度依賴于前端業(yè)務(wù)系統(tǒng),當(dāng)業(yè)務(wù)系統(tǒng)的報(bào)表邏輯口徑有變化時(shí)或不需要是就會(huì)影響到財(cái)務(wù)數(shù)據(jù),所以我們應(yīng)該盡可能的抽取相關(guān)明細(xì)的數(shù)據(jù)以防止過度耦合。

您可能說即便單據(jù)也會(huì)有變化,沒錯(cuò),但我們的原則是盡可能減小這種差異的產(chǎn)生。

(2)財(cái)務(wù)核對(duì)數(shù)據(jù)的原則

從財(cái)務(wù)匯總->財(cái)務(wù)明細(xì)->業(yè)務(wù)單據(jù)明細(xì) 即從粗到細(xì)的順序核對(duì)。

為什么這么做?

因?yàn)槿绻藢?duì)數(shù)據(jù)時(shí)先從最細(xì)粒度的去核對(duì),那么數(shù)據(jù)量是非常大,計(jì)算量可能是成指數(shù)級(jí)遞增。

所以我們一定要先核對(duì)總數(shù),總數(shù)有差異再核對(duì)明細(xì),一層層的向下鉆取直致查詢到具體的問題數(shù)據(jù)。

我一直堅(jiān)持在財(cái)務(wù)系統(tǒng)中的數(shù)據(jù)要分層,每層都要保留明細(xì),當(dāng)本層數(shù)據(jù)無誤后再進(jìn)行下一層數(shù)據(jù)生成。

(3)數(shù)據(jù)勾稽關(guān)系如何設(shè)計(jì)

了解報(bào)表的生成邏輯,先從各報(bào)表中相同的數(shù)據(jù)項(xiàng)進(jìn)行比對(duì),然后再根據(jù)報(bào)表間計(jì)算規(guī)則進(jìn)行比對(duì)。

舉個(gè)例子:銷售收入成本報(bào)表中收入-成本=毛利;存貨平衡表中有商品的成本,這里銷售出庫、銷售退貨、銷售補(bǔ)發(fā)等成本的合計(jì)應(yīng)該與收入成本報(bào)表中的成本數(shù)能夠勾對(duì)上;如果不相對(duì),那我們系統(tǒng)肯定有問題了。

在開發(fā)報(bào)表中要了解報(bào)表中各字段的統(tǒng)計(jì)時(shí)間口徑及相關(guān)其他條件,這是設(shè)計(jì)勾稽關(guān)系的前提。

2. 理解數(shù)據(jù)依賴關(guān)系

這里最重要的是數(shù)據(jù)勾稽如何確定,需要產(chǎn)品研發(fā)同學(xué)非常清晰的理解相關(guān)數(shù)據(jù)的依賴關(guān)系。

首先,從系統(tǒng)的角度來考慮,先要保證數(shù)據(jù)的產(chǎn)生是正常,每天有很多定時(shí)任務(wù)在運(yùn)行,要先確定各服務(wù)的依賴關(guān)系。

這和分布式服務(wù)(通過spring clound等來實(shí)現(xiàn),但要防止循環(huán)依賴)中服務(wù)依賴還有點(diǎn)區(qū)別,這里更多的是指數(shù)據(jù)上的依賴。

  1. 通過消息來實(shí)現(xiàn)服務(wù)間的解耦,一個(gè)服務(wù)執(zhí)行完發(fā)條消息到MQ,訂閱者開始執(zhí)行即可;
  2. 如果不通過MQ,可以采用最建立一個(gè)服務(wù)調(diào)度狀態(tài)表來實(shí)現(xiàn),設(shè)計(jì)好服務(wù)間的依賴關(guān)系,每個(gè)服務(wù)執(zhí)行前循環(huán)掃描此表狀態(tài),如果依賴的服務(wù)都執(zhí)行完畢,則執(zhí)行(參照下表)。

其次,從數(shù)據(jù)的完整性和準(zhǔn)確性上考慮。

這里涉及一個(gè)設(shè)計(jì)原則,既當(dāng)服務(wù)在執(zhí)行過程中出現(xiàn)了異常,是終止還是繼續(xù)執(zhí)行?

  • 終止:后續(xù)依賴的任務(wù)都不會(huì)執(zhí)行,系統(tǒng)產(chǎn)生不了數(shù)據(jù),影響業(yè)務(wù)使用系統(tǒng)。
  • 執(zhí)行:有了異常數(shù)據(jù),繼續(xù)執(zhí)行后依賴的數(shù)據(jù)也會(huì)有錯(cuò)誤,業(yè)務(wù)雖然能夠使用,但是會(huì)錯(cuò)上加錯(cuò)。

當(dāng)這種問題出現(xiàn)后,相信多數(shù)人都會(huì)采用終止執(zhí)行,由研發(fā)同學(xué)盡快解決后再繼續(xù)。

其實(shí)這個(gè)問題有點(diǎn)類似于大促活動(dòng)時(shí)服務(wù)降級(jí)策略;在系統(tǒng)設(shè)計(jì)過程中是務(wù)必要考慮的。

FMS財(cái)務(wù)管理系統(tǒng)的數(shù)據(jù)不像前端業(yè)務(wù)生產(chǎn)系統(tǒng)實(shí)時(shí)性要求那么高,所以一般情況下可以根據(jù)數(shù)據(jù)的使用用途來劃分,原則上以數(shù)據(jù)的準(zhǔn)確性為第一原則。

  • 報(bào)表統(tǒng)計(jì)分析來數(shù)據(jù),可以繼續(xù)執(zhí)行;有數(shù)據(jù)參考比沒有數(shù)據(jù)要好,雖然有部分是錯(cuò)的。舉個(gè)例子:公司老板每天必看的報(bào)表(一般都是匯總類數(shù)據(jù)),提供比不提供要好。
  • 財(cái)務(wù)業(yè)務(wù)單據(jù)類數(shù)據(jù),終止,等待處理后再執(zhí)行。舉個(gè)例子:應(yīng)付結(jié)算單,如果產(chǎn)生了錯(cuò)誤數(shù)據(jù)應(yīng)會(huì)影響到付款,此時(shí)不執(zhí)行比執(zhí)行要好。

最后,數(shù)據(jù)重算機(jī)制

數(shù)據(jù)有問題或異常了,要考慮重算或補(bǔ)償機(jī)制,保證數(shù)據(jù)準(zhǔn)確性和完整性。

重要的服務(wù),盡量不要借助人工處理,要寫程序來完成。

舉個(gè)例子:財(cái)務(wù)成本核算服務(wù)每天要根據(jù)出入庫流水進(jìn)行成本計(jì)算(移動(dòng)加權(quán)或先進(jìn)先出等),出現(xiàn)異常了,一定要寫重算的過程,否則后續(xù)處理問題時(shí)相當(dāng)麻煩。

其他的每層數(shù)據(jù)的生成時(shí)都應(yīng)該考慮,人工和系統(tǒng)結(jié)合的方式來解決問題。

二、數(shù)據(jù)核對(duì)過程

對(duì)于數(shù)據(jù)的核對(duì)需要借助于核對(duì)平臺(tái),按數(shù)據(jù)“匯總-〉明細(xì)”的過程進(jìn)行。

我個(gè)人的處理原則還是先在數(shù)據(jù)庫層面利用SQL來進(jìn)行核對(duì),然后借助于系統(tǒng)出具核對(duì)結(jié)果。

1. 為什么這么做?

因?yàn)樨?cái)務(wù)庫的數(shù)據(jù)是獨(dú)立的,而且不會(huì)影響到前端業(yè)務(wù)生產(chǎn)庫,可以充分利用腳本來進(jìn)行。

這里我們可以開發(fā)一些定時(shí)任務(wù)服務(wù)來進(jìn)行對(duì)財(cái)務(wù)數(shù)據(jù)進(jìn)行匯總核對(duì)。

2. 核對(duì)的內(nèi)容和方式

這個(gè)核對(duì)對(duì)于業(yè)務(wù)生產(chǎn)與財(cái)務(wù)抽取間既要核對(duì)數(shù)據(jù)條數(shù),也要核對(duì)數(shù)量與金額等關(guān)鍵數(shù)據(jù),防止數(shù)據(jù)的丟失和異常。

其它層級(jí)間主要是核對(duì)數(shù)量與金額,最復(fù)雜的是財(cái)務(wù)報(bào)表間的核對(duì),要明確勾稽關(guān)系(這部分在設(shè)計(jì)報(bào)表時(shí)就需要確定)。

  • 核對(duì)系統(tǒng):以上的核對(duì)至少要做一個(gè)核對(duì)界面,每天來查看服務(wù)的執(zhí)行狀態(tài)(在數(shù)據(jù)庫中查詢也可以),查看核對(duì)的數(shù)據(jù)間差異,需要設(shè)置閥值,對(duì)于超過閥值的要高亮顯示。
  • 手工核對(duì):對(duì)每日的核對(duì)結(jié)果提前寫好腳本,每天進(jìn)行查看。

對(duì)于相關(guān)的預(yù)警,譬如服務(wù)假死,我們可以通過監(jiān)控此服務(wù)產(chǎn)生的數(shù)據(jù)行數(shù)來判定。

出現(xiàn)異常后,產(chǎn)品研發(fā)還是應(yīng)該及時(shí)處理,終止未執(zhí)行的服務(wù),解決后再啟動(dòng),降低整體數(shù)據(jù)生成的時(shí)間,保證業(yè)務(wù)每天早上都能快快樂樂的使用系統(tǒng),提升產(chǎn)品研發(fā)的高大形象。

3. 財(cái)務(wù)數(shù)據(jù)核對(duì)誤區(qū)

作為研發(fā)、產(chǎn)品我們?cè)谠O(shè)計(jì)核對(duì)平臺(tái)時(shí),都希望開發(fā)一個(gè)牛逼的系統(tǒng),引入了規(guī)則引擎、大數(shù)據(jù)計(jì)算等技術(shù),利用一個(gè)當(dāng)前很流行的框架。但這樣做好嗎?

個(gè)人不贊成這樣去做,我個(gè)人覺得可以在數(shù)據(jù)庫層面利用腳本或存儲(chǔ)過程核對(duì)的,就不要寫程序(財(cái)務(wù)庫不像各個(gè)業(yè)務(wù)生產(chǎn)庫對(duì)讀寫要求非常高可以用存儲(chǔ)過程等技術(shù)) ,可以用簡單的技術(shù)實(shí)現(xiàn)的,不要引入過多復(fù)雜的技術(shù)(可以適當(dāng)使用),降低開發(fā)成本。

最后介紹幾個(gè),本人在日常工作中的幾個(gè)數(shù)據(jù)處理的小方法,供大家參考。

三、數(shù)據(jù)核對(duì)的幾個(gè)小方法

1. 利用Excel的公式來核對(duì)

主要是使用VLOOKUP公式進(jìn)行,這個(gè)公式比較強(qiáng)大。

場景:從兩個(gè)不同的數(shù)據(jù)庫中來對(duì)比差異(兩個(gè)庫不能聯(lián)合查詢,也沒有建立DBLINK)。

樣例數(shù)據(jù)D1:

目標(biāo)數(shù)據(jù)D2:

根據(jù)城市、月份從D1中查詢出對(duì)應(yīng)的銷售額,并得出差異。

方法:在源數(shù)據(jù)列中輸入公式:

=VLOOKUP(F2&G2,IF({1,0},Sheet3!$A$2:$A$6&Sheet3!$B$2:$B$6,$C$2:$C$6),2,0)

然后按CTRL+SHIT+ENTER組合鍵,再下拉即可。

2. 利用Excel與數(shù)據(jù)庫腳本結(jié)合

場景:業(yè)務(wù)提供一個(gè)EXCEL,需要技術(shù)從數(shù)據(jù)庫后臺(tái)根據(jù)訂單號(hào)獲取其支付時(shí)間與發(fā)貨倉庫。

數(shù)據(jù)文件:EXCEL,樣例數(shù)據(jù)如下

處理方法:通過拼接SQL方式去獲取數(shù)據(jù),這里的方法是和一位同事學(xué)習(xí)的,百試百靈。

1)先要插入一個(gè)關(guān)鍵字段,作為Excel文件中的一個(gè)主鍵,自增數(shù)字即可,然后拼寫SQL。

2)將數(shù)據(jù)粘到文本中,去空格操作。

結(jié)果如下:

3)在數(shù)據(jù)庫中拼寫SQL,執(zhí)行,注意這里就用到 order bykey_id進(jìn)行排序了,保證輸出的結(jié)果與Excel中的順序一樣,方便粘貼

4)將結(jié)果粘貼到Excel中進(jìn)行處理(單元格設(shè)置為文本格式),注意key_id要與源數(shù)據(jù)增加的相同。

3. 利用數(shù)據(jù)庫進(jìn)行大批量數(shù)據(jù)核對(duì)、檢驗(yàn)及處理

場景:業(yè)務(wù)提供一份幾十萬行的Excel文件數(shù)據(jù)(一般為CSV),需要技術(shù)在后臺(tái)進(jìn)行核對(duì)處理,并反饋出差異結(jié)果。

方法:由于數(shù)據(jù)量太大,此時(shí)不能利用方法一與方法二了,一般研發(fā)同學(xué)習(xí)慣于根據(jù)需求邏輯寫個(gè)程序來進(jìn)行處理,這里我習(xí)慣于利用數(shù)據(jù)庫的SQL來核對(duì)處理,具體如下。

1)前提,本地機(jī)器上需要安裝一個(gè)數(shù)據(jù)庫,Mysql、SQLSERVER等都可以,如果有公共的測(cè)試數(shù)據(jù)庫且有創(chuàng)建刪除表權(quán)限的也可以,以MySql為例。

2)將數(shù)據(jù)文件導(dǎo)入到本地庫中,Navicat中的導(dǎo)入工具可以用,這里用腳本。

3)首先創(chuàng)建一個(gè)表(根據(jù)數(shù)據(jù)文件進(jìn)行創(chuàng)建),例如腳本如下:

4)數(shù)據(jù)文件保存成txt格式的文本。

5)導(dǎo)入數(shù)據(jù)到本地庫。

腳本如下(語法可以百度一下load file):

6)將所有需要的數(shù)據(jù)導(dǎo)入到本地庫,你就折騰吧。

這里可能需要生產(chǎn)庫的數(shù)據(jù),如果不涉及敏感信息,你這可以從生產(chǎn)中導(dǎo)出,再導(dǎo)入到本地庫中進(jìn)行與其它數(shù)據(jù)進(jìn)行關(guān)聯(lián)查詢等。

其他數(shù)據(jù)庫也是同樣的過程,SQLServer的客戶端功能強(qiáng)大,導(dǎo)入導(dǎo)出的工具很方便,Oracle可以利用SQLLoader工具來導(dǎo)入,導(dǎo)入百萬級(jí)數(shù)據(jù)大約十幾秒的時(shí)間,非???。

如果需要的生產(chǎn)數(shù)據(jù)復(fù)雜,可以借助其它工具,例如Kettle,但這個(gè)需要安裝,還要申請(qǐng)一些聯(lián)接生產(chǎn)庫的權(quán)限才可以使用。

注:對(duì)于數(shù)據(jù)和創(chuàng)建表都要注意編碼格式,正常都采用UTF8

4. 寫代碼,利用程序來實(shí)現(xiàn)

這種方法我是極力不推薦的,不到萬不得已,盡量不要寫程序來完成大批量數(shù)據(jù)的處理與核對(duì)。

原因如下:

  1. 這種需求一般都是臨時(shí)性的,對(duì)于源文件數(shù)據(jù)是否可以導(dǎo)入到生產(chǎn),這個(gè)一般不允許;
  2. 程序需要連接生產(chǎn)庫,需要?jiǎng)?chuàng)建項(xiàng)目,部署;通常開發(fā)環(huán)境與生產(chǎn)環(huán)境都是隔離的;
  3. 即便都可以在本地進(jìn)行,但程序的邏輯要進(jìn)行設(shè)計(jì),如果調(diào)整不如腳本方便快捷。

總結(jié)

敏捷項(xiàng)目管理中提到,借助于有效的工具來提升研發(fā)效率是一個(gè)非常不錯(cuò)的選擇。

在財(cái)務(wù)數(shù)據(jù)日常的核對(duì)處理時(shí),可以借助各種工具來完成工作,但是過度的依賴最新的技術(shù)來完成簡單的工作又會(huì)有種殺雞用牛刀的感覺。

簡單有效直接是行之有效的方法,通過總結(jié),開發(fā)有效的工具是目標(biāo)。

最后感謝您的閱讀!

 

作者:倔強(qiáng)的大蘿卜;公眾號(hào):倔強(qiáng)的大蘿卜

本文由 @倔強(qiáng)的大蘿卜 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 方法還是很實(shí)用的,簡單有效,上手容易。

    來自北京 回復(fù)
  2. 非常有用,干貨,收藏了

    來自重慶 回復(fù)
  3. 厲害了!?。∧莻€(gè)數(shù)據(jù)核對(duì)的地方!!

    回復(fù)
    1. 謝謝??

      回復(fù)
  4. 這么贊的文章竟然沒有評(píng)論 ?

    來自北京 回復(fù)
    1. 呵呵,有你的評(píng)論就會(huì)有人來關(guān)注了:)

      來自北京 回復(fù)