我在做人事管理软件时发现一个问题就是,工资管理中工资的发放项目经常会发生变化,而且工资项目之间的计算关系也经常发生变化,这为实际的编程带来了很大的麻烦。其实实际工作中还有很多类似的情况需要解决,希望能为大家提供多一种思路以供参考。
现将我的解决方法陈述如下。
第一步,创建一个工资表tbl_gztz,用来记录职工的每个月的工资发放情况,其中就包括工资的发放项目。所以这个表字段应该尽量地多,你大可放在50个以上。
表结构如下:tbl_gztz
数据列名 | 数据列类型 | 数据列含义 |
Zgbh | Varchar2(10) | 职工编号 |
Mc | Varchar2(10) | 职工名称 |
Yf | Varchar2(6) | 工资月份 |
Gz1 | Number(12,2) | (含义见项目表下表) |
Gz2 | Number(12,2) | (含义见项目表下表) |
Gz3 | Number(12,2) | (含义见项目表下表) |
Gz4 | Number(12,2) | (含义见项目表下表) |
Gz5 | Number(12,2) | (含义见项目表下表) |
第二步,创建一个工资项目登记表tbl_gzxmdy,用来记录工资管理实际工作中的所有的工资项目和项目之间的计算关系。其中计算关系可以是简单的四则运算,也可以包含一些函数(限于PB内容函数)。
表结构如下:
数据列名 | 数据列类型 | 数据列含义 |
Xm | Varchar2(10) | 工资项目名称 |
Xmmc | Varchar2(20) | 工资项目的含义 |
Jsgs | Varchar2(40) | 对应的计算关系 |
Flag | Varchar2(1) | 是否启用该项(1为启用,0为停用) |
工资的发放项目从工资发放表Tbl_gztz中取出字段,这个在Oracle(或其它数据)中很容易取出,然后将取出的字段插入到工资项目定义表Tbl_gzxmdy中,并为每个项目定义其含义,没有为其定义的,到时候将不显示出来。
为了方便解释,举例说明比较清楚。取出发放项目字段的SQL语句如下:
Select Cname From Col Where Tname = 'TBL_GZTZ' and Coltype = 'NUMERIC' Order By Colno;
工资项目数据维护举例说明:
Xm | Xmmc | Jsgs |
Gz1 | 技能工资 | |
Gz2 | 浮动工资 | |
Gz3 | 保险工资 | |
Gz4 | 应发工资 | Gz1 + Gz2 |
Gz5 | 房租费 | |
Gz6 | 实发工资 | Gz4 - Gz5 |
时间: 2024-12-31 02:57:41