RSS
热门关键字:
当前位置 : 主页>编程开发>Powerbuilder>列表

PB中关于动态工资项目问题的解决办法

来源:我要研发网 作者: 时间:1970-01-01 点击:



  我在做人事管理软件时发现一个问题就是,工资管理中工资发放项目经常会发生变化,而且工资项目之间计算关系也经常发生变化,这为实际编程带来了很大麻烦。其实实际工作中还有很多类似情况需要解决,希望能为大家提供多一种思路以供参考。

字串6

  现将我解决方法陈述如下。 字串3

  第一步,创建一个工资表tbl_gztz,用来记录职工每个月工资发放情况,其中就包括工资发放项目。所以这个表字段应该尽量地多,你大可放在50个以上。

  表结构如下:tbl_gztz

字串8

  

数据列名数据列类型数据列含义
Zgbh Varchar2(10)职工编号
Mc Varchar2(10)职工名称
Yf Varchar2(6) 工资月份
Gz1Number(12,2) (含义见项目表下表)
Gz2 Number(12,2) (含义见项目表下表)
Gz3 Number(12,2) (含义见项目表下表)
Gz4 Number(12,2) (含义见项目表下表)
Gz5Number(12,2) (含义见项目表下表)

  第二步,创建一个工资项目登记表tbl_gzxmdy,用来记录工资管理实际工作中所有工资项目和项目之间计算关系。其中计算关系可以是简单四则运算,也可以包含一些函数(限于PB内容函数)。 字串8

  表结构如下:

字串6

  

数据列名数据列类型数据列含义
XmVarchar2(10)工资项目名称
Xmmc Varchar2(20) 工资项目含义
JsgsVarchar2(40)对应计算关系
Flag Varchar2(1)是否启用该项(1为启用,0为停用)

  工资发放项目从工资发放表Tbl_gztz中取出字段,这个在Oracle(或其它数据)中很容易取出,然后将取出字段插入到工资项目定义表Tbl_gzxmdy中,并为每个项目定义其含义,没有为其定义,到时候将不显示出来。

字串9

  为了方便解释,举例说明比较清楚。取出发放项目字段SQL语句如下:

字串1

  Select Cname From Col Where Tname = 'TBL_GZTZ' and Coltype = 'NUMERIC' Order By Colno;

字串9

  工资项目数据维护举例说明: 字串3

  

XmXmmc Jsgs
Gz1技能工资
Gz2浮动工资
Gz3 保险工资
Gz4 应发工资Gz1 Gz2
Gz5 房租费
Gz6 实发工资Gz4 - Gz5

  第三步,现在基础工作已经作,接下来就是程序实现了。 字串8

  首先,定义一个GRID风格数据窗口,数据源选择Tbl_gztz表。并将它放到窗口中,进行一些数据库联接。在窗口OPEN事件中,先将设置工资发放项目进行初始化设置,设置台头,设置可见项。具体代码如下:

字串2

  dw_1.settransobject(sqlca)
string ls_xm,ls_xmmc //定义变量,存放工资项目
Declare c1 cursor for //定义游标,取出工资项目含义
Select xm,xmmc from tbl_gzxmdy;
 Open c1 ;
 Fetch c1 into:ls_xm,:ls_xmmc;
 //循环提取数据到变量中
 Do while sqlca.sqlcode =0
  If isnull(ls_xmmc) or ls_xmmc ='' then
   //对没有定义工资项目进行隐藏
   Dw_1.modify(ls_xm ".width=0")
  Else
   //设置工资发放项目台头
   Dw_1.modify(ls_xm "_t.text='" ls_xmmc "'")
  End if
  Fetch c1 into:ls_xm,:ls_xmmc;
 Loop
Close c1;
dw_1.retrieve()

  然后呢,当然就是对数据窗口进行设置,让它具有自动计算功能了。 字串2

  数据窗口ItemChanged事件是对每一列值发生变化时触发,我们只要对它进行编程就可以实现自动计算功能。 字串3

  String ls_xm, ls_jsgs //定义变量,存放工资项目,计算公式
String ls_dwoname
Double ldc_je //得到计算公式计算结果值
This.accepttext()
Declare c1 cursor for //定义游标,取出工资项目含义
Select xm,jsgs from tbl_gzxmdy;
Open c1 ;
Fetch c1 into:ls_xm,:ls_jsgs;
//循环提取数据到变量中
Do while sqlca.sqlcode =0
 If isnull(ls_jsgs) or ls_jsgs ='' then
 Else
  //计算统计列结果,利用Evaluate计算
  ldc_je = double(dw_1.Describe("Evaluate(lookupdisplay('" ls_jsgs "')" row ")"))
  //设置计算结果到工资统计项目列
  this.setitemnumber(row,ls_xm,ldc_je)
 End if
 Fetch c1 into:ls_xm,:ls_jsgs;
Loop
Close c1;

  程序已经在PB7.0 Oracle8i 下测试通过。 字串4

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章