求 动态设工资项目 的工资表结构

fu_manxing 2003-08-21 11:13:45
求 动态设工资项目 的 工资表结构

可用人事表结构 交换

fu_manxing@hotmail.com


谢谢!
...全文
406 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
niexuebin 2003-08-25
  • 打赏
  • 举报
回复
gz
愉快的登山者 2003-08-25
  • 打赏
  • 举报
回复
使用动态数据项设计数据库。
rogery 2003-08-23
  • 打赏
  • 举报
回复
好多…………

sinkiangscorpio 2003-08-23
  • 打赏
  • 举报
回复
我大部分都差不多的,应该补充一下应该加上控制多余的列不显示;
Hanson_bati_zhu(欺世盗名之徒)
动态创建好象有些复杂的,可以直接关联两个表的。
有时间交流交流,图片我还没有看到呢?

我想录入的时候,就让某行加某行等于一个汇总行,而且汇总值要保存到数据库当中的。好象挺费竟的,直接在数据窗口当中实现。可能我说的不够清楚把!

polugen 2003-08-21
  • 打赏
  • 举报
回复
UP
Hanson_bati_zhu 2003-08-21
  • 打赏
  • 举报
回复
太长了
懒得帖
你去这里看看吧

http://search.csdn.net/expert/topic/58/5801/2002/2/26/543052.htm
Hanson_bati_zhu 2003-08-21
  • 打赏
  • 举报
回复
我所采用的办法为:抛开SyntaxFromSQL,利用程序组合生成DW教本

看起来好像很高深,很困难,因为DW导出教本给人的感觉就像是一堆乱码,尤其是复杂些地DW,教本更是又臭有长

怎么生成能

现在我们随便打开一个DW从头一句句看看她到底都存储了些什么



首先在PB中绘制一个简单的DW,使用的SQL语句为“SELECT id,name from sysobjects”,够简单的了吧

然后保存为d_test,在导出为文件d_test.srd

用文件编辑器打开这个SRD文件后,可以看到大约十五六行的乱八七遭的代码,下面我们一句句的看







$PBExportHeader$d_test.srd

这句话是一个PB导出文件的头说明信息,(如果你不需要导入到PBL的话)用处不大

这句在使用SyntaxFromSQL生成的DW教本中是没有的,而且如果你在要生成的DW的教本前也加入这句话,CREATE方法将报错





release 7;

很重要,留着,虽然看上去用处不大,只说明了一下生成器的版本,但却不能缺少,如果你用的不是PB7,后面的版本应该是你所以得PB版本的主版本号







datawindow(units=0 timer_interval=0 color=16777215 processing=1 HTMLDW=no print.documentname="" print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.prompt=no print.buttons=no print.preview.buttons=no grid.lines=0 )

嗬!好长的一句,这个大家伙说明的这个DW的主体信息,包括显示点单位、DW背景色、DW处理方式、打印设置等信息,我们一个个地分析



datawindow( 这是这句话的开头,说明这句话是用来描述DW主体信息的,以括号开头,以反括号结束

units=0 描述当前DW使用的点类型,0->PB点,大约等于1/4象素 1->屏幕象素 2->1/1000英寸 3->1/1000屏幕象素

timer_interval=0 时间中断频率,在这里不讨论这个,如果你需要你的DW一闪一闪亮晶晶,这个可是有用的东东

color=16777215 很重要,整个DW的背景色就指着她那

processing=1 VIP,整个DW的显示风格由她决定 0->FreeForm 或 Tabular (下面只讨论这种风格) 1->GRID 其他的我就不说了,可以看HELP

HTMLDW=no 对我们的讨论没有意义,不管他

print.* 如果你不需要打印这个DW,不用设置它,你哪怕删掉这些内容也没有影响

grid.lines=0 如果你选用了GRID风格,这个设置项决定是否显示表格线,如果是GRID的话,没有这个表格线好难看

) EASY,就是这句话讲完了啦 8-)







header(height=80 color="536870912" )

声明DW标题带区的高度和背景色信息





summary(height=0 color="536870912" )

声明DW合计带区的高度和背景色信息





footer(height=0 color="536870912" )

声明DW页脚带区的高度和背景色信息





detail(height=92 color="536870912" )

