捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
在程序中使用代码生成动态FastReport报表
关键字:FastReport FR 动态生成报表 动态栏位
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:高级 完成时间:2006/6/17
发布者:jasonmale 发布时间:2006/6/17
编辑器:DELPHI7 语  种:简体中文
分 类:组件 下载浏览:8221/37462
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
潜水很久,在网上很难找到动态生成报表的例子。包括FR(或QR)都是用已设置好的报表文件来显示数据报表,然而在实际应用中,一般项目包括太多的报表,90%的报表都是列表或分组报表形式,部分特殊报表再可以根据相应条件来处理。所以需要建立 一个公共报表处理模块来动态生成报表系统。这对于一个大型项目来说是必要的,并且任何项目也可以共用 。
本人以前使用QUICKREPORT做过这方面的报表,现在正在研究FR的功能,所以用FR3X做了一个例子,此例子在我机器上已通过(我是使用包的概念,没法给小的例子给大家),发给大家只是核心部分不是很清晰的代码(刚刚做好的,并非最终版本),相信高手是能看懂的(怎么看懂?猜呀,不好意思,没时间好好整理的)!
我理解动态报表的意思:后台有一个table来控制系统设置,比如打印机,页面等设置信息。另有表来保存打印的栏位设置信息。动态报表就是根据这些设置信息在Page页面上自动建立OBJECT,并设置数据联接系统,然后自动生成报表文件。至于取数据的处理,是由调用者处理生成的(调用者可以使用临时表,也可QUERY,并根据打印栏位信息生成)

此程序调用:先调用gPrepareRptData方面取得数据查询条件的SQL,也可以不要生成条件,但要调用先,因为此代码中有处理报表的内容(这种处理不太方便,以后再修改了),然后调用gShowListReport就OK了。

