Archive for 01月, 2010

下拉菜单多选参数查询

01.31.2010 by hewei - 2 Comments - 0
Posted in web相关技术

快逸报表的下拉菜单功能可以很方便用在参数模板中,供报表浏览者轻松准确的选择需要的参数进行查询,但是默认的查询参数只能选择一个值如下图:

快逸报表下拉菜单多选的参数传递单选1.png

如果想要选择多个值就需要另外进行设置。本文就来介绍一下快逸报表是怎样利用下拉菜单进行多选查询的。
首先进行报表的设计:

22.PNG

第一步:增加数据集
ds1.SELECT EMPLOYEE.EMPID,EMPLOYEE.EMPNAME,EMPLOYEE.BIRTHDAY,EMPLOYEE.SEX,EMPLOYEE.DEGREE,EMPLOYEE.BONUS
FROM EMPLOYEE
ds2: SELECT DEGREE.ID,DEGREE.NAME FROM DEGREE

第二步:定义表达式
1、将A3单元格表达式修改为:=ds1.Select(int(EMPID),false)
该表达式是将字符串型的EMPID转换成整数,再做排序操作。
2、设置C3单元格的显示格式为:yyyy年MM月dd日
3、设置F3单元格的显示格式为:¥#0.00
4、设置D3的显示值为:map(list(”1″,”2″),list(”男”,”女”))
5、设置E3的显示值为:ds2.select1(name,id==value()),
6、设置E4为”统计时间:”,F5的值为=now(),F6()值为”第”+pno()+”页”。

第三步:添加参数

在报表中配置选项中添加参数,用来接收参数模板传过来的参数,参数名称为arg1,类型为字符串组。
进入到设计数据集的部分,其中的检索条件设置为DEGREE in (?) or ? is null,之后在参数标签中添加两个参数,其中两个参数的表达式的写法是第一个参数表达式为arg1,第二个参数表达式为str(arg1)格式如下:

快逸报表下拉菜单多选的参数传递参数设计3

然后设计参数模板,具体的设计方法如下:

66.PNG

C2单元格填报属性设置为下拉列表框,并在该单元格的web属性的变量名中填写与报表文件对应参数名称,这里填写为arg1:列表框数据如下图所示:

44.PNG

注意,一定要选择 允许多选和增强控件两个选项,否则无法进行多选。
这样报表就设计完了
发布到web,报表可以进行多选,点击查询得到查询结果,如下图:

77.PNG

这样,就在下拉菜单里完成了多选的查询,如果用户想在下拉数据集里进行多选查询的话,将模板的参数下拉菜单改为下拉数据集,然后在设置中除了添加显示列和数据列之外同样勾选上允许多选和增强控件,其他设计方法参照本例即可,就能实现下拉数据集的多选查询。

原文链接:下拉菜单多选参数查询

单元格中用HTML控制显示个性化文字

01.30.2010 by hewei - 1 Comment - 0
Posted in web报表

快逸报表单元格中的文字展现效果基本上可以满足大部分展示需求,但是有时候web报表用户需要在单元格中显示一些个性文字,如文字翻转等,这样的文字就需要做一些特殊处理,本文就来介绍一下怎样实现在单元格中显示个性化文字。 、

实现思路:
个性化文字通常是通过一些css以及html语言来对文字进行修饰而来的,只要能把这些html加载到单元格中就可以实现显示个性化文字了。

下面根据思路来做一个个性化文字的例子–文字翻转,实现步骤如下:
新建一张普通报表,在A1单元格中我们使用快逸中默认的文字。
在A2单元格鼠标右键,将数据类型转成HTML类型,在文本里输入修饰字体的HTML语言,如下图:

快逸报表html格式设计.PNG

这里使用的是div的方式:
< div style=”FILTER:progid:DXImageTransform.Microsoft.BasicImage(Rotation=1);height:1px”>
快逸报表V4
< /div>
其中style这段代码是用来对字体进行反转操作,Rotation=1代表顺时针转九十度。(这样的HTML代码还有很多)。还可以通过 来设定字体的颜色大小等属性。
需要注意的是单元格数据类型为HTML时,尺寸调整方式无效,这是要手动调整单元格的高宽来适应文字显示。
加入HTML后的文字效果如下:

快逸报表单元格中使用html效果.PNG

就这么简单的就可以实现个性化文字的需求了。通过在单元格中嵌入HTML语言,可以使很多web报表用户通过强大的HTML语言对文字数据进行一些个性化的处理,达到更好的效果。

原文链接:单元格中用HTML控制显示个性化文字

Web报表单元格内容竖排显示的制作方法

01.29.2010 by hewei - 3 Comments - 0
Posted in web报表

需求说明
普通报表常常需要将文字从纵向方向竖着排列,Web报表自然也不例外有这个需求。
快逸报表单元格的内容默认情况下是横向显示的,如何实现竖排显示单元格内容呢,下面介绍两种制作方法。

一.宽度限制加自动换行

大致思路:将该单元格内容居中显示,并设置单元格的宽度使每行只能显示一个字,然后设置自动换行,就可以实现单元格内容竖排显示了。
新建一个空白报表,然后内建一个数据集,内建数据集的内容如下

Web报表单元格内容竖排显示的制作方法1.png

然后在单元格中输入:
A1: 编号
A2:案卷题名
B1:=ds1.select(案卷_档号)
B2:=ds1.案卷_案卷题名
把没有用到的单元格删除掉。
设置B1的扩展方向为”横向扩展”

Web报表单元格内容竖排显示的制作方法2.png

现在报表已经做好了,浏览报表,单元格的内容是横向显示的。如下图

Web报表单元格内容竖排显示的制作方法3.png

下面添加竖排显示的功能:
设置A、B列的宽度为8,使每列只能显示一个汉字。实际运用中的具体宽度要根据字体具体大小算出。

Web报表单元格内容竖排显示的制作方法4.png

勾选上A1、A2、B2单元格的”自动换行”,使每行只能显示一个汉字

Web报表单元格内容竖排显示的制作方法5.png

设置完成,发布报表,在IE中浏览报表,效果图如下

Web报表单元格内容竖排显示的制作方法6.png

二.缩进控制加自动换行


方法一只能把列的宽度设置的很小,可以一行显示一个汉字;如果把列的宽度加宽,就不会出现上图中的效果。如果要把列的宽度设置的比较宽,一行又只能显示一个字,该怎么制作呢。
大致思路:将该单元格内容居中显示, 调整单元格的缩进值,然后勾选上”自动换行”属性,就可以在比较宽的列中实现单元格内容竖排显示了。
这种制作方法和上面的方法基本上一样,现在就用上面做好的报表,把B列的宽度改为25,然后设置B2单元格的缩进值为10,如下图:

Web报表单元格内容竖排显示的制作方法7.png

设置完成,保存报表,然后在IE中浏览报表,效果图如下:

Web报表单元格内容竖排显示的制作方法8.png

从上面的两种效果图可以看出,第一种不能加宽列的宽度,第二种方法可以调整列的宽度。以后遇到类似的需求就可以用上面的方法实现了。

原文链接:Web报表单元格内容竖排显示的制作方法

关于报表基础知识

01.28.2010 by hewei - 1 Comment - 0
Posted in web报表

什么是报表

一提起报表,人们最经常联想到的就是财务报表,象资产负债表、现金流量表、报销单等。其实除了财务报表,工作生活里还有很多报表,比如课程表、成绩表、员工登记表、工资表、物料登记单,银行记账单、手机话费单等等,各行业中的业务报表更是数不胜数。那么,什么是报表?

报表就是将内容信息(一般是数据、文字、图片等)以某种形式组织起来,并将组织结果呈现出来的文件。

对中国用户而言,凡是能打印出来的都可以叫报表。

什么是报表软件

顾名思义,报表软件就是用来制作报表的系统工具,目的是使做表工作简单化,提高总体工作效率。

报表软件有什么用?

报表软件可以帮助用户快速开发出自己想要的报表。这里的用户主要是指企业级用户市场,是除个人桌面级应用以外的市场。