声明DW明细数据带区的高度和背景色信息


Hanson_bati_zhu 2003-08-21
  • 打赏
  • 举报
回复
报表录入程序设计思路



一、目的

在用户的日常义务处理中,经常要遇到各种表格的填写、查询等处理,随着计算机应用的日益普遍,这个问题已经越来越明显得出现在广大程序员的面前

国人向来喜欢简单问题复杂化,这个现象也突出的体系在国人自己设计的各种报表格式中。就我个人观点,中国式表格有一下几大特点

1.格式、种类繁多,结构复杂

国人设计的表格应该可以称得上是“别出心裁、花样无穷”,从整体结构上,可以分为以下几种:

a.普通表格:结构类似GRID,就是简单的数据列表,横行为所写数据内容类别的展开,纵向为具体业务数据内容的展开

b.交叉表:结构类似CrossTab,但常需要录入,而且用户(绝大多数)希望能够直接按照以前习惯的这种格式进行录入。横行为同业务类别内容根据用户所需顺序的展开,纵向为某一(些)数据内容根据需要展开,交叉点为具体的业务数据细节,突出的表现在:课程表、成绩单、生产进度表、工资表等

c.收支平衡表:一般常见的为两列,一列为收入数据(或借方),一列为支出数据(或贷方),然后要求总结平衡,常见为:会计报表

d.混沌格式:看不出该归属到什么类别上,所以给起了个“混沌”的雅号,也不知道是否确切,不过这种表格给人的第一印象就是“晕~~~”,好多数据,好多表线,不知道设计者是怎么想的,数据的排步没有规律可循,近乎真随机,反正是领导需要看到什么就往上面贴什么,只不过把格画得整整齐齐的(有的甚至连格都乱八七遭的),常见于领导报表、生产进度总表等表格中



2.用途广泛

政府部门、工矿企业、商业、医院、学校。。。几乎每一个角落都堆满了各种各样的表格

3.格式频繁变化

用户在设计表格格式时总想能够一步到位、包罗万象,不管是否必须,反正都画在里面(当领导好辛苦,成天看这些表格,肯定成了“中央部长”),结果反倒过犹不及,一旦业务发生变化,哪怕只是小小的变动,也会影响到以前所用的表格的格式,所以很多业务程序到最后总得重画表格以适应用户需求的变化。



二整体设计思路

用户表格样式多、变化频繁,使得很多程序员不得不为了满足用户的需求变更而疲于奔命。为了尽早的从这种疲惫的工作状态中解脱出来,程序员们想出了很多办法,比如动态更新PBD库中DW、动态更新数据库表、数据与结构分离等办法,这些办法各有利弊,我比较常用最后一种办法(数据与结构分离)

数据与结构分离的办法最初的想法是从数据库中的中央数据字典中得到的灵感,将表格的结构和数据内容相分离,由用户(或实施人员)来维护表格的结构,应用程序来统一管理各个表格所设计的实际业务数据,所有的表格数据的存储采用统一的数据结构,数据的检索、维护等也采用统一的程序流程。

下面我以一张工资表(交叉表)为例讲一下设计流程



1.表格样式



行号 姓名 部门 基本工资 奖金合计 全勤奖 安全奖 车补 工资总计 应扣金额 实发合计

1 张三 门卫 300 100 40 60 50 400 17 383

2 李四 司机 500 140 40 100 0 640 25 615





这是一个很简单的工资条表格的样式(其中行号为唯一标识列,一般常用人员ID作此列,在此用于是为了使描述简单),其中横行列有10列,前两列内容可以从职工信息表中获取,而后面的8项则可能经常要发生变动,比较常见的设计办法是创建一个几十列的大数据库表,如果用户改变报表的格式,程序则调整数据的内容或列的显示顺序(即表格格式中保存当前表格列对应当数据库表列ID),表格样式的存储结构一般常定义为:







序号 列显示名 对应数据库表列ID 列计算公式 。。。

1 姓名 NAME

2 部门 BUMEN

3 基本工资 COL1

4 奖金合计 COL2 COL3+COL4

5 全勤奖 COL3

6 安全奖 COL4

7 车补 COL5

8 工资总计 COL6 COL1+COL2+COL5

9 应扣金额 COL7

