王 重 云
(中國石油長城鉆探工程有限公司錄井公司)
在油氣勘探開發(fā)領(lǐng)域,錄井現(xiàn)場采集的數(shù)據(jù)具有參數(shù)種類多、內(nèi)容詳細(xì)、可靠性高等特點(diǎn),是勘探開發(fā)過程中重要的信息來源[1]。完井后,施工中形成的各種錄井?dāng)?shù)據(jù)由公司的資料審核組收集整理并匯總成報(bào)表存檔,不僅便于結(jié)算和領(lǐng)導(dǎo)審閱,也可以為后續(xù)其他井的施工提供參考,具有重要價(jià)值。依托多個(gè)錄井資料數(shù)據(jù)庫,審核組需要填寫的各類報(bào)表達(dá)數(shù)十張,由于報(bào)表數(shù)量眾多,許多表中數(shù)據(jù)又涉及統(tǒng)計(jì)和計(jì)算操作,填寫報(bào)表的工作量很大,迫切需要一款能夠?qū)崿F(xiàn)各類報(bào)表數(shù)據(jù)自動提取、計(jì)算和導(dǎo)出的軟件。
針對上述需求,設(shè)計(jì)開發(fā)了錄井審核信息統(tǒng)計(jì)軟件,軟件支持A 8系統(tǒng)、質(zhì)量和檢驗(yàn)共3類25張報(bào)表。通過將各種數(shù)據(jù)的統(tǒng)計(jì)和計(jì)算過程算法化,利用控件復(fù)用和多重載技術(shù),軟件允許用戶對選定井在報(bào)表輸出過程中實(shí)現(xiàn)從井號選擇、數(shù)據(jù)提取、統(tǒng)計(jì)計(jì)算到數(shù)據(jù)存儲、報(bào)表導(dǎo)出的連續(xù)操作,從而提升報(bào)表生成速度和數(shù)據(jù)準(zhǔn)確性,減少人工計(jì)算量,達(dá)到以信息化手段“降本增效”的目的。
隨著信息化水平的快速發(fā)展,越來越多的業(yè)務(wù)系統(tǒng)陸續(xù)上線并投入使用,錄井?dāng)?shù)據(jù)存檔資料審核的工作方式也在發(fā)生變化[2]。不僅需要存檔的報(bào)表數(shù)量持續(xù)增加,而且由于各系統(tǒng)往往只專注于自己的業(yè)務(wù)流程,導(dǎo)致了在需要全局資料時(shí)因數(shù)據(jù)來源和計(jì)算方法的分散造成數(shù)據(jù)資源不整合。
目前,各類存檔報(bào)表的整理工作仍以人工統(tǒng)計(jì)為主,每張報(bào)表都由專人負(fù)責(zé)填寫。報(bào)表的填寫過程基本可以歸納為以下步驟:
(1)準(zhǔn)備完井后需要做存檔報(bào)表的井號,在紙質(zhì)報(bào)表上填寫。
(2)利用“錄井資料處理系統(tǒng)”查找并填寫井的基本信息等能夠直接查到的字段,如完井日期等。
(3)利用“錄井資料網(wǎng)上驗(yàn)收管理系統(tǒng)”和其他信息系統(tǒng)以及SQL查詢分析器等工具統(tǒng)計(jì)計(jì)算某些字段值,如統(tǒng)計(jì)綜合解釋表里結(jié)論不為空的記錄條數(shù)。
(4)在巖屑錄井圖中逐層計(jì)算全井總層數(shù)等數(shù)據(jù)。
(5)對于系統(tǒng)不能計(jì)算的字段要進(jìn)行人工計(jì)算,如設(shè)計(jì)符合率等。
(6)將填寫完成的紙質(zhì)報(bào)表錄入到Excel和系統(tǒng)數(shù)據(jù)庫中。
每口井需要填寫的報(bào)表數(shù)量從十幾張到二十幾張不等。完整的報(bào)表清單如表1所示。從表1中可以看出,在報(bào)表整理工作中,不僅報(bào)表和報(bào)表字段的數(shù)據(jù)量多,而且數(shù)據(jù)分散在不同的數(shù)據(jù)庫里,有些數(shù)據(jù)計(jì)算過程復(fù)雜,只能由特定的系統(tǒng)提供計(jì)算結(jié)果,人工計(jì)算易出現(xiàn)錯(cuò)誤。為了填好這些報(bào)表,審核員經(jīng)常需要在不同的系統(tǒng)間來回切換,整個(gè)填表過程需要消耗審核員大量的時(shí)間和精力。
表1 完井后需要填寫的報(bào)表清單
針對現(xiàn)有問題,迫切需要開發(fā)一款錄井審核信息統(tǒng)計(jì)軟件,實(shí)現(xiàn)對這些報(bào)表數(shù)據(jù)的填寫和導(dǎo)出功能,具體需求如下:
(1)實(shí)現(xiàn)數(shù)據(jù)的跨庫提取,軟件能夠從多個(gè)生產(chǎn)數(shù)據(jù)庫中提取數(shù)據(jù)。
(2)整合數(shù)據(jù)統(tǒng)計(jì)和計(jì)算方法,實(shí)現(xiàn)一次提取即可盡量多地填充數(shù)據(jù),不再需要從多個(gè)信息系統(tǒng)中復(fù)制數(shù)據(jù)。
(3)為人工計(jì)算的數(shù)據(jù)編寫算法,對于只能人工錄入且參與計(jì)算的數(shù)據(jù)(如差錯(cuò)率的計(jì)算依賴人工錄入的差錯(cuò)點(diǎn)數(shù)),在報(bào)表導(dǎo)出前提供計(jì)算功能。
(4)操作盡量便利化。
(5)軟件對計(jì)算機(jī)的硬件配置不能要求過高。
錄井審核信息統(tǒng)計(jì)軟件的架構(gòu)自下向上分為5層(圖1)。最底層是數(shù)據(jù)層,由作為數(shù)據(jù)來源的各個(gè)數(shù)據(jù)庫組成;第2層是接口層,由管理數(shù)據(jù)庫和文件的各種Helper類組成,負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)庫和文件的連接(打開)、讀取、寫入、關(guān)閉等底層操作;第3層是基礎(chǔ)應(yīng)用層,由集中在一個(gè)基類里的6類職能函數(shù)和一些其他用于公共運(yùn)算的函數(shù)組成,對應(yīng)軟件的報(bào)表選擇、載入數(shù)據(jù)、自動計(jì)算、保存數(shù)據(jù)和導(dǎo)出報(bào)表等操作步驟,每類職能函數(shù)又有多個(gè)重載,負(fù)責(zé)不同報(bào)表下的具體運(yùn)算;第4層是應(yīng)用層,在應(yīng)用層中每張報(bào)表都有一個(gè)對應(yīng)基礎(chǔ)應(yīng)用層基類的繼承類,基礎(chǔ)應(yīng)用層中各職能函數(shù)的重載就在這些繼承類里實(shí)現(xiàn);第5層是界面層,是用戶與軟件的交互接口,通過各種控件向用戶提供可視化的友好人機(jī)界面。
圖1 錄井審核信息統(tǒng)計(jì)軟件架構(gòu)
基礎(chǔ)應(yīng)用層的6類職能函數(shù)及其在應(yīng)用層中的重載是軟件實(shí)現(xiàn)報(bào)表數(shù)據(jù)提取、計(jì)算和導(dǎo)出操作的核心。初始化報(bào)表函數(shù)實(shí)現(xiàn)根據(jù)報(bào)表的列對一個(gè)內(nèi)存中的虛擬表(DataTable)進(jìn)行初始化,確定虛擬表列數(shù)、列名、數(shù)據(jù)類型、來源字段等;初始化顯示控件函數(shù)實(shí)現(xiàn)界面上的物理表(DataGridView控件)對虛擬表的綁定并對控件樣式進(jìn)行設(shè)置;載入數(shù)據(jù)函數(shù)根據(jù)選定的井號通過接口層從數(shù)據(jù)庫中獲取和計(jì)算數(shù)據(jù),并利用這些數(shù)據(jù)填充虛擬表,由于物理表已經(jīng)綁定虛擬表,數(shù)據(jù)將同步顯示到物理表上。此操作完成后,可以在界面上輸入必須人工錄入的數(shù)據(jù)。自動計(jì)算函數(shù)將根據(jù)人工錄入和載入數(shù)據(jù)函數(shù)得到的數(shù)據(jù)進(jìn)行計(jì)算(如利用不符合層數(shù)和總層數(shù)計(jì)算剖面符合率),用計(jì)算結(jié)果填充報(bào)表的剩余部分;保存數(shù)據(jù)函數(shù)通過接口層將虛擬表的數(shù)據(jù)寫入數(shù)據(jù)庫中保存;導(dǎo)出報(bào)表函數(shù)將虛擬表的數(shù)據(jù)導(dǎo)出為Excel或者Word文件。
通過對用戶的業(yè)務(wù)流程進(jìn)行梳理,結(jié)合用戶提出的需求,技術(shù)人員為錄井審核信息統(tǒng)計(jì)軟件設(shè)計(jì)了運(yùn)行流程,如圖2所示。
圖2 軟件運(yùn)行流程
軟件首次運(yùn)行時(shí)需要設(shè)置數(shù)據(jù)層使用的各種遠(yuǎn)程數(shù)據(jù)庫信息,檢查通過后這些信息作為軟件配置的一部分保存在本地的SQLite數(shù)據(jù)庫里,后續(xù)操作中接口層將利用這些信息與數(shù)據(jù)庫服務(wù)器交互。下一步,用戶需要選擇井號和報(bào)表樣式,再選擇載入數(shù)據(jù)的來源。這里有兩個(gè)數(shù)據(jù)來源,對于從未保存過報(bào)表數(shù)據(jù)的井,軟件需要從數(shù)據(jù)庫中提取各項(xiàng)數(shù)據(jù),然后進(jìn)行匯總、統(tǒng)計(jì)和計(jì)算,再由人工錄入必要數(shù)據(jù),軟件的自動計(jì)算功能計(jì)算出剩余數(shù)據(jù),最后執(zhí)行保存數(shù)據(jù)和導(dǎo)出報(bào)表操作;對于已經(jīng)保存過報(bào)表數(shù)據(jù)的井,軟件可以從數(shù)據(jù)庫中直接提取出這些數(shù)據(jù),由用戶決定是否對這些數(shù)據(jù)進(jìn)行修改和保存,并可以再次導(dǎo)出報(bào)表。
由于存檔報(bào)表數(shù)據(jù)種類繁多、計(jì)算量大,錄井審核信息統(tǒng)計(jì)軟件采用C#語言基于.NET Framework平臺開發(fā),以SQLite數(shù)據(jù)庫存儲配置信息。支持多井次同步導(dǎo)出和報(bào)表數(shù)量擴(kuò)展。同時(shí)在運(yùn)行過程中對消耗的系統(tǒng)資源進(jìn)行控制,及時(shí)清除和釋放不需要的資源,確保在低配置電腦上進(jìn)行多井連續(xù)操作時(shí)程序也能穩(wěn)定運(yùn)行。報(bào)表導(dǎo)出所需要的Word與Excel文件生成采用DocX與EPPlus文檔操作組件開發(fā),這兩個(gè)組件可以在運(yùn)行計(jì)算機(jī)不安裝Office產(chǎn)品的情況下,軟件仍然可以創(chuàng)建和處理Word與Excel文件。軟件通過調(diào)用組件的ExcelPackage、Worksheet、Style、ExcelRange、Drawing等自動化對象實(shí)現(xiàn)報(bào)表模板加載、工作表設(shè)置、樣式設(shè)置、工作區(qū)選擇和繪圖等功能[3-4],在內(nèi)存中完成報(bào)表的編輯過程后,最終輸出為用戶需要的報(bào)表文件。軟件主界面如圖3所示。
圖3 軟件的主界面
3.2.1 界面顯示效果與原始報(bào)表格式的一致性
以A 8系統(tǒng)報(bào)表為例,報(bào)表格式較為復(fù)雜,開發(fā)工具本身提供的控件并不支持合并單元格等功能,如果要實(shí)現(xiàn)相同的顯示格式,通常需要借助第三方控件。常用的控件如DevExpress會顯著增加程序的體積,降低響應(yīng)速度,部分老舊機(jī)型甚至可能無法正常運(yùn)行。對此,技術(shù)人員采用開發(fā)工具自帶的DataGridView控件,對表格控件的CellPainting等數(shù)個(gè)底層事件進(jìn)行重寫[5],最終實(shí)現(xiàn)了完整顯示A 8系統(tǒng)報(bào)表格式的效果,方便了用戶的使用。
3.2.2 虛擬表與物理表協(xié)同配合的工作模式
軟件在運(yùn)行中會根據(jù)選擇的報(bào)表樣式初始化內(nèi)存中虛擬表的格式,通過初始化顯示控件函數(shù)將虛擬表與物理表綁定,并設(shè)置物理表的顯示區(qū)域和效果,生成相應(yīng)的報(bào)表樣式并在界面上顯示[6]。軟件將數(shù)據(jù)填入虛擬表,顯示界面會自動更新,同樣,修改界面上的數(shù)據(jù),虛擬表的數(shù)據(jù)也會更新,實(shí)現(xiàn)了兩者數(shù)據(jù)顯示和修改的一致性。不僅便于用戶在軟件界面上直接錄入數(shù)據(jù),而且在執(zhí)行保存操作前,這種修改也不會影響數(shù)據(jù)庫里的數(shù)據(jù)。
3.2.3 對部分?jǐn)?shù)據(jù)的容錯(cuò)處理
由于有的數(shù)據(jù)是系統(tǒng)生成的,有的是人工錄入的,部分關(guān)聯(lián)數(shù)據(jù)會存在不標(biāo)準(zhǔn)或不一致的情況,往往會導(dǎo)致計(jì)算過程出錯(cuò)。如某井的目的層被標(biāo)注為延長組2段等3層,但在分層表中錄入的地層既有全名也有縮寫,這樣軟件無法直接根據(jù)其目的層提取出井段的深度數(shù)據(jù)。此時(shí)可以在該井所在行上右擊打開“設(shè)置目的層井段”界面,根據(jù)目的層從左邊分層表列表中選擇相應(yīng)的地層添加到右側(cè)列表,單擊“生成目標(biāo)層井段數(shù)值”按鈕,軟件即可根據(jù)所選層位計(jì)算出目的層井段的深度,如圖4所示。
圖4 設(shè)置目的層井段界面
3.2.4 便利化的操作方式
例如:在查找井號過程中,軟件不僅具有按資料上報(bào)日期區(qū)間篩選的功能,而且還提供了鍵入井號的一部分待選井號列表會自動查詢并更新、雙擊待選井號列表中的井號可以將該井號加入已選井號列表、雙擊已選井號列表中的井號則可以將其從列表中刪除等快捷操作方式,從而最大限度方便使用(圖5)。
圖5 井篩選界面
錄井審核信息統(tǒng)計(jì)軟件目前已經(jīng)通過審核組的測試井?dāng)?shù)據(jù)驗(yàn)證并投入使用,軟件的各項(xiàng)數(shù)據(jù)提取功能正常,統(tǒng)計(jì)和計(jì)算結(jié)果準(zhǔn)確,導(dǎo)出報(bào)表格式符合相關(guān)標(biāo)準(zhǔn)。單井報(bào)表生成平均時(shí)間從原來的3 h縮減至6 min。在多井報(bào)表生成過程中,每增加一口井生成時(shí)間僅需增加2 min左右,因而利用軟件進(jìn)行多井報(bào)表生成的優(yōu)勢更加明顯。另外,利用軟件導(dǎo)出存檔報(bào)表也解決了人工填寫報(bào)表所存在的計(jì)算量大、容易出錯(cuò)、記錄涂改甚至字跡難以辨識等問題,實(shí)現(xiàn)了報(bào)告填寫的規(guī)范化和自動化,在資料管理和降本增效方面具有較好的應(yīng)用價(jià)值。