企业级的用户一般有这么几个特征:
(1)应用复杂。企业级用户因为所处行业以及业务的不同,其应用软件涉及到财务、人员、物料、生产等各环节;
(2)数据量大,因为日常的业务往来会产生大量的生产数据;
(3)报表多且种类不同,处于不同生产环节上的人对报表有不同程度的要求。

专业的报表工具可以帮助企业级用户迅速定制出业务需要的报表。

将数据库操作封装到Javabean

01.27.2010 by hewei - 3 Comments - 0
Posted in web报表

封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。

   但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了。

   1. 又是直接操作核心数据库类,跟封装前几乎没什么变化。

   2. 结果集总是依赖于它使用的连接(Connection)对象。因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了。

   如果真的要获得查询数据库的结果集,就把结果集对象内的所有数据,转储到以Map为元素的List对象内。

   当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))

   下面是简单的数据库操作Javabean的代码

   DbWrapper.java

   import java.sql.*;

   import java.util.*;

   public class DbWrapper

   {

   // 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。

   private static DataSource ds = null;

   // 1.用连接池的方式获得连接

   // 如果不是做多数据库程序,推荐使用此方法

   // 相关内容:在tomcat管理界面配置连接池

动态行的自动计算

01.26.2010 by hewei - 2 Comments - 0
Posted in web报表

随着B/S方式应用的普及,数据填报也逐渐转移到了网页上进行。数据录入最常见的需求之一就是动态增删行与自动计算。

所谓的动态增删行,即用户录入的过程中可以删除一些已有的行,也可以添加一些新的行,新的行和已有的行除数据外别的属性基本完全相似。

所谓自动计算,是指根据用户录入的某些单元格的值,自动计算出另外一些单元格的值,从而简化用户的输入,同时避免错误数据的录入。

因此,对于可以增加删除行的填报表,同样存在自动计算的问题。新增加的行如何添加到自动计算表达式中,比如sum\count等;已经删除的行如何从自动计算表达式中去掉?

在传统的C/S模式下,增删行的自动计算问题实现较为容易,采用通行的算法(在大多数数据结构教程中都有介绍)编写表达式计算程序来分析处理表达 式,在取单元格时根据当前环境从某逻辑行中取出数据参与运算即可(著名开发工具PowerBuilder中的Datawindow即是这样实现的)。

但是,在HTML页面上完成同样的工作则要困难得多。在纯HTML页面上通行的编程技术只有解释执行的JavaScript语言(以下简称JS)。 理论上采用JS编写表达式计算程序仍然可行,但实践中却会因JS效率过于低下而无法实用;同时由于JS语言本身能力较弱,写出这种复杂功能程序的代码量会 相当大,导致页面过于庞大而不利于下载。因此,在实际应用中不可能在纯HTML页面上实施上面的思路。

所幸的是,JS中固化了一个eval函数可用于计算表达式。但eval计算的表达式中只能出现事先定义过的JS变量或函数,而不能由程序员自行编写重载代码动态地取出某逻辑行的单元格值。

在这种限制下,采用静态报表方案可以有限地解决HTML页面上的表达式计算问题。即在报表发布成HTML之前,由后台程序为所有逻辑行生成由发布后 报表上静态单元格构成的表达式,其中统计表达式都分解成发布后报表上单个单元格的运算。这样,在HTML页面上执行eval函数时将不会再出现未定义的变 量(单元格)从而可以完成计算。

但是,这种方案不允许报表在填写过程中再插入或删除行。新增逻辑行上的行内表达式无法自动被添加出来(用JS自行计算出变换后的表达式与用JS编写计算表达式程序的复杂度是一致的),且统计表达式中将缺少新增行中的单元格。这时计算将不能完整地进行。

对于动态报表填写(即填写过程中要再插入或删除行)上的表达式计算,目前只能采用针对性编程的方案,为每种报表编写一段JS代码,拼出该报表发生变化后需要增加或修改的表达式。但显然这种方案没有通用性。

经过深入研究,快逸报表发明了一种新的算法,可以很轻松地解决增删行的的自动计算问题,其实现步骤如下:

实现步骤

  1. 设计一个行式填报表
  2. 按照业务要求写入自动计算表达式
  3. 现发布,系统会自动实现增删行时的自动计算

效果演示:

auto_computer1.png

报表设计界面

auto_computer2.png

C3单元格里写入的自动计算表达式

auto_computer3.png

浏览界面(尚未添加新行)

auto_computer4.png

浏览界面(添加了新行)

引自:报表工具知识库
原文链接: 快逸报表行式填报:动态行的自动计算
相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 快逸报表在瑞星2009下填报编辑框无法使用的解决办法
其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案web报表研究专业.net报表工具

动态行的自动计算

01.26.2010 by hewei - 3 Comments - 0
Posted in web报表

随着B/S方式应用的普及,数据填报也逐渐转移到了网页上进行。数据录入最常见的需求之一就是动态增删行与自动计算。

所谓的动态增删行,即用户录入的过程中可以删除一些已有的行,也可以添加一些新的行,新的行和已有的行除数据外别的属性基本完全相似。

所谓自动计算,是指根据用户录入的某些单元格的值,自动计算出另外一些单元格的值,从而简化用户的输入,同时避免错误数据的录入。

因此,对于可以增加删除行的填报表,同样存在自动计算的问题。新增加的行如何添加到自动计算表达式中,比如sum\count等;已经删除的行如何从自动计算表达式中去掉?

在传统的C/S模式下,增删行的自动计算问题实现较为容易,采用通行的算法(在大多数数据结构教程中都有介绍)编写表达式计算程序来分析处理表达 式,在取单元格时根据当前环境从某逻辑行中取出数据参与运算即可(著名开发工具PowerBuilder中的Datawindow即是这样实现的)。

但是,在HTML页面上完成同样的工作则要困难得多。在纯HTML页面上通行的编程技术只有解释执行的JavaScript语言(以下简称JS)。 理论上采用JS编写表达式计算程序仍然可行,但实践中却会因JS效率过于低下而无法实用;同时由于JS语言本身能力较弱,写出这种复杂功能程序的代码量会 相当大,导致页面过于庞大而不利于下载。因此,在实际应用中不可能在纯HTML页面上实施上面的思路。

所幸的是,JS中固化了一个eval函数可用于计算表达式。但eval计算的表达式中只能出现事先定义过的JS变量或函数,而不能由程序员自行编写重载代码动态地取出某逻辑行的单元格值。

在这种限制下,采用静态报表方案可以有限地解决HTML页面上的表达式计算问题。即在报表发布成HTML之前,由后台程序为所有逻辑行生成由发布后 报表上静态单元格构成的表达式,其中统计表达式都分解成发布后报表上单个单元格的运算。这样,在HTML页面上执行eval函数时将不会再出现未定义的变 量(单元格)从而可以完成计算。

但是,这种方案不允许报表在填写过程中再插入或删除行。新增逻辑行上的行内表达式无法自动被添加出来(用JS自行计算出变换后的表达式与用JS编写计算表达式程序的复杂度是一致的),且统计表达式中将缺少新增行中的单元格。这时计算将不能完整地进行。

对于动态报表填写(即填写过程中要再插入或删除行)上的表达式计算,目前只能采用针对性编程的方案,为每种报表编写一段JS代码,拼出该报表发生变化后需要增加或修改的表达式。但显然这种方案没有通用性。

经过深入研究,快逸报表发明了一种新的算法,可以很轻松地解决增删行的的自动计算问题,其实现步骤如下:

实现步骤

  1. 设计一个行式填报表
  2. 按照业务要求写入自动计算表达式
  3. 现发布,系统会自动实现增删行时的自动计算

效果演示:

auto_computer1.png

报表设计界面

auto_computer2.png

C3单元格里写入的自动计算表达式

auto_computer3.png

浏览界面(尚未添加新行)

auto_computer4.png

浏览界面(添加了新行)

引自:报表工具知识库
原文链接: 快逸报表行式填报:动态行的自动计算
相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 快逸报表在瑞星2009下填报编辑框无法使用的解决办法
其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案web报表研究专业.net报表工具

快逸报表部署中异常信息:no report config file!错误排除步骤

01.23.2010 by hewei - 1 Comment - 0
Posted in web相关技术

在用快逸报表进行Web开发,部署到Web服务器上时,经常会在浏览报表的过程中遇到这样一个报表异常信息”no report config file”,导致报表无法浏览。此异常信息显示在jsp页面上,下图为异常信息显示截图:

快逸报表异常错误信息.png

查看后台报错信息为:
javax.servlet.ServletException: No report config file!
at com.runqian.report4.view.ReportServlet.loadConfig(Unknown Source:75)
at com.runqian.report4.view.ReportServlet.reloadConfig(Unknown Source:823)
at com.runqian.report4.tag.HtmlTag.doStartTag(Unknown Source:20)

从字面的意思上看,是没有报表配置文件,可明明部署的时候,配置文件reportConfig.xml和web.xml都有,为什么还会出现这个异常呢?从异常信息上看不出什么端倪,其实,这个问题的原因是写这些配置文件的时候,有一些小细节被忽略,稍不注意就会出错,下面,就来看一下正确的配置文件写法。

第一步:先来看一下reportConfig.xml中需要注意的地方:

快逸报表reportConfig配置图.png

第二步: 需要特别注意的是配置的数据源的名字一定要和报表里连接数据源的名字一致,否则会报找不到数据源的异常。

第三步:我们看一下web.xml文件中关于快逸报表servlet的配置:

快逸报表web.xml文件配置图.png

在web.xml文件中,配置了报表系统中用到的servlet和taglib,如果在项目应用中配置其他功能的servlet和过滤器等,注意一定不要影响到报表的servlet,否则会致使报表不能正常运行。

第四步:看一下数据库连接池的配置文件,一般情况下和应用文件夹同名,这里为demo.xml(weblogic和websphere服务器的数据库连接配置是向导式的,这里不在赘述,详见快逸帮助文档中的J2EE部署手册中的相关介绍):
以Tomcat为例,在Tomcat5.5版本之前的数据库连接池文件如下图:

快逸报表数据库连接池配置1.png

在Tomcat5.5- Tomcat6.0版本之后,数据库连接池文件的写法发生了变化,如下图:

快逸报表数据库连接池配置2.png

第五步:还需要注意一点的是,把配置文件修改后,需要清理Web服务器的缓存并重启服务,重新加载配置文件。
综上,其实”no report config file”异常并不难处理,只要注意配置文正确写法和位置,在异常发生的时候根据上面各项,认真检查,就可以快速的定位异常,解决问题了。
关键字:快逸报表,部署,配置文件,Tomcat。
原文链接: 快逸报表部署中异常信息:no report config file!错误排除步骤

快逸报表部署中异常信息:no report config file!错误排除步骤

01.23.2010 by hewei - 2 Comments - 0
Posted in web相关技术

在用快逸报表进行Web开发,部署到Web服务器上时,经常会在浏览报表的过程中遇到这样一个报表异常信息”no report config file”,导致报表无法浏览。此异常信息显示在jsp页面上,下图为异常信息显示截图:

快逸报表异常错误信息.png

查看后台报错信息为:
javax.servlet.ServletException: No report config file!
at com.runqian.report4.view.ReportServlet.loadConfig(Unknown Source:75)
at com.runqian.report4.view.ReportServlet.reloadConfig(Unknown Source:823)
at com.runqian.report4.tag.HtmlTag.doStartTag(Unknown Source:20)

从字面的意思上看,是没有报表配置文件,可明明部署的时候,配置文件reportConfig.xml和web.xml都有,为什么还会出现这个异常呢?从异常信息上看不出什么端倪,其实,这个问题的原因是写这些配置文件的时候,有一些小细节被忽略,稍不注意就会出错,下面,就来看一下正确的配置文件写法。

第一步:先来看一下reportConfig.xml中需要注意的地方:

快逸报表reportConfig配置图.png

第二步: 需要特别注意的是配置的数据源的名字一定要和报表里连接数据源的名字一致,否则会报找不到数据源的异常。

第三步:我们看一下web.xml文件中关于快逸报表servlet的配置:

快逸报表web.xml文件配置图.png

在web.xml文件中,配置了报表系统中用到的servlet和taglib,如果在项目应用中配置其他功能的servlet和过滤器等,注意一定不要影响到报表的servlet,否则会致使报表不能正常运行。

第四步:看一下数据库连接池的配置文件,一般情况下和应用文件夹同名,这里为demo.xml(weblogic和websphere服务器的数据库连接配置是向导式的,这里不在赘述,详见快逸帮助文档中的J2EE部署手册中的相关介绍):
以Tomcat为例,在Tomcat5.5版本之前的数据库连接池文件如下图:

快逸报表数据库连接池配置1.png

在Tomcat5.5- Tomcat6.0版本之后,数据库连接池文件的写法发生了变化,如下图:

快逸报表数据库连接池配置2.png

第五步:还需要注意一点的是,把配置文件修改后,需要清理Web服务器的缓存并重启服务,重新加载配置文件。
综上,其实”no report config file”异常并不难处理,只要注意配置文正确写法和位置,在异常发生的时候根据上面各项,认真检查,就可以快速的定位异常,解决问题了。
关键字:快逸报表,部署,配置文件,Tomcat。
原文链接: 快逸报表部署中异常信息:no report config file!错误排除步骤

Web报表通过参数动态得到一个参数区间

01.22.2010 by hewei - 0 Comment - 0
Posted in web相关技术

Web报表设计中,经常会遇到从一个时间区间内取得数据的问题,比如查询某个日期所在周的订货信息详情,如果使用普通参数来解决这个问题的话,需要用户手动设置一周的起始时间和结束时间,这样做不但容易出错,而且也增大了开发人员的负担,如果使用动态参数来解决这个问题,用户只需要选择某个日期,系统就会自动计算出该日期所在周的起始时间和结束时间, 简化了客户的操作,提高了准确程度。
下面以一个例子来说明如何实现这个需求:
预期效果如下图所示:

快逸报表Web报表通过参数动态得到一个参数区间预期效果1

第一步:设计报表

使用快逸报表demo数据源,建立两个数据集。
ds1:
SELECT 订单.订购日期,订单.订单ID,订单.货主地区,订单.货主城市,订单.运货商 FROM 订单 WHERE 订单.订购日期 >?AND 订单.订购日期 < ?
并添加两个参数定义arg2和arg3。
ds2:
SELECT 运货商.公司名称,运货商.运货商ID FROM 运货商
报表设计器中添加以下数据:
A2单元格表达式为:=str(arg2)+ ” 到”+str(arg3)+” 订货单 ”
A4单元格表达式为:=ds1.Select(货主地区)
B4单元格表达式为:=ds1.货主城市
C4单元格表达式为:=ds1.订单ID
D4单元格表达式为:=ds1.运货商,显示值表达式为=ds2.select(公司名称,,运货商ID==value())
E4单元格表达式为:=date(ds1.订购日期),显示格式为:yyyy年MM月dd日
设置背景颜色如下:

快逸报表Web报表通过参数动态得到一个参数区间参数设计

第二步:设置参数

在设计器-配置-参数中,为报表添加一个日期型普通参数和两个日期型动态参数,这个普通参数的值设置为1996-07-08(作为首次查询的默认值,可为任意日期),两个动态参数值设置为:
动态参数arg2的值填写weekbegin(arg1),
动态参数arg3的值填写weekend(arg1),
其中weekbegin()和weekend()这两个函数是报表自带的函数,他们的作用是计算一个日期所在周的起始时间和结束时间。
在本例中,通过普通参数得到时间,然后动态通过函数计算,将得到的时间赋给arg2和arg3,然后系统将arg2和arg3作为条件进行检索。

快逸报表Web报表通过参数动态得到一个参数区间参数设计3

第三步:设计报表参数模板


模板为填报报表

快逸报表Web报表通过参数动态得到一个参数区间参数模板

B2: 提示输入日期:
C2: 可写,填报属性中的编辑风格为下拉日历。
在web中预览报表,形式如下:

快逸报表Web报表通过参数动态得到一个参数区间显示效果

参数输入框中通过下拉日历选择日期,系统自动算出日期所在周的起始和截止时间,并根据这个条件显示时间,并最终显示出结果。