好了,做技术太久,一般不太会写文字。有这方面意见或建议或探讨方面的朋友可以给我发EMAIL:jasonmale@sina.com.cn. QQ:115760681(不会聊天)
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
FastReport 调用封装
huage600 2006/7/25 下+5870/浏+22176 评+6
在程序中使用代码生成动态FastReport报表
jasonmale 2006/6/17 下+8221/浏+37463 评+5
FastReport v2.4开发指南 PDF版
leoruby 2006/4/27 下+7476/浏+21848 评+0
FastReport 数据库字段动态打印演示
Runhorse 2006/2/5 下+5307/浏+23442 评+7
FastReport 3.18版For Delphi7安装笔记
robot5 2005/11/5 下+1/浏+29554 评+10
FastReport v3.X 中文换行修改文件
register 2005/9/30 下+1915/浏+22266 评+9
运行时设计FastReport的Frf格式文件的工具…
codemyth 2005/6/27 下+7922/浏+42716 评+4
FastReport 3 简体中文开发手册 (PDF教程)
xpro 2005/6/21 下+19686/浏+57512 评+12
动态打印所选字段演示程序
yang_huafeng 2005/5/12 下+4523/浏+20196 评+6
FastReport 3 程序设计师手冊清爽版
xj307 2005/2/28 下+10824/浏+31126 评+14
FastReport 3 程式設計師手冊
mygod007 2005/2/26 下+5159/浏+20724 评+9
菜鸟级 FastReport v3.07 修改中文版
redbase 2005/2/2 下+5809/浏+30780 评+5
用Fastreport做的报表演示程序
luotao929 2005/1/26 下+11325/浏+28371 评+8
FastReport v3.09 Professional Fix 版
bral 2005/1/23 下+9059/浏+34262 评+72
FastReport v3.07 汉化文件
Keyboard 2004/12/30 下+2390/浏+18332 评+5
FastReport Enterprise v3.07 零售版
mosir 2004/12/20 下+6522/浏+30089 评+42
FastReport v3.05 Enterprise Edition For…
moyaya 2004/12/8 下+13274/浏+30462 评+32
FastReport v3.05 企业版 汉化文件
moyaya 2004/12/4 下+3311/浏+21743 评+8
Web中使用Fastreport在ActiveX调用打印例子
last_exile 2004/11/29 下+7071/浏+32380 评+18
FastReport Professional v3.03 FS For D5-…
robornet 2004/11/21 下+5966/浏+26126 评+15
FastReport v3.02 汉化单元 by vivee_nj
vivee_nj 2004/9/16 下+786/浏+16392 评+17
FastReport Professional v3.0 Full Source
lhc4000 2004/9/15 下+5957/浏+26216 评+24
FastReport v2.53 Full Source (报表)
mosir 2004/7/14 下+7914/浏+27822 评+22
FastReport 自定义预览打印窗口
mygod007 2004/6/17 下+3079/浏+26191 评+8
FastReport v2.52 With FireRose 简体中文修…
firerose 2004/5/26 下+4364/浏+25405 评+24
FastReport v2.52 Full Source (报表)
jemsn 2004/5/10 下+4076/浏+23578 评+22
FastReport 2.51 For D2-7/CB2-6
jemsn 2004/3/5 下+2824/浏+19519 评+12
动态改变FastReport内Memo的内容的演示
renwang 2003/12/21 下+2370/浏+20995 评+1
FastReport 直接打印演示代码
renwang 2003/12/14 下+3440/浏+27076 评+8
FastReport 2.5 简体中文注册版 (报表控件)
sephil 2003/9/24 下+9593/浏+49198 评+43
支持D6的FastReport2.45 (报表控件)
Another 2003/9/1 下+4521/浏+29766 评+6
FastReport v2.4开发指南
30896186 2003/9/1 下+4285/浏+26232 评+2
相关评论
共有评论5条 当前显示最后5条评论
extraself 2006/6/19 9:39:19
搞个能用的上来呀!另外,FR3X 到底是哪个版本.
jasonmale 2006/6/20 8:48:03
此代码是给对FR有一定了解的人参考用,如果给各位现成的完整的例子,一方面我整理起来有点麻烦,另一方面也没时间。何况这也不是好事,相信对FR有研究的人会有一定的帮助(如何做报表公共处理部分),我使用的FR是3.17版本,此版本还有比较多的问题,下面是我列出的报表设置信息参数:
type
    pRcGrdInfo = ^rcGrdInfo;
    rcGrdInfo = record
      //master 
      sKeyID         :String;// ID
      sDesc          :String;
      isHasRpt       :Boolean;
      sRptID         :String;  //报表ID
      isHasFmtRpt     :Boolean;
      isTextFmtPrint  :Boolean; //是否文本格式化打印
      sFmtRptFile  :String; //所在格式档文件
      sReturnFdMain  :String;
      sReturnFdSecond:String;
      sWhereSql      :String;
      isMulPage      :Boolean; //是否分页显示数据
      isShowSum      :Boolean; //是否显示合计栏
      isDistinct     :Boolean; //相同记录是否显示
      isUserDefine   :Boolean; //速查或者报表是用户自定义的
      cTypeOfServer  :Char;    //连接服务器类型

      sModuleID      :String; //此查询或报表所在模块
      //明细列内容
      iLineNo        :Integer; //显示顺序
      iColNo        :Integer; //所在列号
      iRowNo         :Integer; //所在行,为二维表服务
      sTbname        :String;//表
      sFdName        :String;// 对应字段名
      isHasTopTitle  :Boolean; //是否有主标题
      sColTopTitle  :String;//原
      sColtitle      :String;//标题

      isVisible          :Boolean;
      isAllwaysVisible    :Boolean;
      isNotAllwaysVisible :Boolean;

     // sVisible      :String;//是否显示
      {0或空不显示,'1'和'9'显示(9表示永远显示,用户无权修改显示属性。
      ,8永远不显示,但数据需要取出来,并且对用户来说不能看见)}
      sShowFmt      :String;//显示格式
      iPrecision    :Integer;//小数点位数
      iPreSpaces      :Integer ; // 前加空格数量
      //isAutoFixWidth :Boolean;   //自动加宽
      //iswordwrap  :Boolean;         //折行
      //isAutoFixedLittleFont :Boolean;     //变小字体适应宽度
      isSuppressRepeated    :Boolean;     //重复值不打印

      isCanUpdate    :Boolean;
      iMaxLength     :Integer;
      isAllwaysCanUpdate :boolean;
      isNotAllwaysCanUpdate :Boolean;
      //sCanUpdate    :String;//是否可编辑
      {0或空:不可修改。'1'和'9'(9表示永远允许更新,8永远不可以更新,仅仅显示出来)}
      isChinese      :Boolean;//是否中文输入
      isKeyField    :Boolean;//决定唯一性的关键字
      isCanNotEmpty  :Boolean;//必须输入字段
      isSum          :Boolean;// 是否需合计
      isSortKey      :Boolean;//是否排序
      isSortAsc      :Boolean;//排序是否升序
      isPrintCol     :Boolean;//是否打印
      isGroup        :Boolean;//是否为分组    {9:主分组,1组头,0:不是}
      isMainGroup    :Boolean;
      iInputType    :Integer; //输入类型
      {0 普通字符串 1. 按钮速查类2.日期3. 时间 4: 整数类型 5 数值类型
      6 .Combox类型 7:Checkbox }
      iDataType      :Integer; //数据类型
      {-1,自行处理,0 字符串 1 日期 2 时间,3日期时间 4:逻辑型 5:表达式(后台计算字段)
      6:虚拟字段(前台计算字段)7, 整数 8 数量 9 单价 10 成本
       11 金额 12税率 13:合计}
      sExpression    :String ; //表达式
      sQKViewID      :String; // 对应速查ID
      iWidth        :Integer; //宽度
      sAligentTypeH  :String ;// 横向对方方式  (0:taLeftJustify, 1 taCenter, 2 taRightJustify, )
      sAligentTypeV  :String; // 纵向对方方式  (0 vtaTop,1 vtaCenter,2 vtaBottom)
      sFontName      :String; //字体名
      iFontSize      :Integer; //大小
      sFontStyle    :String; //类型
      iFontColor    :Integer; //颜色
      sHint          :String; //提示信息

      fTotal         :Double;
  end;
  {报表打印设置信息}
  Type
     rcPrintSet = record
        sRptID           :String; //报表内定名ID
        sRptTitle           :String; //varchar(120) 报表标题
        sSubTitle           :String ; //Varchar(120) 副标题
        sPageHeaderLeft     :String ; // Varchar(80) 左边页眉
        sPageHeaderCenter   :String ; //Varchar(80) 中间页眉
        sPageHeaderRight   :String ; //Varchar(80) 右边页眉
        sPageFooterLeft     :String ; //Varchar(80) 左边页脚
        sPageFooterCenter   :String ; //Varchar(80) 中间页脚
        sPageFooterRight   :String ; //Varchar(80) 右边页脚
        sRptEnd           :String ; //Varchar(120) 表尾

        isPrintTitlePerPage :Boolean;//Bit 每页都打印标题
        IsPrintFixedColPerPage:Boolean; // BIT 每页都打印栏头

        Isprintlogo         :Boolean; //Bit 是否打印公司标示
        IsHasHLine         :Boolean; //Bit 报表网格线标志
        IsHasVLine         :Boolean; //Bit 报表网格线标志
        IsShowZero         :Boolean; // Bit 数据为零是否显示
        IsPrintPageHeader   :Boolean; //Bit 是否打印页眉
        IsPrintRptEnd       :Boolean; //Bit 是否打印表尾
        IsPrintRptCondition :Boolean; // Bit 是否打印查询条件
        IsPrintPageFooter   :Boolean; //Bit 是否打印页脚
        IsCenterPageH       :Boolean; //Bit 水平是否居中打印
        IsCenterPageV       :Boolean; //Bit 垂直是否居中打印
        Is3DFixedCol       :Boolean; //Bit 是否打印3d 表头
       // IsAutoFixWidth     :Boolean; //Bit 是否自动适应列宽
        IsPrintToNextPage   :Boolean; //Bit 第一页打印不完时,是否转到下一页打印
        IsCollateCopies     :Boolean; //Bit 逐份打印
        IsColToRow         :Boolean; //Bit 行列是否转换
        IsNewPageByGrp     :Boolean; //Bit 打印时是否每组起新页
        isPrintWithGrp      :Boolean;// 允许分组打印
