快逸报表操作积累.doc_第1页
快逸报表操作积累.doc_第2页
快逸报表操作积累.doc_第3页
快逸报表操作积累.doc_第4页
快逸报表操作积累.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 居中对齐和合并单元格在这里。2. 要隐藏行或列,不选即隐藏3.点配置-控制台,可看后台信息。3. 参数模板 新建一个报表,名字命名为之前的报表_arg,即对应报表的参数模板,快逸报表自带的showReport.jsp会自动加载参数模板和报表,页面上边显示参数输入,查询按钮,下面显示数据。4. 免费版的不能设置下拉列表为数据集。5. 下拉树,我的表的字段id,name,parentid. 先把输入设为下拉树,再设置:第一层:parentid=1,第二层:parentid=2,第三层:parentid=$1, ($1表示上一层的节点的数据值,$2表示上两层)6. 填报属性更新属性 更新值为更新值应该为这样:现在更新数据点保存成功。ID自动增长Area是参数的值,改为=area,这样就保存在报表中,点保存的时候,insert的时候这个字段就有值。7.想让字全部显示 8. 当对数据集运用过滤条件后确定只剩一条记录时,虽然 select 和 select1的运算结果一样,但是 select1 运算效率高,因为他只要找到符合条件的记录,就不继续检索了,而 select 要检索完所有的记录才返回。考虑到显示值属性的定义里,几乎所有情况都只需要返回一条记录,因此建议大家使用 select1,不要使用 select。9. 动态计算并显示计算结果:$D6+$F6+$H6+$J6+$L6+$N6 10.自动计算显示格式,保留小数点后两位round(D6/C6*10000)/100+%同样的语句写到填报属性的动态计算就不起作用, 这样写:Math.round(D6/C6*10000)/100+%就好了11. 免费版不支持自由填报和行式填报,也不支持多数据源,支持属性中独立数据源。具体解释在下边12.汇总:=sum(C7) 这样上面的几行数据的和就会显示在这个单元格13.汇总的时候,一个乡或县的数据1行,用group14.ajax 向后台传中文乱码的解决:因为ajax默认为utf-8编码,所以把页面和servlet都设置为utf-8Jap:Servlet: request.setCharacterEncoding(UTF-8);15. ds2.select1(NAME,ID=bigint(value()页面上显示的是文本类型,想转化就这样bigint16. 填报效验,比如不能空这样:D6.length0 或 D6.length!=0 或D6.toSttring()!=” 17.报表组的实现 /* 头部总体 css */.ntab2-head clear:both; height: 21px; border-bottom: #DD531D 2px solid; width:104%; text-align: center;/* 头部标头的 css */.ntab2-head p float:left; font-size: 14px; font-weight: bold; height: 21px;/* 头部列表的 css */.ntab2-head li float:left; background: #eeeeee; cursor: pointer; font-size: 12px;font-weight:bold; line-height: 26px; list-style-type: none;.ntab2-head li.current color: #ffffff; cursor: none; background-image:url(/img/menubg.gif);/* 主体内容的 css? */.ntab2-body text-align: left; .ntab2-body dl text-indent: 0px; margin: 0px; padding: 0px; function ntab2_register(id, def) var obj = document.getElementById(id); if (!obj | !obj.hasChildNodes() alert(ERROR: the object was not defined for # + id + #); return; / get head & body object var head = null; var body = null; for (var i = 0; i obj.childNodes.length; i+) var node = obj.childNodesi; if (node.tagName = DIV) if (node.className = ntab2-head) head = node; else if (node.className = ntab2-body) body = node; if (!head) alert(ERROR: head elements was not found for # + id + #); return; if (!body) alert(ERROR: body elements was not found for # + id + #); return; / set action & default var items = head.getElementsByTagName(LI); var datas = body.getElementsByTagName(DL); if (items.length = 0) alert(ERROR: empty set for head elements on # + id + #); return; if (items.length != datas.length) alert(ERROR: not equal between body.length and head.length for # + id + #); return; var total = items.length; if (typeof def = undefined) def = 0; else def = parseInt(def)%total; if (def 0) def += total; for (var i = 0; i total; i+) datasi.style.display = (i = def ? : none); itemsi.className = (i = def ? current : ); itemsi.onclick = function() /* for (var k = 0; k total; k+) if(itemsk.className = current) if(k = 0) if(!check_main() return; if(k = 1) if(!check_xj() return; if(k = 4) if(!checkDate(resume_startDate,resume_endDate) return ; if(k = 5) if(!check_train() return; if(k = 6) if(!checkDate(duty_startDate,duty_endDate) return ; */ for (var k = 0; k total; k+) datask.style.display = (this = itemsk ? : none); itemsk.className = (this = itemsk ? current : ); 报表1 报表2 报表3 报表4 报表5 报表6 报表7 ntab2_register(test1, 7); 报表中的名字之前统一是report1,方法名也是,改成不一样的,这样在页面就不会报错。比如:在jsp页面这样写:report:html name=report2 reportFileName=dbtj.raqfuncBarLocation=needPageMark=yesgenerateParamForm=noneedLinkStyle=yesparams=width=-1exceptionPage=/reportJsp/myError2.jsp/Toolbar里的方法名就相应改为:快逸报表集成到已有的项目中1.在已有的 J2EE 项目中使用刚才创建的报表,需要如下步骤: 导入 jar 包和相关文件 a. 将快逸报表安装目录 quieeReportwebappsquieeWEB-INFlib 中的 jar 包导入项目。 b. 将 quieeReportwebappsquieeWEB-INF 目录下的 reportConfig.xml 、 runqianReport4.tld 、 runqianReportLperties 复制到项目的 WEB-INF 目录, c. 将 quieeReportwebappsquiee 目录下的 j2re-1_4_1-windows-i586-i.exe 、 runqianReport4Applet.ja r 和 images 目录(用于工具 按钮的图片可自选)复制到项目的 WebRoot 目录下。 各文件的具体作用参见 3 2. 修改 web.xml 文件 在 web.xml 文件中增加如下内容: reportServlet com.runqian.util.webutil.SetContextServlet configFile /WEB-INF/reportConfig.xml 1 reportServlet /reportServlet /WEB-INF/runqianReport4.tld /WEB-INF/runqianReport4.tld 注意,若 web-app 的版本为 2.5 时,需要在 元素外加上 。3.在项目中导入报表文件4.创建 jsp 文件 可以直接使用 quieeReportwebappsquieereportJsp 目录下的 showReport.jsp 和 toolbar.js p 文件。其中 showReport.jsp 用于显示报表, toolbar.jsp 用于显示工具按钮。5. 添加授权文件 复制 quieeReportwebappsquieeWEB-INFclasses 目录下的 quieeWindowServer.lic授权文件到项目的 WebRoot 目录,可能需要修改 reportConfig.xml 文件中的部分内容如下: license /quieeWindowServer.lic 6.修改reportConfig.xml 数据源 dataSource orcl,oracle,GBK 数据源的 JNDI 名称,数据库类型,数据库字符集编码,SQL 是否需要转码;重复 在tomcat的D:tomcatconfCatalinalocalhost添加一个yldbgz.xml 7.JNDIPrefix表示查找数据源时的环境串前缀,在不同的WEB服务器中不同, 如 Tomcat 中是 java:/comp/env,而 Weblogic 和 Websphere 中均不需要,可 以不填。什么是快逸报表的独立多数据集快逸报表增强版支持多数据集、多源关联 快逸报表免费版支持属性中独立多数据集都是多数据集,但是此多数据集非彼多数据集,很多免费版的用户看免费版的功能说明上提到了多数据集概念,但是在用到多数据集的时候却又发现不支持,于是便产生了很多疑问,本文就来给大家解开这个疑问,让我们看下免费版中的独立多数据集到底是怎么用的。免费版中的多数据集全名叫做:报表属性中独立多数据集,顾名思义,也就是在属性中可以用到别的数据集,现在我们就用一个完整的例子给大家解释一下这个概念。第一步:用快逸报表自带的demo数据库,对订单表建立数据集ds1, 数据集 sql语句为:SELECT 订单.订单ID,订单.雇员ID,订单.客户ID FROM 订单,并生成相应的网格表,效果如下图:我们可以看到,从订单表中我们取出来的只是雇员和客户的ID ,但是我们实际的报表中这样肯定是不可以的,因为我们需要知道这个订单的雇员是谁,叫什么,客户又是什么名称,单是一个ID看不出任何东西,也解决不了任何问题,于是我们就需要另外从雇员表和客户表中去取出他们的名称,这里就用到了多数据集,我们的目的是让这张报表中出现三个数据表中的内容,把客户ID,雇员ID变成相应的中文名称。 请认真看一下两个步骤:第二步:从客户表和雇员表增加两个数据集,分别为ds2和ds3 ds2的sql语句为:SELECT 客户.客户ID,客户.公司名称 FROM 客户 ds3的sql语句为:SELECT 雇员.雇员ID,雇员.姓氏,雇员.名字 FROM 雇员 于是在就有了3个数据集,见下图:第三步:怎么样在属性中使用多数据集,这是最关键的一步。 注意,这一步都是在报表右面的属性栏中完成的。 在快逸的单元格里,我们有实际值和显示值之分,像上面检索出来的雇员ID、客户ID就是真实值,然后我们在右面属性栏的显示值里通过关联让他显示相应的雇员名称、客户名称这就是显示值。下面我们看具体操作。上图的红色小框就是我们显示值设置的地方。 首先我们选中B2单元格,设置雇员ID的显示值,在显示值得表达式编辑框中输入下面的语句:ds3.select1(姓氏+名字,雇员ID=value() 然后在选中C2单元格设置客户ID的显示值:ds2.select1(公司名称,客户ID=value() 做好这些以后设置就完成了,我们预览一下效果,如下图:我们可以看到,雇员和客户都可以看到具体的名称了,然后我们把表头雇员ID,和客户ID改成雇员名称和客户名称,一张用了多数据集的免费快逸报表就做完了。注 :免费版的多数据集只能在报表的属性中使用,所以叫做属性中的独立多数据集。 增强版的多数据集可以直接用在报表的单元格中,是功能更全面的多源关联。报表与页面一起传递参数给报表7. 快逸报表中参数模板的使用可以大大提高报表设计人员设计报表的效率,而且可以直接使用报表自带的jsp对整个报表进行展示,在使用中,客户会有这样的需求,就是不但使用报表自带的参数模板,还需要在系统中得到相应的参数传递给报表进行计算,这样就有很多客户遇到了相应的问题,比如说在报表得不到系统传过来的参数,或者从系统传过来的参数只保存一次,就无法再继续查询了等等,下面就用例子说明一下这样的报表应该如何制作。8. 实现思路:将页面参数在jsp中接收后,拼到params中,通过params传递给报表,然后在参数表单里得到相应的参数,并且在param标签里使用hiddenParams得到隐藏的参数,这样就可以实现报表的从参数模板和页面得到参数进行查询。9. 以如下需求为例,每一条记录都有添加这条记录的人员,而每个人员都只能浏览自己录入的记录。人员在登录时记录下了id。10. 数据库中表结构如下:11.12. 设计报表的数据集:13. SELECT * FROM testhong1 WHERE (testhong1.nianfen =? or ? is null )and testhong1.pid = ?14. 其中年份这个参数是从参数模板传递过来的,人员id这个参数是从页面传递过来的。15. 设计报表:16.17.18. 添加参数并设计参数模板:19.20. 用固定的jsp发布报表,修改showreport.jsp21. 将showreport.jsp重命名为chanliang.jsp,22. 修改report:html name=”report1 reportFileName=” 为 reportFileName=”chanliang.raq”23. 修改report:param name=”form1 paramFileName=” 为 paramFileName=”chanliang_arg.raq”24. 并在 report:param标签中 添加 hiddenParams=”25. 即可,将报表放到应用的jsp目录访问,url里拼接pid这个参数作为传递过来的人员id,26. :6001/demo/jsp/chanliang.jsp?pid=111127. 由于年份没有传递固定的参数,所以展示如下图:28.29. 当输入一个年份时,就能按照这个人和年份进行查询了。30.31. 经过如上步骤就成功实现了这一功能。这个功能还可以理解为一种权限的控制,即当此pid为登陆中的session则这个人只能访问自己的信息,无法浏览其他人的信息。如何实现填报表不同单元格的自动关联填充很多做过统计报表的人都遇到过这样一种情况:每个月填入的新数据比较少,绝大多数都是一些固定的数据,而这些固定数据之间有着关联对应的关系,如果能在报表中加入一些关联关系,那么只需要填入其中一种数据,其他的数据信息就会根据关联关系自动被填充好,这样即提高了统计人员的工作效率,也减少了可能误填的情况,那么如何实现填报表不同单元格的自动关联填充呢?实现思路:利用快逸报表中的自动计算功能就可以完成不同单元格信息的自动关联,所谓的自动计算,是在填报的时候,当用户录入了某些数据后,系统会自动算出另外一部分单元格的值,由于自动计算大部分时候是在网页上响应的,即用户在网页上录入数据时触发另外一些单元格自动计算,因此自动计算表达式采用的是javascript表达式或者函数,并且可以引用单元格的值。实现步骤:第一步:制作报表模版设计一张填报表,格式如下图:其中,B2单元格要在填报属性中设置成可写单元格:在C2单元格的填报属性中设置自动计算函数,如下图中的getName(B2),此函数的作用是在getName()函数中传入B1单元格的值,然后进行自动计算:第二步:编写自动计算函数在jsp文件中编写自动计算函数getName(),当用户在网页上录入数据时触发此函数来完成单元格C2自动计算:var idArray = new Array(1,2,3,4,5); /生成部门ID的数组var nameArray = new Array(市场部,研发部,技术支持部,咨询部,综合部);/生成部门名称的数组function getName(id) /自动计算函数var name = “”;for(var i=0;iidArray.length;i+) /通过循环判断B1单元格输入的值,来计算出应当返回的值if(idArrayi=id)name = nameArrayi;break;return name; / 返回自动计算出的值到C2单元格中预览效果:设计好的报表模版和jsp文件放到网页上展现,效果如下图所示:当鼠标焦点离开部门ID单元格后,在部门名称单元格便自动关联填充上此ID相对应的部门名称:利用自动计算函数,我们还可以完成多种业务逻辑功能,比如日期的换算,金额的累加或HTML内容样式变换等等,由此简化用户的输入,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论