现将我的解决方法陈述如下。
第一步,创建一个工资表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 |
第三步,现在基础工作已经作好,接下来就是程序实现了。
首先,定义一个GRID风格的数据窗口,数据源选择Tbl_gztz表。并将它放到窗口中,进行一些数据库联接。在窗口的OPEN事件中,先将设置好的工资发放项目进行初始化设置,设置台头,设置可见项。具体代码如下:
| dw_1.settransobject(sqlca) |
然后呢,当然就是对数据窗口进行设置,让它具有自动计算功能了。
数据窗口的ItemChanged事件是对每一列值发生变化时触发的,我们只要对它进行编程就可以实现自动计算功能。
| String ls_xm, ls_jsgs //定义变量,存放工资项目,计算公式 This.accepttext() |
程序已经在PB7.0+Oracle8i 下测试通过。
博客介绍了基于Oracle的工资项目管理程序实现。先创建工资项目登记表,记录工资项目及计算关系,从工资发放表取字段插入定义表。接着定义GRID风格数据窗口,进行数据库联接和初始化设置,通过编程让数据窗口实现自动计算功能,程序在PB7.0+Oracle8i下测试通过。
1万+

被折叠的 条评论
为什么被折叠?