10 实发合计 COL8 COL6-COL8







这样做的主要缺点是用户表格内容的类别有限制,很难在这张表中加入一个扣款说明列

因为如果不可预知用户字符列和数值列的数量,无法确定数据存储表的列结构。而且数据库数据存储表的数据冗余比较严重。



如果把这个数据存储方式的思路调整一下,把数据的存储格式变一下,改为以下结构:





表格结构存储:



表格元素ID 表格元素显示名 元素类别 计算公式

001 姓名 字符

002 部门 字符

003 基本工资 金额

004 奖金合计 金额 005+006

005 全勤奖 金额

006 安全奖 金额

007 车补 金额

008 工资总计 金额 003+004+007

009 应扣金额 金额

010 实发合计 金额 008-009





如果需要处理多张报表,可以在前面加一个表格ID,在此只讨论这一张报表,所以不引用



数据存储:





行号 元素ID 字符数据列 金额数据列

1 001 张三

1 002 门卫

1 003 300

1 004 100

1 005 40

1 006 60

1 007 50

1 008 400

1 009 17

1 010 383

2 001 李四

2 002 司机

2 003 500

2 004 140

2 005 40

2 006 100

2 007 0

2 008 640

2 009 25

2 010 615







由数据存储表的存储内容可以看出,该表的主键列为:行号+元素ID

对于同一张表,数据内容实际上可以划分为数值型和字符型(日期型其实也可以转化为一种字符型),根据用户对表格格式的定义中各列的类型定义,数据分别存储到对于的数据类别列中

这样做的优点为,用户表格格式的变化只会影响到数据存储表的行次数据,而对数据存储表的结构不会有任何影响,而且表格格式定义时,不需要考虑数据存储表的结构是否有限制要求,所以这样就能大幅度提高表格结构定义的灵活度





如果需要从数据存储表中获取所需的数据,可以采用这个办法:





SELECT 行号,

MAX(CASE WHEN 元素ID='001' THEN 字符数据列 ELSE '' END) AS 姓名,

MAX(CASE WHEN 元素ID='002' THEN 字符数据列 ELSE '' END) AS 部门,

SUM(CASE WHEN 元素ID='003' THEN 金额数据列 ELSE 0 END) AS 基本工资,

SUM(CASE WHEN 元素ID='004' THEN 金额数据列 ELSE 0 END) AS 奖金合计,

SUM(CASE WHEN 元素ID='005' THEN 金额数据列 ELSE 0 END) AS 全勤奖,

SUM(CASE WHEN 元素ID='006' THEN 金额数据列 ELSE 0 END) AS 安全奖,

SUM(CASE WHEN 元素ID='007' THEN 金额数据列 ELSE 0 END) AS 车补,

SUM(CASE WHEN 元素ID='008' THEN 金额数据列 ELSE 0 END) AS 工资总计,

SUM(CASE WHEN 元素ID='009' THEN 金额数据列 ELSE 0 END) AS 应扣金额,

SUM(CASE WHEN 元素ID='010' THEN 金额数据列 ELSE 0 END) AS 实发合计

FROM 数据存储表

GROUP BY 行号





这个SQL语句乍一看起来感觉很复杂,而且感觉运行效率肯定很差劲,实际上不用担心,仔细看看就会发现,这个SQL语句是有规律可循的,对于字符型列,使用MAX,对于数值型列,使用SUM,后面就是根据表格结构定义生成的一个很简单的字符串,最后为每一个计算列设置一个别名以便程序处理,运行效率吗,大家尽可放心,绝对可以满足使用的要求。





现在又涉及到一个问题,现在是可以检索出表格的数据,但这样检索出的数据应该如何让用户来录入、保存呢?

具体的解决办法为:动态生成DW,根据用户的输入维护实际数据



三、动态生成DW

大家最常用到的动态DW的生成办法是使用PB函数SyntaxFromSQL

方法为:现组成SQL语句,然后使用SyntaxFromSQL生成DW教本,在使用dw函数CREATE来生成具体的DW



我所采用的办法为:抛开SyntaxFromSQL,利用程序组合生成DW教本

看起来好像很高深,很困难,因为DW导出教本给人的感觉就像是一堆乱码,尤其是复杂些地DW,教本更是又臭有长

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