发信人: n_n@GZ() 
整理人: hunter__fox(2002-07-02 19:49:44), 站内信件
 | 
 
 
 标  题: Re: 逐步汇总报表再论! 发信站: 网易虚拟社区 (Sat Mar 13 10:25:46 1999), 转信
  【 在 dundunlin (dundun) 的大作中提到: 】
 : 我正在搞逐步汇总报表,首先遇到的最大问题 是vfp提供的报表都是固定的,想来
 : 乡曲,只能用EXCEL,有人用更好的方法?
 : 其次,根据用户的需求,选择需要统计的项目,由于用户需求不同,报表的格式就不
 : 容易固定,设计困难,我想用剪贴榜的方式往报表中粘贴用户所需模块,有没人try
 :    .......
 我从一个地方看到过如下一篇文章,COPY 在我的硬盘上,转给你看一看
 
 实现FOXPRO动态制表的新思路
 韦 明  山东省潍坊市 昌潍师范专科学校数学系 邮编:261043
 成 红(潍坊市信息中心)
 【摘 要】 本文在分析Foxpro报表数据库结构的基础上,通过修改Foxpro报表信 息库的内容,实现了Foxpro报表的自动生成。
 【关键词】 报表,动态报表,Foxpro
 
 1、引言
 FOXPRO数据库为用户提供了功能强大的“报表设计器”(Report builder),利用 “报表设计器”的可视功能,可以方便灵活地制作几乎任意形式的报表,并且可 以控制报表的输出、定义报表的页面等。但是这样制作的报表是一个静态的报表 ,一旦数据库的结构发生变化必须重新修改。而且,每段程序只能适合特定的数 据库,有多少报表就要编制多少个报表程序,不但增加了工作量,而且缺乏通用 性和灵活性,也不利于程序的维护与扩充。
 那么,我们是否可以在充分利用FOXPRO“报表设计器”的强大控制功能的前提下 ,设计出通用的动态报表呢?为此,本文进行了较深入的研究,答案是肯定的。 
 
 <图片>
 
 2、报表的构成
 一般情况下报表包含表头、表体和表尾三部分:
 
 3、报表信息库的结构
 我们知道在FOXPRO中,报表的信息是保存在以. FRX为扩展名的数据库文件中(备 注文件以. FRT为扩展名),了解报表数据库的结构有助于问题的解决。报表库( .FRX)的库结构及字段含义如下表所示:
 
 字段名称
 
 类型 长度 小数 说明
 1 PLATFORM C  8 操作平台(_DOS或_WINDOWS)
 2 UNIQUEID C  10 唯一标识(当NAME合EXPR都为空时以_RHE开头, 否则以_RNR开 头)
 3 TIMESTAMP N 10 时间标签(先后次序)
 4 OBJTYPE N 2 目标类型(1.环境; 2.数据库; 5.文字; 8.变量; 9.TIMESTAMP为 空; 23.TIMESTAMP为空) 
 5 OBJCODE N 3 目标代码(1.;4.;7.;53)
 6 NAME M 10 名称(数据库名称)
 7 EXPR M 10 表达式
 8 VPOS N 9 3 行座标
 9 HPOS N 9 3 列座标
 10 HEIGHT N 9 3 高度
 11 WIDTH  N 9 3 宽度
 12 STYLE M 10 风格(透明,不透明)
 13 PICTURE M 10 格式或OLE文件名称
 14 ORDER M 10 索引排序
 15 UNIQUE L 1 唯一数据库(.F.,.T.,空)
 16 COMMENT M 10 注释
 17 ENVIRON L 1 是否报表运行环境(.T.时)
 18 BOXCHAR C 1 画框字符
 19 FILLCHAR C 1 表达式类型(C,N,D等,文字型的为空)
 20 TAG M 10 (当该记录为记录环境的记录时,该字段储存打印信息等;记录数据库 时,储存数据库名称)
 21 TAG2  M 10  当该记录为记录环境的记录时,该字段储存打印控制等
 22 PENRED N 5 前景红
 23 PENGREEN N 5 前景绿
 24 PENBLUE N 5 前景蓝
 25 FILLRED N 5 填充红
 26 FILLGREEN N 5 填充绿
 27 FILLBLUE N 5 填充蓝
 28 PENSIZE N 5 划线宽度
 29 PENPAT  N 5 指定填充图案(0.空;1.实体;2.水平;3.垂线;4.左斜;5右斜;6.交 叉;7.斜交叉)
 30 FILLPAT N 5 划线类型(0.无;1.点;2.虚线;3. 虚线-点;4. 虚线-点-点)
 31 FONTFACE M  10 字体类型
 32 FONTSTYLE N 3 字体风格
 33 FONTSIZE N 3 字体大小
 34 MODE  N 3 模式
 35 RULER  N 1 标尺(2-默认值,3-象素)
 36 RULERLINES N  1 标线宽度
 37 GRID L 1 是否显示网格线
 38 GRIDV N 2 垂直网格线刻度
 39 GRIDH N 2 水平网格线刻度
 40 FLOAT L 1 浮动
 41 STRETCH L 1 溢出时伸展
 42 STRETCHTOP L 1 相对于顶端伸展
 43 TOP L 1 相对于顶端固定
 44 BOTTOM L 1 相对于底端固定
 45 SUPTYPE N 1 控制类型
 46 SUPREST N 1 控制设置
 47 NOREPEAT L 1 每页都打印页标题
 48 RESETRPT N 2 重置报表
 49 PAGEBREAK L 1 每组从新的一页开始
 50 COLBREAK L 1 从新的一列开始
 51 RESETPAGE L 1 每组页号重新从1开始
 52 GENERAL N 3 通用
 53 SPACING N 3 空格
 54 DOUBLE L 1 是否加倍
 55 SWAPHEADER L 1 头互换
 56 SWAPFOOTER L 1 脚注互换
 57 EJECTBEFOR L 1 打印前走纸
 58 EJECTAFTER L 1 打印后走纸
 59 PLAIN  L 1 指定只在报表开始位置出现页标题
 60 SUMMARY  L 1 是否仅打印总计和分类总计信息
 61 ADDALIAS L 1 是否增加别名
 62 OFFSET N 3 偏移(0-左;1-右;2-居中)
 63 TOPMARGIN N 3 上边界高度
 64 BOTMARGIN N 3 下边界高度
 65 TOTALTYPE N 2 计算类型
 66 RESETTOTAL N 2 重置(1-表尾,2-页尾)
 67 RESOID N 3 源标识
 68 CURPOS L 1 是否显示当前位置
 69 SUPALWAYS L 1 是否打印重复值
 70 SUPOVFLOW L 1 当细节区数据溢出时到新页或新列打印
 71 SUPRPCOL  N 1 当此列改变时打印
 72 SUPGROUP  N 2 当此组改变时打印
 73 SUPVALCHNG L 1 若空行则删除
 74 SUPEXPR M 10 是否打印控制条件
 
 4、常用控制对象的特征
 报表数据库的字段objtype(对象类型)和objcode(对象代码)的值确定了控制对象 的类型。为节省篇幅仅把最常用制表控制象(文字,直线,表达式等)的特征值列入 下表:
 
 Objtype Objcode offset
 含义 5 0
 文字 8 0
 表达式  6 0 1
 直线(水平线) 6 0 0
 直线(垂直线) 7 4
 矩形框(0~99椭圆)
 
 用于报表布局的控制的特征值列入下表:
 Objtype Objcode 
 含义 9 0
 页头高度 9 1
 页细节高度 9 3
 组标头高度 9 4
 组细节高度 9 5
 组脚注高度 9 7
 页脚注高度
 
 
 
 其他常用到的字段有:①水平坐标(Hpos);②宽度(Width);③表达式类型(Fill char);④字体(Fontface); ⑤对齐方式(Offset)。
 
 
 
 5、动态报表的实现
 从数据库中自动读取字段名、类型、宽度,通过修改报表库(.FRX)的内容达到动 态制表的目的,其算法设计如下:
 ① 栏目宽度:取栏目标题与表达式宽度的最大者,Wi=MAX(Li,Hi), 其中Wi, Li,Hi分别表示栏目宽度、标题宽度、表达式宽度;
 ②总宽度:Width =
 
 不同的设计人员所采取的方法步骤可能不同,我们仅给出一种设计的思路:
 ① 使用快速报表制作一个简易模板,打开其报表结构库,内容如下图所示。
 ② 分别把“布局部分”、“主体部分”和“环境部分”复制到三个数据表中;
  ③ 从欲打印的数据表中自动读取字段名、类型、宽度,根据以上提供的算法修改 “主体部分”数据表的相应的字段内容;
 ④ 使用APPEND FROM 命令重新把“布局部分”、“主体部分”和“环境部分”三 个数据表连接到一个新的数据表中,该新表为欲打印的数据表的报表数据库;
 ⑤ 使用报表命令,实现的报表控制输出:予览、打印及送入文件。
 
 6、结束语 
 本文在分析研究FOXPRO报表数据库的基础上,实现了管理信息系统中的通用动态 制表问题。利用系统的强大功能,加以扩充生成新功能的设计有助于软件的维护 和标准化,利用类似的方法可以实现动态屏幕布局等,该问题将另文介绍。
 由于缺少这方面的资料,不当之处望批评指正。
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.108.69]
  | 
 
 
 |