[摘 要] 本文探討了以Excel的多頁二維表格為載體,使用XML存儲指令,delphi的prExpr作為表達式的計算和判斷,實現了一個通用的、靈活、可擴展的工資標準系統。
[關鍵詞] 工資標準;Excel;XML
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2010. 05 . 003
[中圖分類號]F232 [文獻標識碼]A [文章編號]1673 - 0194(2010)05 - 0006 - 02
1 前 言
在人力資源管理的薪資體系中,核心任務之一是確立工資標準,即根據各種要素和條件,比如員工所在的部門、崗位,工作年限、業績情況等,確定其所應有的薪酬水平。員工從試用期到轉正,從部門變動到崗位變動,從正常工資晉升到各種獎金的確定,再到稅金、四金的計算,都是依據工資標準計算得來。一般來說,一套完整的工資標準是由一個或者多個工資標準表構成的,這些工資標準表定義了條件和對應的工資數值或者計算公式。
實現工資標準表存儲、工資數據套取功能的系統,我們稱為工資標準系統,常見的實現方法是把工資標準表的條件、數據分解,保存在數據庫中,套取的時候,按照這些條件和數據,對數據表的相關字段進行更新、賦值。這種方法需要精心設計數據庫結構,提供維護界面,維護過程相對比較復雜。
近年來,筆者參與了上海市機關、事業單位工資套取、工資調整、正常晉升及離退休人員的工資套取等系統的設計和研發,對工資標準表的特點進行了分析,使用Excel和XML,以Delphi為開發工具,實現了一個通用工資標準系統,順利地完成了上海市范圍內的機關、事業單位人員工資套改及后續的工資調整任務,并應用在上海部分高校的工資管理及發放系統中,取得了很好的效果。
2工資標準表的特點
分析研究上海市機關、事業單位在工資套改、調整中用到的工資標準表,并參考部分企業單位的工資標準表,可以發現它們具有以下特點:
(1)根據每個員工不同的條件,比如職級、崗位、學歷的不同,進行不同工資標準的套取。條件不同,所需套取的工資標準表也不同,比如管理人員、技術人員所用的工資標準表是不同的。
(2)工資標準表之間可存在先后的順序關系,比如公務員工資套取中,先要確定其工資級別、檔次,然后再根據工資級別、檔次確定工資額。
(3)工資項目的取值既可能是常量數值,也可為一個包含變量的計算公式,比如四金、個調稅的計算公式等。
3系統設計實現
根據工資標準表的以上特點,我們以Excel的多頁二維表格為載體,使用XML存儲指令,Delphi的prExpr作為表達式的計算和判斷,設計實現了一個通用的、靈活的、可擴展的工資標準系統。
Excel可以建立多頁(sheet)二維表格,每個頁(sheet)用來保存一個工資標準表,每頁(sheet)的行、列來保存工資標準表的條件,交叉部分保存對應工資項目的取值。
XML是一個結構化的描述語言,具有較高的可讀性、自描述性,易于解析,在這里用來存儲操作指令,比如工資標準表的類型(簡單類型/復合類型),套取結果在數據庫中保存的表和字段等信息。
prExpr是基于Delphi的一個第三方工具,實現了簡單表達式的計算和判斷,它的特點是可以自定義函數。
具體實現方法如下:
(1) Excel的第一頁(sheet)作為索引頁,在這頁里,第一列保存條件表達式,第二列保存待處理的多個后續頁面名稱,這樣我們就可以根據不同條件,按照定義的順序逐次處理這些頁面,進行不同工資標準表的套取(參見圖1)。

(2) Excel的第一頁之后的各頁面(sheet)定義工資標準表,在頁面(sheet)里,保留左上角第一格(第一行、第一列的交叉位置)存儲XML格式的操作指令,第一列保存條件表達式,按處理方式的不同,我們把工資標準表分為兩種形式,即簡單模式和分組模式,這兩種模式基本能夠處理大多數的工資套取的情況。
1)簡單模式,第一行和第一列存儲條件表達式,行列交叉的中間位置存儲對應的工資數值,如果涉及多個字段的取值,可以在XML指令中進行定義,比如在XML中用屬性fieldnames定義逗號隔開的多個字段名稱,工資數值部分也對應地定義多個數值。對于只有行條件或者列條件的情況,作為特例,只要定義一個條件為“真”的特殊列條件或行條件,就可以解決。系統在處理時,先遍歷第一列里的條件表達式,符合條件即停止列條件遍歷,接著遍歷第一行里的表達式,符合條件即停止行條件遍歷,提取確定的行、列所在的數值(參見圖2)。

2)分組模式,第一列存儲條件表達式,第二列存儲字段賦值表達式(字段=表達式),多個賦值表達式之間用逗號隔開,第三列定義分組情況,系統在處理時,遍歷第一列里的條件表達式,符合條件即取得該行字段賦值表達式,對字段進行賦值,然后跳過同一組的行,繼續遍歷(參見圖3)。

(3)函數及變量。
1)自定義函數。根據工資業務的需求,我們定義了以下函數:
BETWEEN(字段名, Value1,Value2):字段值是否介于兩者之間,例如BETW(A0151,5,9);
IN(字段名,value1,value2,value3,…,value n):字段值是否為value1,value2,value3,…,value n中的一個;
NOW:當前時間;
TRUE:符合條件;
FALSE:不符合條件;
AGE(字段,'年月日'):年份計算,例如年齡、工作年限等。
2)常用操作符。數字及字符的操作符如加、減、乘、除,邏輯操作符如AND、OR、NOT都是prExpr按照Pascal的規則提供的。
3)變量。系統可以使用兩種形式的變量:一種是相關數據表的字段,對于有可能出現沖突的變量名字,可以采用table.fieldname的方式;第二種變量是用戶自定義變量,通過variable=value的方式傳入。
(4)處理過程(參見圖4)。

4總 結
我們通過Excel來存儲工資標準數據,使用 XML這種結構化的描述語言來表達指令信息,由prExpr來判斷條件,計算表達式,在Delphi平臺上,幾項技術結合在一起,發揮各自的長處,完成了一套靈活、可擴展的工資標準系統。
主要參考文獻
[1][美]Steven Holzner. XML 使用詳解[M]. 瀟湘工作室,譯. 北京:機械工業出版社,1999.
[2]李維.Delphi 3從入門到精通[M].北京:宇航出版社,1998.
[3]杜茂康,劉宴兵,袁浩.Excel與數據處理[M].北京:電子工業出版社 ,2005.
[4]蘇術鋒.通用工資管理軟件的設計[J].中國管理信息化:會計版,2007(6):14-16.