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. 用qt creator创建可继承ui类

    https://jingyan.baidu.com/article/5d368d1efa2dd73f60c05786.html 用qt creator创建可继承ui类 听语音 | 浏览:1657 | ...

  2. JavaWeb学习笔记(一)—— Http协议

    一.什么是HTTP协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览 ...

  3. 【转】IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示

    1.问题描述 在Idea的spring工程里,经常会遇到Could not autowire. No beans of 'xxxx' type found的错误提示.但程序的编译和运行都是没有问题的, ...

  4. struts2学习笔记(七)—— struts2的文件上传

    一.前台页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  5. Flask 项目结构(仅供参考)

    project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ # JS脚本 css/ # 样式表 img/ # 图片 favicon.ico # 网站图标 templat ...

  6. vue-persist 为 vuex 持久化!!

    npm install --save vuex-persist import VuexPersistence from 'vuex-persist' const vuexLocal = new Vue ...

  7. Python- sort()/sorted()

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. sorted(iterable,key=None,revers ...

  8. Oracle分区表管理的一些笔记

    [转自] http://www.linuxidc.com/Linux/2011-07/38381.htm Oracle分区表的管理笔记(仅限于对普通表,即堆表的分区管理,IOT跟CLUSTER TAB ...

  9. 【总结】MYSQL注入

    关于MYSQL注入的总结,网上的资料很多,这里和大家简单分享下自己实战中常用的思路和命令 0x00   UNION联合查询型注入常用语句 order by n //定字段,n为正整数 union se ...

  10. VS2015打开特定项目就崩溃

    今天在打开之前写的项目的时候,一开vs就崩溃关闭了,打开其他项目的.sln和.vsproj就可以,唯独有1个项目打不开,也不知道为啥,气死了. 去网上找到的解决办法: 步骤1:开始–>所有程序– ...