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. TX1 文字界面启动与root用户自动登录设置

    设置默认文字启动界面 更改/boot/extlinux/extlinux.conf文件,在最后一行的末尾添加 text. 设置自动登录 在/etc/init/tty1.conf文件末尾添加: exec ...

  2. COCO2018 目标检测

    刚浏览了一下coco数据集官网,认真看了一下18年的目标检测任务,简单记录一下. coco2018目标检测挑战赛只进行实例分割的评比,虽然仍然可以输出bbox,但是不可以提交到比赛的服务器,原因是官方 ...

  3. Hibernate学习笔记(一)—— Hibernate概述及入门

    一.Hibernatea概述 1.1 什么是Hibernate? 在介绍什么是Hibernate之前,我们先讨论一下什么是框架?框架是用来提高开发效率的,框架封装好了一些功能,我们需要使用这些功能时, ...

  4. eclipse 与my eclipse区别,IDE

    ecilpse:是一个平台,通过相关插件可以作为c/c++,java,J2EE,PHP,python,Flex等的IDE IDE:集成开发环境(IDE,Integrated Development E ...

  5. 将多个单元格内容连接到一个单元格中(EXCEL)

    连接符号:& 如下图,我们要将表格中每名员工的姓名.入职时间以及年龄放入到同一个单元格中,形成以“-”连接的形式. 这时我们要用到Excel中的连接符“&”,也就是在按下Shift+数 ...

  6. hdu6325 Interstellar Travel 凸包变形

    题目传送门 题目大意: 给出n个平面坐标,保证第一个点和第n个点y值为0,其余点的x坐标都在中间,要从 i 点走到 j 点的要求是 i 点的横坐标严格小于 j 的横坐标,并且消耗的能量是(xi * y ...

  7. UVA - 11584 DP 最少线段覆盖

    题意:用最少的不可交线段覆盖整个区间,求该最小值 课上摸鱼的时候没注意到题意的转换,写了没啥卵用的回文中心最长枚举,所以代码里的st和h/h2是几乎没用的 注意状态转移的时候不要只用最长线段去转移,这 ...

  8. MyBatis 源码解析SqlSession.getConnection(Connection异常:关闭或者不在Mybatis事务)

    从SqlSession的实现类SqlSessionTemplate源码中,看出相关方法被其内部类SqlSessionInterceptor(实现了InvocationHandler)代理 当调用Sql ...

  9. Scrapy错误-no active project Unknown command: crawl

    在运行别人的scrapy项目时,使用命令行 scrapy crawl douban(douban是该项目里爬虫的名字,烂大街的小项目---抓取豆瓣电影). 执行之后,出现报错如下: 上网搜寻无果. 大 ...

  10. win10 装centos7 虚拟机

    1.下载VMware Workstation 64版本 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluati ...