1,工資計算公式 每一個企業都一定會用到工資計算,發工資是一件非常神聖的事情,而計算工資就是一項非常重要的工作。Excel有非常強大的公式功能,幫助了很多財務人員計算工資,但如果企業的人數比較多,而且工資的計算公式比較複雜,那使用Excel的人員必須是一個超高手了,但Excel維護起來也是非常困難的 ...
1,工資計算公式
每一個企業都一定會用到工資計算,發工資是一件非常神聖的事情,而計算工資就是一項非常重要的工作。Excel有非常強大的公式功能,幫助了很多財務人員計算工資,但如果企業的人數比較多,而且工資的計算公式比較複雜,那使用Excel的人員必須是一個超高手了,但Excel維護起來也是非常困難的。
所以有不少上一定規模的企業會上一套工資系統,做得比較好的工資系統都會提供工資公式的編輯功能,而這些編輯功能就非常類似於Excel的公式,這樣財務人員操作起來就比較容易上手。假設某廠企有如下的工資相關基本欄位:
序號 |
欄位 |
說明 |
1 |
基本工資 |
員工的基本工資。 |
2 |
狀態 |
新入職、試用、轉正、正式等。 |
3 |
員工性質 |
殘疾人、正常。 |
4 |
月工作天數 |
當月的工作天數。 |
5 |
轉正前天數 |
當月,員工在轉正之前的天數。 |
6 |
轉正後天數 |
當月,員工在轉正之後的天數。 |
7 |
平時加班合計小時 |
非節假日和周六日的加班小時數。 |
8 |
周末加班合計小時 |
周末日加班合計的小時數。 |
9 |
節假日加班合計小時 |
節假日加班合計小時數。 |
10 |
平時頂班合計小時 |
平時頂班合計小時數。 |
11 |
周末頂班合計小時 |
周末日頂班合計小時數。 |
12 |
節假日頂班合計小時 |
節假日頂班合計小時數。 |
13 |
實際出勤天數 |
員工實際出勤的天數。 |
14 |
高溫津貼 |
工廠給員工提供的高溫津貼。 |
15 |
學歷補貼 |
工廠給高學歷員工提供的津貼。 |
16 |
獎金點數 |
各個員工級別設置不同的資金點數。 |
17 |
每點獎金 |
根據每個月的業績和資金點數和落實的每點獎金。 |
18 |
氣味津貼 |
工廠給員工提供的氣味津貼。 |
19 |
粉塵津貼 |
工廠給員工提供的粉塵津貼。 |
20 |
事假小時 |
每個月事假的小時數。 |
21 |
病假小時 |
每個月病假的小時數。 |
22 |
曠工小時 |
每個月曠工的小時數。 |
23 |
用餐費 |
員工在飯堂每月的用餐費。 |
24 |
餐補 |
工廠給員工提供的用餐補貼。 |
25 |
計薪方式 |
銷售提成,搬運提成等。 |
工資公式:
序號 |
項目 |
公式 |
1 |
實發基本工資 |
1, 狀態=轉正,1310/月工作天數*轉正前天數 + 基本工資/月工作天數*轉正後天數。 2,狀態!=轉正,實發基本工資=基本工資/月工作天數*實際出勤天數。 |
2 |
平時加班費用 |
員工性質=殘疾人,平時加班費用=0,否則平時加班費用=基本工資/21.75/8*平時加班合計小時*1.5。 |
3 |
周末加班合計費用 |
員工性質=殘疾人,周末加班費用=0,否則周末加班費用=基本工資/21.75/8*周末加班合計小時*2。 |
4 |
節假日加班費用 |
員工性質=殘疾人,節假日加班費用=0, 否則,節假日加班費用=基本工資/21.75/8*節假日加班合計小時*3。 |
5 |
平時頂班費用 |
員工性質=殘疾人,平時頂班費用=0, 否則平時頂班費用=基本工資/21.75/8*平時頂班合計小時*1.5。 |
6 |
周末頂班費用 |
員工性質=殘疾人,周末頂班費用=0, 否則周末頂班費用=基本工資/21.75/8*周末頂班合計小時*2。 |
7 |
節假日頂班費用 |
員工性質=殘疾人,節假日頂班費用=0, 否則節假日頂班費用=基本工資/21.75/8*節假日頂班合計小時*3。 |
8 |
實發高溫津貼 |
員工性質=殘疾人,實發高溫津貼為0, 實發高溫津貼=高溫津貼/月工作天數*實際出勤天數。 |
9 |
實發學歷補貼 |
計薪方式包含“提成”,則為0, 否則為學歷補貼。 |
10 |
獎金數 |
狀態=轉正,且計薪方式=銷售提成,(基本工資-1310)/月工作天數*轉正前天數 + 資金點數*每點獎金。 如計薪方式包含“提成”,則資金點數*每點獎金。 |
11 |
實發氣味津貼 |
氣味津貼/月工作天數*實際出勤天數。 |
12 |
實發粉塵津貼 |
實發粉塵津貼=粉塵津貼/月工作天數*實際出勤天數。 |
13 |
事假扣除 |
事假扣除=基本工資/月工作天數/8*事假小時。 |
14 |
病假扣除 |
病假扣除=基本工資/月工作天數/8*病假小時。 |
15 |
曠工扣除 |
曠工扣除=基本工資/月工作天數/8*曠工小時。 |
2,技術實現
要在.Net中實現公式編輯功能,則必須實現公式的解釋器,而最強大的解釋器無疑就是.Net的編譯引擎了,編譯引擎是可以實現任何功能的。.Net自帶動態編譯的邏輯,但要組織好一個編譯邏輯並且要合理展現出來,也同時結合適度的擴展功能,那就不太簡單了。
對上面提及的工資計算公式,可能會經常發生變化的,廠企會根據自帶的需求,增加更多的規則,或修改一些規則,甚至各個月的規則都是不同的,只與上個月的部分相同。這種情況下,把工資計算公式交給廠企的財務人員是一個合理的做法。這就對業務系統開發商提出更高的要求了,如果是個人開發者,那就更加困難了。
CKRule規則引擎提供了這個功能,其客戶規則池就是允許客戶進行自定義公式的。業務系統開發商只需要簡單幾步就可以實現動態公式了,1,配置好關鍵字,比較邏輯和結論/操作,2,在業務系統中載入配置,並設置界面,3,用戶在友好的界面下編輯規則,保存規則到資料庫,4,主規則調用中載入客戶規則池。
在工具中自定義類型及傳入傳出屬性:
定義客戶規則池的關鍵字和操作符。
關鍵字可以與傳入傳出類型一樣,也可以新建,結論操作則為了讓用戶適應類似Excel的操作使用IIF語法。
設置主規則,在主規則中,只需要調用資料庫中的規則,再執行規則池即可。代碼如下:
var _table = LookDB(@"
select
'' as id,
sindex as ""index"",
'' as returnType,
'Get' + name as propname,
0 as codestyle,
'' as ifcode,
0 as thencodeisscript,
'結果.' + name + ' = ' + CalcCode + ' ;' as thencode,
0 as priority ,
'' as execstep
from poolset
");
InitPool(_table);
ExePool();
業務系統實現
下圖是業務系統的一部分,開發商可以根據需要將界面定義得比較友好。以適應原有系統的需要。設置公式界面也可以定義得更加的友好,用戶設置完公式之後,工資計算就會使用新的公式進行。