//        IsPrintAllGrp       :Boolean; //Bit 是否列印所有组
        IsPrintFixedColPerGrp :Boolean; //Bit 每组都打印栏头
        IsPrintGrpHeaderNextPage :Boolean; //Bit 跨页显示组头     
//        iGrpBegin           :integer ;//打印起始组
//        iGrpEnd           :integer ;//integer 打印终止组
        IprintRowsPerPage   :integer ;//Integer 每页打印记录数
        IsDlgWhenToPrint   :Boolean; //Bit 打印前是否显示设置
        sPrintName         :String; //varchar(100) 打印机名
        isPortrait         :Boolean;//Bit 是否纵向打印

        isPrintCover        :Boolean; //是否打印封面页
        sCoverFile          :String;
        isDotMatrix         :Boolean;      //点阵打印机
        iDuplex          :Integer ; //双面打印  0:无,1:纵向双面,2:横向双面,3:单一双面
        isConvertNull       :Boolean; //是否自动转换NULL值
        isDoublePass        :Boolean; //是否先预处理总页数
        isUserFileCache     :Boolean; //是否把报表内容存入缓冲文件
        isPrintIfEmpty      :Boolean; //报表为空时是否打印
        isDoubleBuffered    :Boolean; //采用双缓冲模式预览报表
        iColumns          :Integer ; //报表分栏打印,默认为0
        isPageHeaderLine    :Boolean; //页眉打印下划线
        isPageFooterLine    :Boolean; //页脚打印上划线
        isPHPrintOnFirstPage:Boolean; //页眉首页打印
        isPFPrintOnFirstPage:Boolean; // 页脚首页打印
        isPFPrintOnLastPage :Boolean; // 页脚最后一页打印
        isPrintRptBegin     :Boolean; //是否打印表头
        sRptBegin          :String; //表头条文 string 120
        isColStretch        :Boolean;//栏对象自动扩充行高否
        iTextFixedType      :Integer; //文体栏位的处理:0:折行 1:缩小字体以适应宽度 ,2截断字以填充.3 超界打印
        isPrintGrpSummary   :Boolean; //打印分组小计
        isPrintSummary      :Boolean; //打印报表总计
        iPageType           :integer ;//Integer 纸张类型
        fPageHeight         :double ;//integer 打印高度
        fPageWidth         :double ;//integer 打印宽度
        fRowHeight         :double ;//integer 行高
        fRowSpace           :double ;//Integer 行间距
        fColSpace           :double ;//Integer 列间距
        fLeft           :double ;//Integer 页面左边距
        fRight           :double ;//Integer 页面右边距
        fTop           :double ;//Integer 页面顶边距
        fBottom           :double ;//Integer 页面底边距
        iCopies           :Integer ;//Integer 打印份数
        sTitleFontName      :String   ;// varchar(20) 表标题字体名
        iTitleFontSize     :integer ;//integer 表标题字大小
        STitleFontStyle     :String   ;//varchar(4) 表标题字类型
        iTitleFontColor     :integer ;//Integer 表标题字颜色
        sFixedColFontName     :String   ;//varchar(20) 列头字体名
        iFixedColFontSize     :integer ;//Integer 列头大小
        sFixedColFontStyle   :String   ;//varchar(4) 列头类型
        iFixedColFontColor     :integer ;//Integer 列头颜色
        sFooterFontName     :String   ;//varchar(20) 页头(尾)字体名
        iFooterFontSize     :integer ;//Integer 页头(尾)字体大小
        sFooterFontStyle   :String   ;//varchar(4) 页头(尾)字类型
        iFooterFontColor   :integer ;//Integer 页头(尾)文字颜色
  end;
另外代码中会使用很多frxClass中的资源,其它一些函数是公共函数:如gSetObjectFontAttribute是设置一个对象字体属性。本报表处理程序中并未处理特殊显示格式,处理显示格式有两种方面:1。在BAND的BEFOREPRINT中写事情(我个人不建议),2。在DATASET的GETTEXT事件中写,我采用第2种(比如Boolean或字段中单据类型的显示内容)。其实调用者在调用报表时需传入调用者的一些函数,主要处理栏位属性中一些非后台数据字段的处理,如虚拟字段如何显示。这些方面有报表公共部分定义格式,调用者自己编写,然后传入,报表公共处理部分会把些方面放在dataset的gettext事件中
xiong81 2006/6/23 11:15:11
不能用,安装的Fr是哪个版本,为什么我装完控件以后,还会出现有很多没见过的控件要我安装,是不是版主没有把全部的代码共享出来?????
w3k 2006/7/6 16:31:02
作者只提供了动态生成FR报表部分代码及思想
请作者可否提供该报表的完整代码呢?
zhqian 2009/9/21 10:13:15
发个完一版本上来啊,你这个只是一个单元文件用处不大..........
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表