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

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

  第一步,创建一个工资表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 下测试通过。

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

  1. TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法

    TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法 问题概述 组态了中英文切换的多语言项目,有些应用场合在数值显示时需要标注单位,例如:摄氏度符号°C. 常见的问题是切换显示语言为 ...

  2. html子布局不超出父布局,详解flex布局中保持内容不超出容器的解决办法

    在移动端,flex 布局很好用,它能够根据设备宽度来自动调整容器的宽度,用起来很方便,已经越来越离不开它,但是最近在做项目的时候发现一个问题. 就是在一个设置了 flex:1 的容器中,如果文字很长, ...

  3. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)...

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

  4. JPG,动态GIF,BMP一些常用解决办法

    JPG,动态GIF,BMP一些常用解决办法 常用方式0,使用GIF89A类: 优势: 一招鲜吃遍天,上至动态GIF,下至静态JPG,BMP两句搞定,简单方便 缺点: 有时会出现边缘效果, 有的图像会挺 ...

  5. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

  6. VS中无法解析的外部命令的解决办法

    VS中无法解析的外部命令的解决办法 报错LNK2005外部符号 报错LNK2019外部符号 报错LNK1120外部符号 解决办法1: 检查自己报错的代码里,是否有类里声明的函数没有对应的实现.比如在p ...

  7. 虚拟机中火狐连不上服务器,VMware虚拟机中Ubuntu18.04无法连接网络的解决办法

    VMware虚拟机中Ubuntu18.04无法连接网络的解决办法 虚拟机中Ubuntu18.04无法连接网络的解决办法,具体内容如下 对VMware虚拟机进行恢复默认网络设置 恢复虚拟网络默认设置(在 ...

  8. Eclipse中提示svn: is already locked的解决办法

    Eclipse中提示svn: is already locked的解决办法 eclipse的svn提交不了,报错.提示 svn: is already locked 解决办法:右键项目-------T ...

  9. 微服务架构中的雪崩问题产生原因及解决办法

    微服务架构中的雪崩问题产生原因及解决办法 参考文章: (1)微服务架构中的雪崩问题产生原因及解决办法 (2)https://www.cnblogs.com/panchanggui/p/10330924 ...

最新文章

  1. BZOJ3515 : EvenPaths
  2. Uber做出艰难决定:关掉AI实验室,彭博社:Uber没有梦想
  3. 17秋 软件工程 第六次作业 Beta冲刺 总结博客
  4. 系统制成docker镜像_Docker学习以及镜像制作流程
  5. MTK for Google AttestationKey介绍
  6. 线性表的实现及其基本操作
  7. 数据分析入门(第一课)
  8. 不要伤害指针(3)--指针和结构类型的关系
  9. oracle 常见操作
  10. 微信支付遇到的坑--签名错误
  11. yolov4用1050ti_简单粗暴的多目标跟踪神器 – DeepSort
  12. 排列算法 C++实现
  13. 计算色光叠加的RGB颜色的alpha值
  14. mysql视图改造实体表_数据库视图改了对基表
  15. springmvc跨域资料收集
  16. nodejs下载安装
  17. ipad wifi信号测试软件,iPad3的wifi信号弱 二种方法修复WiFi信号
  18. Python 练习实例21 猴子吃桃问题
  19. PS纯色图标更换颜色
  20. Java用HttpClient爬大学英语四六级考试成绩查询接口

热门文章

  1. 嵌入式外设集 -- 旋钮电位器(360度)
  2. linux查看文件总和以G为单位,linux系统下以存储从大到小并以K,M,G为单位的方式查看当前目录下的文件信息...
  3. WPF 中的 loaded 事件和 Initialized 事件
  4. TSN 802.1AS时钟同步协议测试
  5. 树莓派 for Raspbian
  6. simulink中mux和function关联时信号维度报错(xxx does not fully set the dimensions of output xxx)
  7. 打印机驱动特殊安装步骤
  8. Excel实战:将员工出勤时间设置为分钟的操作
  9. Django debug page XSS漏洞(CVE-2017-12794)分析
  10. MST1661,摩托车大功率闪光器