起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 2708|回复: 58

网格打印需求(如能实现,一切中国式报表都将easy)**

[复制链接]
发表于 2006-6-17 16:20:23 | 显示全部楼层 |阅读模式
目前,我做了一个报表设计功能:将出报表时用到的SQL语句全部放在数据库中(复杂报表需多条SQL语句才能实现时,支持多SQL语句分步解析执行),最终一条SQL解析执行后即得报表数据集,动态绑定到数据网格。如能在网格打印上加强一下,即可在满足用户的查询统计需求的同时,又能满足中国人对报表打印的需求。
    一个系统一旦成功运行之后,后续的软件开发量几乎都集中在查询及报表开发上,如能实现我的上述需求(特别是打印需求),实施人员、或懂SQL语句的企业维护人员(前提是熟悉数据字典)都可不用二次开发,光用SQL语句就能快速响应用户在查询统计及报表上的需求。
    现在,我用上述方法,仅用一个“我的报表”功能(界面)就淘汰了老系统中的所有报表及所有查询(总计150多个菜单),这些工作都由一个实施人员(该人从来没有用DELPHI开发过程序,但对SQL语句比较熟悉)完成,全部满足用户对数据显示方面的需求,只是在网格打印效果上有些欠缺(导致查询及打印报表功能要分开做,这时就不得不劳驾DELPHI的开发人员新做功能了)。
   
    鉴于10多年的MIS实践需求,希望网格打印时能做到以下需求:
一、针对有网格页脚合计设置的网格打印:
    在预览和打印时实现页合计及页累计(例给个选项,0:只需在最后一页打印(缺省),1:每页只要合计,2:每页只要累计,3:页合计及页累计都要);

再加一点需求:能设置数据记录在每一页的打印行数(例30行(合计累计行除外),最后一页不满30行时用空行填充,行号每一页都打印成 1,2,3...30;这样的报表很适合中国人的传统胃口
      
二、打印格式化数字的问题:
    网格中显示的是有千分符的数字,但在预览及打印时就没了;
    '''第''+CAST(PageNumber() AS VARCHAR)+''页、共''+CAST(PageCount() AS VARCHAR)+''页''' 中PageCount() 不管用。
   

针对一的问题,暂时不急解决(希望加油解决);
针对二的问题希望尽快解决!
回复

使用道具 举报

 楼主| 发表于 2006-6-19 09:54:31 | 显示全部楼层
UP 又有一个不如意的地方:网格中的数据设置了 千分符,在预览/打印时就没有,希望尽快解决!
回复 支持 反对

使用道具 举报

发表于 2006-6-19 09:57:51 | 显示全部楼层
已经作为需求提交
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-22 15:26:25 | 显示全部楼层
问题1、千分符号打印问题,何时能解决,这关系到中国人的习惯问题?用户急要。

问题2、网格列标题有许多汉字时的自动换行的属性在哪里设置?
回复 支持 反对

使用道具 举报

发表于 2006-6-23 11:45:34 | 显示全部楼层
1.已经在另外一帖中说明。
2.HeaderMinRowCount
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-23 13:38:47 | 显示全部楼层
另外,你上次说,做个用代码写页眉页脚的 样例给我,这部门代码能写给我参考吗?
回复 支持 反对

使用道具 举报

发表于 2006-6-23 13:49:06 | 显示全部楼层
代码控制页眉页脚有些问题,已经提交给相关部门处理。后续版本完善。
对此给您带来的不便请谅解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-23 21:10:35 | 显示全部楼层
请问设置了,HeaderMinRowCount=5 后,如何使列标题垂直居中? 另外你们的网格预览老是出现 以下如图错误

注意,我的挂接事件中有这样一段代码控制 页头及尾:
    ASheet.Areas[0].Top := ASheet.Areas[0].Top - lCaptionRows;
    ASheet.Areas[0].Bottom := ASheet.Areas[0].Bottom + 1 + lFooterRows; //2
    ASheet.Areas[0].PageHeaderRows := 2 + lCaptionRows;
    ASheet.Areas[0].PageFooterRows := 1 + lFooterRows;  //2

以上我注释掉的//2是你上次做了个 两层的 死报表给我的样例,请用动态变量lCaptionRows 及lFooterRows 给个精确的代码给我。

此代码针对1行标题的有问题,请给出一个精确的代码(其中 lCaptionRows为标题行数,lFooterRows为GRID合计行,现在肯定为0)!!!

errorprint.rar

71.98 KB, 下载次数: 78

回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-23 23:25:46 | 显示全部楼层
针对已经有多层复合标题由类似以下代码形成:
FIELD[0].CAPTION = '存货名称及规格';  
FIELD[1].CAPTION=入库|数量 ;
FIELD[2].CAPTION=入库|数量;  
此网格, 设置 HeaderMinRowCount=2 后,FIELD[0].的列标题就 靠顶部了,如何使其垂直居中?
同时此时设置了2之后, 由 | 形成的 多层行 都 变成了 * 2 行的高度,这样太难看了,希望
修正成 HeaderMinRowCount=2  时如果 有复合标题...最好跟 EHGRID一样,列标题全自动换行。 希望别让我失望!

或者 针对有复合标题的 即便 HeaderMinRowCount=1 也能自动换行。

总结一下,问题有2:
1、列标题如何使其垂直居中?
2、列标题 即便 HeaderMinRowCount=1 也能自动换行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-24 16:10:48 | 显示全部楼层
总结一下,目前有如下三个问题急需解决:
1、设置了HeaderMinRowCount = n (n > 1)后, 如何使列标题垂直居中?
2、列标题 即便 HeaderMinRowCount=1 也要能自动换行,否则在设置了HeaderMinRowCount = n (n > 1)后,由 |  形成的多层(假设有m 层)标题 会变成 m * n 行的高度,太难看了;
3、如果 HeaderMinRowCount = n,由 |  形成的m 层 标题,那么以下代码如何写成动态的?
注意,我的挂接事件中有这样一段代码控制 页头及尾:
  ASheet.Areas[0].Top := ASheet.Areas[0].Top - 。。。;
    ASheet.Areas[0].Bottom := ASheet.Areas[0].Bottom + 1 + lFooterRows; //2
    ASheet.Areas[0].PageHeaderRows := 2 + 。。。;
    ASheet.Areas[0].PageFooterRows := 1 + lFooterRows;  //2

问题3最急需,希望能写精确并通过测试后回复给我,THANKS
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-24 20:31 , Processed in 0.042658 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表