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