zoukankan      html  css  js  c++  java
  • 用C#实现工资计算公式动态编写

    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();

    主规则

    业务系统实现

    下图是业务系统的一部分,开发商可以根据需要将界面定义得比较友好。以适应原有系统的需要。设置公式界面也可以定义得更加的友好,用户设置完公式之后,工资计算就会使用新的公式进行。

    源代码下载    关联工具下载:http://www.ckrule.com/cn/product/software/186.html

  • 相关阅读:
    设计模式浅谈
    链表的遍历(1)
    链表的删除(3)
    链表结构的反转(5)
    二叉树数组表示法
    循环链表的插入和删除
    链表的链接(2)
    双向链表内结点的删除(4)
    hdu1042
    数组和链表的区别
  • 原文地址:https://www.cnblogs.com/jingle/p/3657631.html
Copyright © 2011-2022 走看看