您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > PB > 正文
PB中关于动态工资项目问题的解决办法
[文章信息]
作者:廖海辉
时间:2003-03-17
出处:yesky
责任编辑:方舟
[文章导读]
我在做人事管理软件时发现一个问题就是,工资管理中工资的发放项目经常会发生变化
advertisement
热点推荐
· 11.15软件精选 制作MSI文件
· 闪客五周年之闪客光荣榜
· 用Winamp“品尝”无限音乐
· 网络加、解密的技术应用
· 闪客五周年之闪客光荣榜:zoron
[正文]

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

  现将我的解决方法陈述如下。

  第一步,创建一个工资表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)
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()

  然后呢,当然就是对数据窗口进行设置,让它具有自动计算功能了。
数据窗口的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 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 下测试通过。


·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 11.15软件精选 制作MSI文件
  • 闪客五周年之闪客光荣榜
  • 兰欣推出我国第一款网络游戏专用音箱
  • 玩家发现117亡灵种族Bug
  • [配置推荐]极品HIFI配置
  • 东瀛美少女COSPLAY(55)
  • 用Winamp“品尝”无限音乐
  • 迷你型PStwo全面透析专题
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索