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

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

  现将我解决思路方法陈述如下

  第创建个工资表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) (含义见项目表下表)

  第 2步创建个工资项目登记表tbl_gzxmdy用来记录工资管理实际工作中所有工资项目和项目的间计算关系其中计算关系可以是简单 4则运算也可以包含(限于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

  第 3步现在基础工作已经作好接下来就是实现了

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

  dw_1.transobject(sqlca)
ls_xm,ls_xmmc //定义变量存放工资项目
Declare c1 cursor for //定义游标取出工资项目含义
Select xm,xmmc from tbl_gzxmdy;
 Open c1 ;
 Fetch c1 o:ls_xm,:ls_xmmc;
 //循环提取数据到变量中
 Do while sqlca.sqlcode =0
  If isnull(ls_xmmc) or ls_xmmc ='' then
   //对没有定义工资项目进行隐藏
   Dw_1.mody(ls_xm+".width=0")
  Else
   //设置工资发放项目台头
   Dw_1.mody(ls_xm+"_t.text='"+ls_xmmc+"'")
  End
  Fetch c1 o:ls_xm,:ls_xmmc;
 Loop
Close c1;
dw_1.retrieve
  然后呢当然就是对数据窗口进行设置让它具有自动计算功能了

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

  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 o: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.itemnumber(row,ls_xm,ldc_je)
 End
 Fetch c1 o:ls_xm,:ls_jsgs;
Loop
Close c1;
  已经在PB7.0+Oracle8i 下测试通过

Tags:  pb如何动态create pb动态数组 什么是动态pb 动态pb

延伸阅读

最新评论

发表评论