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

用C#实现工资计算公式动态编写的更多相关文章

  1. EasyUI单击行数据时动态编写editor

    $.extend($.fn.treegrid.methods, { addEditor: function (jq, param) { if (param instanceof Array) { $. ...

  2. 2014年4月份第2周51Aspx源码发布详情

    HFC代码转化工具源码  2014-4-8 [VS2010]源码描述:HFC代码转化工具源码 1.主要实现HTML代码转化为C#或者JS代码,为我们平时编码节省时间. 2.把代码复制到面板上,通过右键 ...

  3. easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展

    EF 结合easy-ui datagrid 实现页面端排序 EF动态编写排序Lambda表达式 1.前端页面 var mainListHeight = $(window).height() - 20; ...

  4. CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

    以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...

  5. C语言-用函数实现社保工资查询系统

    需求: 1.有登陆操作,超过三次需重新打开登录 2.查询五险一金.税前税后工资计算,个人与单位应缴明细 3.输入税后工资和税前工资都可查询 4.退出有询问确认操作 代码如下; #include< ...

  6. C语言-社保工资查询系统

    一.简述 此次程序没有涉及函数,完成工资.保险和住房公积金税前税后的查询.工资和社保公积金算法是依据最新的北京标准计算. 五险一金标准: 税率: 1.输入编号1~6查询保险,然后再选择是依据税前工资还 ...

  7. CentOS7下Oracle的自动备份

    概述 Linux下Oracle自动备份就没有MSSQL那么简单,在Linux下Oracle的备份需要借助crontab 指令,crontab 能够自动执行系统定时任务,通过配置crontab 指向Or ...

  8. 如何在ExtJS 6中使用Fashion美化应用程序

    在Ext JS 6,一个最大的改变就是框架合并,使用一个单一的代码库,就可以为每一种设备开发各具有良好体验的最好应用程序.它还带来了一种美化应用程序的新方式. 在本文,重点是Sencha Fashio ...

  9. javassist AOP

    对于AOP,这个概念,不用解释,主要用途很多,我这里主要是为了后续研究如何实现APM做准备.前面研究了动态代理实现AOP,考虑到性能的问题,改用javassist直接修改直接码实现! javassis ...

随机推荐

  1. java 中的Debug eclipse 开发工具使用

    Eclipse的debug模式:代码调试 * Eclipse或MyEclipse就是java的开发工具 * Eclipse开源的.免费的Java开发工具 * MyEclipse基于Eclipse开发出 ...

  2. abp使用redis缓存

    利用NuGet程序包管理程序,添加 Abp.RedisCache 在 xxxx.Web.Core 项目的Module中注册Redis 在刚才上面这个类文件头部注册Redis组件 在Web.config ...

  3. HDU_2102 A计划 【BFS】

    一.题目 HDU2102 二.题意分析 该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是 1.到了传送门的时候要重新考虑传送的点的三种情况. (1)若又是 ...

  4. Tensorlflow-解决非线性回归问题

    import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt #使用numpy生成200个随机点,范围从-0.5到0 ...

  5. webpack 打包css报错 Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead

    是webpack4和extract-text-webpack-plugin的兼容性问题 执行命令:npm install extract-text-webpack-plugin@next --save ...

  6. webstrom 搭建 nodejs

    1.安装好 nodejs .下载地址 http://nodejs.org/#download,一路next,位置自己定,直到完成. 2.安装好 webstorm.官网下载,破解方法很多,自己搜吧. 3 ...

  7. 将M个客服随机分配给N个客户

    class AllocUser { //客户多于客服 public static void Test() { var customers = new List<Customer>() { ...

  8. 【总结】ettercap工具之DNS劫持

    在arp欺骗成功基础上开始进行dns劫持,,, 1.修改/etc/ettercap/etter.dns文件内容,如下图所示. 将所有域名解析到192.168.1.250地址上,,, 2.etterca ...

  9. Python入门笔记——(2)列表和元组

    一.序列 python包含6种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.序列中每个元素被分配一个序号即索引,第一个索引为0,第二个为1,以此类推.也可以 ...

  10. js 反转字符串的实现

    在这里只推荐简单易懂的方法,赶紧get !!! 字符串转数组,反转数组,数组转字符串. split(""):根据空字符串拆分数组 reverse():数组反转元素位置 join(& ...