我在做人事管理软件时发现一个问题就是,工资管理中工资的发放项目经常会发生变化,而且工资项目之间的计算关系也经常发生变化,这为实际的编程带来了很大的麻烦。其实实际工作中还有很多类似的情况需要解决,希望能为大家提供多一种思路以供参考。
现将我的解决方法陈述如下。
第一步,创建一个工资表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常见问题解决方法,很有用,PB常见问题解决方法
PB9.0是PowerBuilder的一个版本,提供了强大的数据窗口、图形用户界面设计工具以及对数据库的强大支持,使得开发者能够快速构建复杂的业务应用程序,如本例中的工资管理系统。 首先,我们来详细了解一下PB9.0的关键...
总之,PB9.0动态库是PowerBuilder 9.0应用程序正常运行的基础,正确理解和管理这些库是解决问题的关键。在遇到相关问题时,应首先检查库的完整性和版本,然后根据需要进行放置、注册或更新,以确保软件的稳定运行。...
【pb 工资管理系统】是一款基于PowerBuilder(简称PB)开发的实用型管理软件,主要用于企业或组织的工资计算、发放...通过这个项目,学生能够锻炼解决问题的能力,提高软件工程素养,为未来的职业生涯打下坚实基础。
解决这个问题的一种方法是将压缩包中的动态库文件拷贝到程序的执行目录,这样程序在启动时就能够自动找到并加载这些库文件,从而避免运行时错误。 在PB9中,动态库可能包括但不限于以下几类: 1. 数据访问组件:如...
标题中的“PB写的动态生成下拉菜单的源代码”指的是使用PowerBuilder(PB)编程语言实现的动态创建下拉菜单的功能。在软件开发中,下拉菜单是用户界面中的常见元素,它允许用户从预定义的选项中进行选择。动态生成...
动态链接库(DLL)在PB程序中扮演着至关重要的角色,它们包含了运行PB应用程序所需的函数和资源。 标题提及的“PB9和PB11的动态库文件”主要指的是用于PowerBuilder 9和PowerBuilder 11版本的DLL文件。这些DLL文件...
综上所述,"pb工资管理系统"是一个结合了数据库设计、PowerBuilder编程、业务逻辑实现、用户界面设计、权限管理等多个方面的综合性项目,对于学习者来说,它不仅提供了实践PB技术的机会,也是理解企业级应用开发流程...
标题中的“PB动态报表列印解决”指的是PowerBuilder(PB)应用程序中关于动态报表打印的问题。PowerBuilder是一款流行的面向对象的开发工具,尤其适合构建数据库应用。在开发这些应用时,有时我们需要创建动态报表,...
PB12动态分组是PowerBuilder 12中的一项重要特性,它允许开发人员在运行时根据用户需求灵活地对数据进行动态分组和聚合计算。这个功能极大地提高了应用程序的可扩展性和用户交互性,使得数据窗口(DataWindow)能够...
总之,"完美解决PB读取PDF文件问题PDFViewOCX-2020更新pb9.zip"这个压缩包提供了解决PowerBuilder应用中PDF文件处理问题的解决方案,通过PDFViewOCX控件,开发者可以轻松地将PDF阅读功能集成到他们的应用程序中,...
综上所述,【PB工资管理程序系统】是一个结合了PowerBuilder技术、数据库设计、用户交互和业务流程的综合性项目,对于毕业生来说,既能锻炼编程技能,又能深入了解企业管理中薪资计算的实际需求。通过这个项目,学生...
文件`说明.txt`通常包含了关于动态库的详细使用指南、函数参数的解释以及错误代码等重要信息。确保仔细阅读此文档,以充分利用库的功能,并避免常见的问题。 综上所述,通过PB集成`MakeQRBarcode.dll`,我们可以在...
PB动态链接库(PB是PowerBuilder的缩写)是指由PowerBuilder开发的动态链接库文件。PowerBuilder是一款强大的、基于...学习和掌握如何创建和使用PB DLL,对于PowerBuilder开发者来说,是提升技能和解决问题的有效途径。
【工资管理系统PB】是一款基于PowerBuilder(简称PB)开发的数据库应用系统,主要功能是用于企业内部进行工资的计算、管理以及相关数据分析。PB是一种强大的客户端/服务器(C/S)结构的开发工具,尤其在数据窗口...
在探讨“PB9运行必须的动态库”这一主题时,我们深入分析了PowerBuilder 9.0(简称PB9)的运行环境与依赖组件,尤其是动态链接库(Dynamic Link Library,DLL)。动态库是Windows操作系统中的一种共享库,用于存储多...
此控件的2020年更新版,PDFViewOCX-2020更新pb9,针对PB9进行了优化,解决了PB在处理PDF文件时可能遇到的问题,提升了用户体验。 首先,PDFViewOCX的核心功能在于提供了一个直观的接口,允许用户在PowerBuilder应用...
在PowerBuilder(PB)开发环境中,数据窗口(DataWindow)是一种强大的组件,用于展示和操作数据库中的数据。标题“pb数据窗口动态调整”涉及到的是如何让操作员在运行时能够自定义数据窗口列的宽度,以适应不同用户...
在PB工资管理程序中,开发者可能利用了PowerBuilder的这些优势来构建用户友好的界面和高效的数据处理能力,使得工资计算和管理变得简单易行。 工资管理程序通常包含以下几个关键功能模块: 1. 员工信息管理:此...
本文将详细介绍如何解决PB中由于OLE控件引起的程序崩溃问题,包括问题现象、原理分析及具体的解决步骤。 #### 二、问题现象 当在PowerBuilder中尝试插入OLE控件时,可能会遇到以下情况: 1. 应用程序在插入控件时...