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. shared_ptr智能指针

    来自博客:https://www.cnblogs.com/lzpong/p/6188034.html 多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_p ...

  2. springcloud微服务总结二 注册中心

    一:netflix和springcloud关系 netflix公司开源了很多组件,包括服务注册与发现(Netflix Eureka).断路器(Netflix Hystrix).负载均衡(Netflix ...

  3. 【算法笔记】B1023 组个最小数

    1023 组个最小数 (20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...

  4. hdu1686 Oulipo kmp

    题目传送门 思路:kmp模板,稍微修改下 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...

  5. Avito Cool Challenge 2018:D. Maximum Distance (最小生成树)

    题目链接 题意 : 给出一个联通图和一些特殊的点,现在定义cost(u,v)为一条从u到v的路径上面边权的最大值 , 定义dis(u,v) 为从u到v 路径上面cost 的最小值 然后求所有特殊点到其 ...

  6. C#工具类之XmlNode扩展类

    using System; using System.Linq; using System.Xml; /// <summary> /// XmlNodeHelper /// </su ...

  7. async中series的实现 javascript构件

    //同步流程 var series=function(arr){ function async(i){ arr[i](function(){ if(1+i<arr.length){ async( ...

  8. poj3040

    一.题意:约翰要给他的牛贝西发工资,每天不得低于C元,约翰有n种面值的钱币,第i种的面值为v_i,数量有b_i.问这些钱最多给贝西发多少天的工资.注意,每种面值的金钱都是下一种的面值的倍数. 二.思路 ...

  9. css引入 以及选择器040

    css的介绍: css(Cascading Style Sheet)  层叠样式表 作用就是给HTML页面标签议案家各种样式 定义网页效果 简单来说 就是讲网页内容和显示样式进行分离 , 提高了显示功 ...

  10. Percona Mysql备份

    介绍 Percona是唯一一款开源.免费的mysql热备份工具,实现了对InnoDB数据库的非阻塞式的备份.有如下优势:1.完整.快速.可靠的备份2.备份期间不打断事务执行(innodb引擎)3.备份 ...