当前位置:文档之家› 关于润乾报表的补充说明

关于润乾报表的补充说明

关于润乾报表的补充说明
关于润乾报表的补充说明

分页说明:为方便大家开发,本人在工资系统中作出一个DEMO,经过测试后能正常使用。先将部分代码与注意事项发给大家看一下

第一步:

如果该报表需要分页的话,请将下面的

替换掉原先的。

第二步:

增加

$j("#countSql").val("分页语句");

请注意字符串的要写单引号:并且写成如下形式:\\'${字符串}\\'

ShowExt.jsp 修改成

funcBarLocation=""

params="<%=param.toString()%>"

needPageMark="yes"

pageCount="20"

totalCountExp="<%=countSql%>"

paperHeight="600"

/>

附录:

3.8. 分页计算标签

本功能采用报表组的原理来实现,因此需要支持报表组的授权

3.8.1. 概念定义

使用分页计算标签可以在报表比较大的情况下实现以页为单位对数据进行读取和展现及导出等操作。

3.8.2. 功能背景

报表大到一定程度,必然会内存溢出,此时比较好的解决办法是边算边输出。分页计算标签是利用报表组来实现的逐页计算逐页输出的tag标签。

可以大大降低内存占有量,提高运行效率,避免内存溢出等问题。

3.8.3. 使用方法

在这个标签中,主要增加了以下属性: totalCountExp——总记录数(必填属性)

分页就是基于这个总记录数来的。它的值是一个润乾的非数据集函数,并且返回的值应该是一个整型数据。如用query执行一个count的sql。如:

totalCountExp="query('SELECT count(*) FROM table1')"

pageCount——每页记录数(非必填)分页后每一页包含的记录数,其值需为整数。默认值为20。 cachePageNum——缓存页数(非必填)

根据pageCount和cachePageNum,每次取pageCount* cachePageNum条记录,其值需为整数,默认值为100

设置该属性,可保证缓存页数内的翻页效率。(reportconfig.xml文件里的alwaysReloadDefine设置为no,exthtml标签里useCache设置为yes,该属性才生效) startRowParamName/ endRowParamName——起始行参数名/结束行参数名(非必填)

对应报表数据集记录行中设置的起始行和结束行的参数名。

默认值为startRow和endRow。其他属性说明,与html标签基本一致:

图 3.2.

应用举例一:下面以订单明细列表为例,按照常规做出一张订单明细的清单式列表。

然后为其添加两个参数:起始行参数名startRow和结束行参数名endRow。

注意参数类型要求是整型。

图 3.4.

并且在数据集设置的参数标签页设置好起始行和结束行的对应参数

@startRow和@endRow。

图 3.5.

下面是最简jsp发布文件,只定义了三个必须属性,其余均采用默认值:图 3.6.

运行结果如下:图 3.7.

下面是定义了各种属性之后的jsp:

图 3.8.

运行效果如下:图 3.9.

这种做法的缺点:当数据量足够大的时候,某些jdbc包的resultset本身会内存溢出;而且从理论上看,当调用api接口将resultset的指针定位到某一行的时候,其底层其实是一行一行跳转的,虽然速度非常快,但是数据量超过几百万甚至几千万的时候,还是会消耗一些时间。因此当记录数大到一定程度,翻到最后一页的速度会比开头几页慢。

这种做法的优点:和数据库类型无关,任何一种数据库都可以采取这种方式,用户不用研究不同数据库的差别。

emerito_info.raq 的分页count语句

----------------------------------------------------------------------------

select

count(*)

from RETIRER_SALARY rs,

RETIRER_SALARY_DETAIL rsd

WHERE rsd.retierer_salary_id = rs.retierer_salary_id

and (rs.unit_id = ? or ? is null) and (rs.retierer_salary_id in (${rsid}) or ? =2)

and rs.giveyearmonth = ? ORDER BY rs.fullname

---------------------------------------------------------------------------

emerito_salary.raq 的分页count语句

SELECT

count(*)

from RETIRERS r,

RETIRER_SALARY rs,

RETIRER_SALARY_DETAIL rsd

WHERE r.RETIRER_ID = rs.RETIRER_ID and rsd.retierer_salary_id = rs.retierer_salary_id

and (r.unit_id = ? or ? is null) and (rs.retierer_salary_id in (${rsid}) or ? =2)

and rs.giveyearmonth=? ORDER BY rs.fullname

----------------------------------------------------------------------------

job_base.raq 的分页 count语句

SELECT

count(*)

from workersalary WHERE (unit_id = ? or ? is null) and (worker_id in (${workerid}) or ? =2) ORDER BY departmentname,fullname

unitid = ?

unitid = ?

workerid = ${workerid} 为 , , , ,

falg = ?

----------------------------------------------------------------------------

job_salary.raq 的分页 count语句

SELECT count(*) from workersalary a,

WORKER_SALARY_DETAIL b

WHERE a.SALARY_ID = b.SALARY_ID

and (a.unit_id = ? or ? is null) and (a.worker_id in (${workerid}) or ? =2)

and a.giveyearmonth = ?

----------------------------------------------------------------------------

jobn_bfgz.raq 的分页 count语句

SELECT

count(*)

from WORKER_SALARY_DETAIL_ADD wsda,

WORKERSALARY w

WHERE wsda.salary_id = w.salary_id

and w.unit_id = ?

----------------------------------------------------------------------------

jobn_jsgz.raq 的分页 count语句

SELECT

count(*)

from (

select

r.worker_id as last_worker_id,

r.Totalsalary as last_Totalsalary,

r.salary_id as last_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id =

wsd.salary_id

and r.giveyearmonth = '2011-11'

and r.unit_id = 613

and wsd.giveyearmonth = '2011-11') l1

left join (select

r.worker_id as current_worker_id,

r.Totalsalary as

current_Totalsalary,

r.salary_id as current_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id

and

r.giveyearmonth = '2011-12'

and r.unit_id = 613

and

wsd.giveyearmonth =

'2011-12') l2 on https://www.doczj.com/doc/cb12538217.html,st_worker_id = l2.current_worker_id

WHERE https://www.doczj.com/doc/cb12538217.html,st_totalsalary > l2.current_totalsalary

or l2.current_totalsalary is null

----------------------------------------------------------------------------

jobn_kjgz.raq 的分页 count语句

SELECT

count(*)

from WORKERSALARY w, WORKER_SALARY_DETAIL_CUT wsdc WHERE w.salary_id = wsdc.salary_id

and w.unit_id = ? and w.giveyearmonth = ?

----------------------------------------------------------------------------

jobn_other.raq 的分页 count语句

SELECT *

from (select * from WORKERSALARY w where

w.giveyearmonth=? and w.unit_id = ?) l1 join

(select * from WORKERSALARY w where w.giveyearmonth=? and w.unit_id = ?) l2 on l1.worker_id = l2.worker_id

WHERE l1.fullname <> l2.fullname or l1.idCard <> l2.idCard or l1.dept_id <> l2.dept_id

----------------------------------------------------------------------------

jobn_zjgz.raq 的分页 count语句

select

count(*)

from (

select r.worker_id as last_worker_id,

r.Totalsalary as last_Totalsalary,

r.salary_id as last_salary_id,

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id and r.giveyearmonth = ?

and r.unit_id = ?

and wsd.giveyearmonth = ?

) l1

right join (

select r.worker_id as current_worker_id,

r.Totalsalary as current_Totalsalary,

r.salary_id as current_salary_id,

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id and r.giveyearmonth = ?

and r.unit_id = ?

and wsd.giveyearmonth =?

) l2 on https://www.doczj.com/doc/cb12538217.html,st_worker_id = l2.current_worker_id

where https://www.doczj.com/doc/cb12538217.html,st_totalsalary < l2.current_totalsalary

or https://www.doczj.com/doc/cb12538217.html,st_totalsalary is null

----------------------------------------------------------------------------

jobup_bfgz.raq 的分页 count语句

SELECT

count(*)

from WORKER_SALARY_DETAIL_ADD wsda,

WORKERSALARY w

WHERE wsda.salary_id = w.salary_id

and w.upunit_id = ?

----------------------------------------------------------------------------

jobup_jsgz.raq 的分页 count语句

SELECT

count(*)

from (select

r.worker_id as last_worker_id,

r.Totalsalary as last_Totalsalary,

r.salary_id as last_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id

and r.giveyearmonth

='2011-11'

and r.upunit_id = 118

and wsd.giveyearmonth = '2011-11') l1

left join (select

r.worker_id as current_worker_id,

r.Totalsalary as

current_Totalsalary,

r.salary_id as current_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id

and

r.giveyearmonth = '2011-12'

and r.upunit_id = 118

and

wsd.giveyearmonth =

'2011-12') l2 on https://www.doczj.com/doc/cb12538217.html,st_worker_id = l2.current_worker_id

WHERE https://www.doczj.com/doc/cb12538217.html,st_totalsalary > l2.current_totalsalary

or l2.current_totalsalary is null

----------------------------------------------------------------------------

jobup_kjgz.raq 的分页 count语句

SELECT

count(*)

from WORKERSALARY w, WORKER_SALARY_DETAIL_CUT wsdc

WHERE w.salary_id = wsdc.salary_id

and w.upunit_id = ? and w.giveyearmonth = ?

----------------------------------------------------------------------------

jobup_other.raq 的分页 count语句

SELECT count(*) from (select * from WORKERSALARY w where w.giveyearmonth=? and w.upunit_id = ?) l1 join

(select * from WORKERSALARY w where w.giveyearmonth=? and

w.upunit_id = ?) l2 on l1.worker_id = l2.worker_id

WHERE l1.fullname <> l2.fullname or l1.idCard <> l2.idCard or l1.dept_id <> l2.dept_id

----------------------------------------------------------------------------

jobup_salary.raq 的分页 count语句

SELECT count(*) from workersalary a,

WORKER_SALARY_DETAIL b

WHERE a.SALARY_ID = b.SALARY_ID

and (a.upunit_id = ? or ? is null) and (a.worker_id in (${workerid}) or ? =2)

and a.giveyearmonth = ?

----------------------------------------------------------------------------

jobup_zjgz.raq 的分页 count语句

select

count(*)

from (

select r.worker_id as last_worker_id,

r.Totalsalary as last_Totalsalary,

r.salary_id as last_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id and r.giveyearmonth = '2011-11'

and r.upunit_id = ?

and wsd.giveyearmonth = '2011-11'

) l1

right join (

select r.worker_id as current_worker_id,

r.Totalsalary as current_Totalsalary,

r.salary_id as current_salary_id

from WORKERSALARY r

join worker_salary_detail wsd on r.salary_id = wsd.salary_id

润乾报表常用函数

润乾报表常用函数 1.to函数说明:生成一组连续的整数数据 语法:to(startExp,endExp{,stepExp}) 参数说明: startExp 整数数据开始的表达式 endExp 整数数据结束的表达式 stepExp 整数数据步长的表达式 函数示例: to(1,5)=list(1,2,3,4,5) to(1,5,2)=list(1,3,5) to(-5,-10,-2)=list(-5,-7,-9) to(-10,-8)=list(-10,-9,-8) 2.select函数说明:从数据集的当前行集中选取符合条件的记录 语法: datasetName.select( {, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} ) datasetName.select( , , )//适用于不需排序或数据集中已排好序 参数说明: select_exp:要选择的字段列名/列号,,也可以是表达式。列号用#n 表示,例如#0代表第0列,#1代表第1列,依此类推 desc_exp: 指定数据排序的顺序,true表示降序排列,false表示升序排列。 filter_exp: 数据过滤表达式,如果全部选出,则此参数省略,仅用“,”占位。

sort_exp: 数据排序表达式。当此项为空时先检查desc_exp是否为空,如果为空,则不排序,否则使用select_exp排序。rootGroupExp 是否root数据集表达式 返回值:一组数据的集合,数据类型由select_exp的运算结果决定函数示例: 例1:ds1.select( name ) 从数据源ds1中选取name字段列的所有值, 不排序 例2:ds1.select( #2, true ) 从数据源ds1中选取第二个字段列的所有值并降序排列 例3:ds1.select( name,false,sex=='1') 从数据源ds1中选取性别为男性的name字段列的值并升序排列 例4:ds1.select( name, true, sex=='1', id ) 从数据源ds1中选取性别为男性的name字段列的值并按id字段降序排列 3.Int函数说明:将字符串或数字转换成整数 语法:int( string ) int( number ) 参数说明: string 需要转换的字符串表达式 number 数字,如果带有小数位,转换后小数位被截掉

润乾报表与帆软报表产品对比

润乾报表与帆软报表产品对比

目录 (2) 前言 (3) 第一章报表设计 (3) 1.1对EXCEL的支持 (3) 1.1.1设计器打开Excel文件 (3) 1.1.2对Excel的公式支持 (4) 1.1.3复制粘贴Excel的内容 (4) 1.2制作报表 (4) 1.3制作统计图 (7) 1.4远程设计 (8) 第二章功能性 (9) 2.1中国式复杂报表 (9) 2.2.1多源分片 (9) 2.2.2动态格间运算 (10) 2.2.3行列对称 (10) 2.2.4不规则分组 (11) 2.2数据源 (11) 2.3主子表 (12) 2.4行类型 (13) 2.5折叠报表 (13) 2.6统计图 (16) 2.7超链接 (16) 2.8参数与宏 (17) 第三章集成性 (18) 3.1WEB应用集成 (18) 3.2API接口 (19) 3.3自定义数据接口 (19) 3.4移动端展现 (19) 第四章性能与容量 (21) 4.1多源关联 (21) 4.2容量 (21) 4.3响应 (22) 4.4并发 (22) 第五章美观性 (23) 4.1设计器UI (23) 4.2统计图 (24) 第六章总结 (25)

多年以来,我们经常被客户询问关于润乾报表与帆软报表的不同之处,对此我们的态度一直是避而不谈,因为从心底里不愿意去做这样的对比,我们坚信“你若盛开,清风自来”,也一直在秉行只说自己好,不去评判竞争者好坏的商业原则。如果客户在面对选型时有所纠结,我们都是建议客户自己去对比选择并积极配合。但是现在这样的客户反馈越来越多,而且确实有许多客户对报表工具不熟悉,不知道在选型时该对比哪些内容。另外,市场上长期以来充斥着一些倾向性非常明显、内容却很片面且与实际不符的对比材料,其编造者也不敢署名,这些错误的材料误导了客户对报表市场的感知能力。因此,不管是客户需求,还是市场需要,还是自我澄清,我们现在都有必要做个回应。下面对两种产品进行了详细测评,并整理汇总出文档供业界参考。我们力求做到客观公正,但由于对友商的产品不是非常熟悉(我们的精力更多的是研究客户需求,而不是竞争者),因此难免有错,敬请广大业内人士指正,特别是敬请友商指正。 润乾报表和帆软报表都是国内知名的报表解决方案供应商,两者的共同特点都是类Excel的纯Java的Web报表工具,但在技术细节和发展方向上存在差异。 本文主要考察这两款报表工具在制作固定报表时的差异。固定报表是指由报表开发人员预先定义好报表样式、取数规则、查询条件、业务逻辑等,报表的使用人员仅在Web端进行报表的查看,不涉及报表结构的修改。固定报表是业务系统中最常用的、开发工作量最大的任务,其制作方便性及能力对项目开发周期有很大的影响。另外,由于固定报表主要是在应用程序中使用,其集成性也是非常重要。本文将对这些方面进行客观的测评。 第一章报表设计 1.1对EXCEL的支持 既然润乾和帆软都是类Excel的设计模型,那么我们先来看看二者对Excel 的支持情况。对Excel的支持从以下几方面进行: 1.1.1设计器打开Excel文件

润乾报表常用函数

润乾常用函数数值计算 函数说明:abs(numberExp) 计算参数的绝对值 语法: abs(numberExp) 参数说明: numberExp 待计算绝对值的数据 返回值: 数值型 示例: 例1:abs(-3245.54) 返回:3245.54 例2:abs(-987) 返回:987 函数说明:cos(numberExp) 计算参数的余弦值,其中参数以弧度为单位 相关的函数有sin() 计算参数的正弦值 tan() 计算参数的正切值 语法: cos(numberExp) 参数说明: numberExp 待计算余弦值的弧度数 返回值:double型 示例: 例1:cos(pi()) 返回:-1 例2:cos(pi(2)) 返回:1

函数说明:eval( StringExp ) 动态解析并计算表达式 语法: eval( StringExp ) eval( StringExp, SubRptExp ) eval( StringExp, DataSetExp ) 参数说明: StringExp 待计算的表达式串 SubRptExp 嵌入式子报表对象,一般是含有子报表的单元格 DataSetExp 数据集对象,一般是ds函数 返回值:表达式的结果值,数据类型由表达式决定 示例: 例1:eval( "1+5" ) 返回6 例2:eval("B2+10", A1) 其中A1为嵌入式子报表,表示计算A1子报表中的B2+10 例3:eval("salary+100", ds("ds1")) 表示计算数据集ds1中salary加100 函数说明:exp(nExp) 计算e的n次幂 语法: exp(nExp) 参数说明: nExp 指定次幂数 返回值:数值型 示例: 例1:exp(4.3) 返回:73.69979369959579 函数说明:fact(nExp) 计算参数的阶乘 语法: fact(nExp)

润乾集算报表实现动态层次钻取报表(一)

润乾集算报表实现动态层次钻取报表(一) 在报表项目中有时会有动态层次报表,而且还需要层次钻取的场景,开发难度较大。这里记录了使润乾集算报表开发《各级部门KPI报表》的过程。 《各级部门KPI报表》初始状态如下图: 当前节点是根节点“河北省”,要求报表显示当前节点的下一级节点“地市”汇总的KPI 数值。Kpi又分为普通指标和VIP指标两类,共四项。如果点击“石家庄”来钻取的时候,要求能够将石家庄下一级的KPI汇总指标显示出来,如下图: 点击“中心区”钻取,要求能够将下一级的KPI汇总指标显示出来,以此类推,直到显示到最后一级。如下图: 前四级固定是“省、地市、区县、营业部”,后边则是动态的“架构4、架构5、架构6. . . 架构13”(根节点“省”对应“架构0”)。 这个报表对应的oracle数据库表有两个,tree(树形结构维表)和kpi(指标事实表),如下图:

Tree表 Kpi表 Tree表的叶子节点,通过id字段与kpi表关联。这个报表的难点在于1、动态的多层数据、标题;2、树形结构数据与事实表关联。 采用润乾集算报表实现的第一步:编写集算脚本tree.dfx,完成源数据计算。集算脚本 A1:连接预先配置好的oracle数据库。 A2:新建一个序列,内容是“省、地市、区县、营业部、架构4、架构5、架构6. . . 架构13”。 A3:使用oracle数据库提供的connect by语句编写sql,从数据库中取出指定id(节点编号)

的所有父节点id、name。id是预先定义的网格参数,如果传进来的值是104020,那么A3的计算结果是: A4:为A3增加一个字段title,按照顺序,对应A2中的层级。结果是: A5:计算变量level,是A3序表的长度,也就是输入节点“104020”的层级号“4”(“省”为第一级)。 A6:计算输入节点“104020”的下一级对应的层级名称“架构4”,赋值给变量xtitle。 A7:编写sql,从tree表中取出输入节点“104020”的所有叶子节点,并拆分sys_connect_by_path字符串,得到这些叶子节点对应的输入节点“104020”的下一级节点。形成临时表leaf与kpi表关联分组汇总。为了能够得到输入节点“104020”的下一级节点的name,leaf还需要与tree关联一次。需要注意的是,如果输入节点号本身就是叶子节点,结果中的name将为空。完整的sql如下: with leaf as( SELECT tree.id id,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(id, ';'),'[^;]+',1,2) x FROM tree where connect_by_isleaf=1 START WITH ID = ? CONNECT BY NOCYCLE PRIOR id = pid ) select nvl(leaf.x,max(leaf.id)) id,'"+xtitle+"' title,max(https://www.doczj.com/doc/cb12538217.html,) name, sum(kpi.kpi1) kpi1,sum(kpi.kpi2) kpi2,sum(kpi.vipkpi1) vipkpi1,sum(kpi.vipkpi2) vipkpi2 from leaf left join kpi on leaf.id = kpi.id left join tree on leaf.x=tree.id group by leaf.x order by leaf.x 计算的结果是: A8:关闭数据库连接。 A9:向报表返回A4、A7两个结果集。 第二步:在报表设计器中定义报表参数和集算数据集,调用tree.dfx。如下图:

总结了润乾报表的查询标签属性

1)raq:部署到通用查询应用中的报表的名称,为必须项,格式要符合文件名或变量名规则通用查询面板的布局方式。 2)srcType:报表源的类型,默认值为file。 3)needSave:是否生成通用查询页面上的保存按钮,即保存当前查询设置的保存按钮,默认值是yes。 4)needReload:是否生成通用查询页面上的载入已定义按钮,即载入已有的查询条件设置的按钮,默认值是yes。 5)needQuery:是否生成通用查询页面下方提交查询设置的查询按钮,默认值是yes。 6)conditions:设置可见的预置条件,预置条件为预先设置查询条件作为默认查询条件。预置条件的固定设置格式为:数据集名称,(,字段名称,比较符,条件值1,条件值2,),逻辑符; 一个预置条件必须含有八项(其中括号”()”算一项且必须),包括:数据集名称、左括号、所选的字段名称、比较符(参见比较符对应表)、条件值1、条件值2、右括号、逻辑符(or或and);其中两个条件值是针对选择”在……之间”这种类型的比较符,若选择的是只需一个条件值的比较符,那么只设置条件值1,条件值2为空即可。 7)hiddenConditions:将预先设置的查询条件隐藏,这样进入通用查询页面时,预置条件不显示,在提交查询条件时,与用户设置的查询条件一同传入报表。不可见预置条件的设置方法与规则同可见预置条件的一致。 8)dataSets:生成通用查询面板所使用的数据集列表,设置报表模板中的数据集,设置格式为半角逗号分割的列表。 9)macroNames:若设计的报表模板含有宏,则在这个标签处设置报表中的宏,此处宏名称的列表要与数据集名称一一对应。 10)fieldColWidth:设置通用查询字段列表的宽度,格式是像素值,或者百分比。 11)setupIcon:”高级设置”功能键对应的图标路径,格式可以是绝对或相对URL地址。 12)multiIcon:”横向布局”功能键对应的图片路径,格式可以是绝对或相对URL地址。 13)saveIcon:”保存”功能键对应的图标路径,格式可以是绝对或相对URL地址。 14)reloadIcon:”载入已定义”功能键对应的图标路径,格式可以是绝对或相对URL 地址。 15)calIcon:”日历编辑风格”对应的图标路径,格式可以是绝对或相对URL地址。

(完整版)润乾报表使用手册

报表使用手册 报表使用手册 XX股份有限公司 中国济南

目录 1概述.............................................................................................................................. - 3 - 2安装.............................................................................................................................. - 3 - 2.1准备好安装程序.......................................................................................... - 3 - 2.2安装中的选项.............................................................................................. - 3 - 2.3授权文件配置.............................................................................................. - 4 - 3报表制作...................................................................................................................... - 5 - 3.1报表制作要求.............................................................................................. - 5 - 3.2制作一张报表的步骤.................................................................................. - 5 - 3.3启动报表设计器.......................................................................................... - 6 - 3.4连接数据源.................................................................................................. - 7 - 3.4.1 数据源对话框......................................................................................... - 7 - 3.4.2 编辑数据源............................................................................................. - 7 - 3.4.3 注意事项................................................................................................. - 9 - 3.5设计报表格式.............................................................................................. - 9 - 3.5.1 格式设计................................................................................................. - 9 - 3.5.2 需注意事项........................................................................................... - 10 - 3.6定义参数.................................................................................................... - 10 - 3.6.1 参数的编辑........................................................................................... - 10 - 3.6.2 常用参数举例....................................................................................... - 11 - 3.7定义宏........................................................................................................ - 11 - 3.7.1 宏的编辑............................................................................................... - 11 - 3.7.2 常用宏举例........................................................................................... - 12 - 3.8建立数据集................................................................................................ - 12 - 3.8.1 数据集的编辑....................................................................................... - 12 - 3.8.2 常用数据集举例................................................................................... - 13 - 3.9设置单元格属性........................................................................................ - 14 - 3.9.1 数据集在单元格中应用....................................................................... - 14 - 3.9.2 显示格式............................................................................................... - 14 - 3.9.3 设置预警条件....................................................................................... - 15 - 3.9.4 增加动态背景色................................................................................... - 15 - 3.9.5 按参数隐藏列....................................................................................... - 16 - 3.9.6 主格应用............................................................................................... - 16 - 3.10报表预览.................................................................................................... - 17 - 3.11报表发布.................................................................................................... - 17 - 4报表部署.................................................................................................................... - 18 - 4.1部署位置.................................................................................................... - 18 - 4.2Web中显示................................................................................................ - 18 - 5重要概念.................................................................................................................... - 19 - 5.1数据源........................................................................................................ - 19 - 5.2数据集........................................................................................................ - 19 - 5.3参数............................................................................................................ - 19 - 5.4宏定义........................................................................................................ - 22 -

润乾集算报表呈现输出之票据套打

润乾集算报表呈现输出之票据套打 实际项目开发中,很多情况会用到票据的打印。即在一张印刷好的空白票据上,准确无误地打印上票据的内容。用传统的报表工具,我们通常会用尺子量每一个数据区域的位置,然后在屏幕上根据尺子量出的尺寸设计每个格子的位置,反复调试。这样制作一张票据打印的报表费时费力,而且一旦票据格式发生变化,报表制作人员又要重新制作报表。 集算报表采用底图描绘的方案解决套打时的报表绘制问题。将需要套打的票据扫描成图片,插入到报表设计的界面上,然后依照底图进行报表描绘,可保证每一个单元格都和单据上的数据区域严格对齐。这样设计出来的报表,打印到空白票据上,不会产生错位。 具体操作如下: 准备扫描空白票据,使用扫描仪,注意要设置像素单位,使得其和标准纸张大小一样,或者扫描之后用画图软件将图片压缩成标准纸张大小,扫描分辨率一般使用72dpi。得到空白票据图片如下图。请注意发票名称、表格线、表格中的各个标题都是空白发票已经印刷好的,报表需要填写生成的是空白部分。 使用集算报表设计器新建空白报表,并插入背景图片。 在工具菜单中选择【报表属性】,弹出报表属性窗口,选择【其它】标签,在【URL 或 表达式】中选择我们要做为背景图案的票据扫描件,点【确定】即可如图所示:

此时报表会以扫描票扫描件为背景图片,我们调整报表的行高和列宽,使报表中要要填入数据的单元格与扫描件空白区域对应,比如:C2单元格对应”发票单位”,D5单元格对应”日期”等,如图中蓝色字体所示。本例中是直接填写的字符串,实际应用中也可以从相应数据集中读取。 设置报表打印属性 1、在工具菜单中选择【报表】--【报表属性】,弹出报表属性窗口,选择”打印”标签,将 【打印背景图】选中,如图所示:

集算报表与润乾报表的函数语法对比

集算报表与润乾报表的函数语法对比 集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简,其中报表函数也做了适当优化,这里就常见计算来比较一下二者函数语法之间的差异。 对比函数一览表 1数据集函数 1.1d s.group() 润乾报表: datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGr oupExp}}}}}}) 集算报表: datasetName.group({,filter_exp};{sort1}{:order1},…;{ groupSortExp }:{ groupOrderExp })

选项: @r 是否root数据集表达式 主要改变: 1、增加@r函数选项,取代原rootGroupExp表达式参数 2、取消分组前记录的排序顺序descExp参数 3、更改排序表达式和排序顺序参数语法 举例: 1.2d s.select()/ds.select1() 润乾报表: datasetName.select( {, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} ) datasetName.select1(selectExp{,filterExp{,rootGroupExp}}) 集算报表: 将原ds.select()和ds.select1()合并为ds.select()语法如下 datasetName.select({: order_exp},{ filter_exp },{num_exp},{distinct_exp})选项: @r 是否root数据集表达式 主要改变: 1、增加@r函数选项,取代原rootGroupExp表达式参数 2、取消数据的排序顺序descExp参数 3、更改排序顺序参数语法 举例:

润乾报表实现预置分组报表及改进

润乾报表实现预置分组报表及改进 预置分组报表在报表开发中比较常见而且比较棘手。所谓预置分组报表是指分组没有规律,可能是分组范围没有规律,也可能分组顺序没有规律,需要报表开发人员事先预置(固定)分组的报表。常见的预置分组报表一般有如下三类:按段分组报表、固定次序分组报表、多层固定次序分组报表。下面分别看一下这几类报表的特点,以及润乾报表的实现方法。 按段分组报表 这类报表的特点是分段的区间并未在数据库中存储需要根据相应字段(如年龄、日期)计算,并且每个分段可能会发生变化(如每年节假日所在日期可能不同),经常由用户随意指定。如:统计20-30岁,30-40岁,40-50岁各年龄段的用户数量;每年节假日(春节、端午节、国庆节)期间公路铁路承载的旅客统计。 下面通过实例说明,报表样式如下: 该报表是根据订单表统计各(预置)时间段内,各地区的订单数量、订单金额汇总。其中各时间段范围为: 【1996年圣诞前:date <= 1996-12-25 1996年圣诞--1997年国庆:1996-12-25 <=date <= 1997-10-1 1997年国庆--1998年五一:1997-10-1 < date <= 1998-5-1 1998年五一以后:date>1998-5-1】 实现 润乾报表实现该类按段分组报表主要使用ds.plot()函数,计算一个值在一个完全划分中的位置。报表模板及其表达式如下: 其中,参数arg1为日期组,默认值为:1996-12-25,1997-10-1,1998-5-1。 设置B1显示值表达式:map(to(0,count(arg1)+1),arg2),其中参数arg2为字符串组,默认值为:1996年圣诞前,1996年圣诞--1997年国庆,1997年国庆--1998年五一,1998年五一以后。 使用ds.plot()函数可以非常方便地实现上述报表,而且可以通过该函数的参数控制是否包含边界,对于分组较少并且边界包含规律的分组报表尤其适用。 不过,当段界包含不规律时则无法使用ds.plot()实现,比如上例中如果时间范围变成:

润乾报表入门

1 前言 鉴于目前报表开发没有一个统一的规范,每个开发的风格和习惯也不一致,所以动手写了这份报表开发文档,一来有助于统一大家的报表的风格,提供一些常见问题的解决方案,二来方便以后新人的学习使用。本人也是略懂皮毛,有什么错误和不足之处,欢迎大家补充修改。

2.报表工具安装 解压后运行runqian-v4.5.5-install.exe安装文件,按引导完成安装。其中,在初次打开报表文件和发布报表文件的时候(后续会提到),会提示我们需要lic文件,就是下图中的两个lic文件。 Figure 1

3.报表工具的使用 3-1 配置数据源 使用报表时需要先对数据源进行配置: Figure 2选择新建一个数据源:

Figure 3 项目中默认使用的数据源名称为reportjndi.参考图3进行配置后,点击连接,进行数据源连接,这样就完成了报表服务器与数据库的连接。 3-2 新建报表 目前的报表形式分为两部分,一是用来显示查询结果的“报表名.raq”文件,另一个是用来提供查询条件的“报表名_arg.raq”文件。我们只需要在保存文件的时候,按上述格式命名,打开.raq文件时,会自动打开相关的_arg.raq文件。 3-3 结果显示报表设计 首先新建一张报表,直接点击左上角工具栏上的即可。按照给定的表样设计好报表名名、列名。如下图,这里提供一种样式当做参考模板,如客户无特殊需求,希望各开发按照统一的样式标准进行设计,有助于提高所有报表的统一性,后面还会提到一些规范,希望大家也可以遵守起来。

Figure 4 报表名这一行,采用黑色、二号字,加粗。列名采用白色、三号字,加粗,背景色使用淡紫色(颜色相近即可)。若每一列下面还要分列,则使用黑色、小三号字,结果数据使用黑色、四号字。 Figure 5 设定好报表样式后,开始根据逻辑进行取数,设置每一列的宽度时,如果需要在一行中完整显示的,要选择“按单元格内容扩大”,并去掉“自动换行”。

润乾报表批量打印实例

报表批量打印开发全过程(从零开始) 第一步:安装报表开发工具 下载地址: ftp://172.18.33.219/URP开发必备软件/报表/可执行文件/报表工具客户端设计器的安装文件将该目录下的文件下载到本地并安装 目录内的”江苏金智内部开发版设计器v355.dat”注册用 第二步:开发报表 一般是在现有的报表基础上修改出自己的报表,这样可以快一些,这些报表可以从报表服务器上下载到, 地址:https://www.doczj.com/doc/cb12538217.html,:9093/report/console/index.jsp host文件:172.18.33.250 https://www.doczj.com/doc/cb12538217.html, 用户名:amadmin/11111111 (1)配置数据源,数据源可以通过报表控制台查询

(2)进行宏定义(类似于系统变量,将来可以通过外部页面传递进报表) (3)配置数据集(可以使用宏定义的变量)

(4)开发报表 第三步:将开发好的报表上传至报表服务器(1)找到要上传的位置,点击新增报表

(2)选择本地报表,完成后点击添加完成报表添加

第四步:开发批量打印程序,一般界面如下图所示 批量打印逻辑:先检查是否勾选,若勾选则打印勾选记录,若不存在则检查查询条件是否为空,不为空则打印所有满足查询条件的记录,否则提示“请选择要打印的记录” 涉及的文件: 开发服务器中:swms.propertie,BGTAG.jsp,JB.jsp 报表服务器中:batchPrint.jsp (1)swms.propertie文件中增加报表服务器打印地址 #报表服务器打印地址 REPORT_PRINT=https://www.doczj.com/doc/cb12538217.html,:9093/report/run/reportJsp/batchPrint.

FineReport与润乾报表的比较

fineReport报表与润乾报表的比较 一.概述 通过对合肥警综业务功能和客户需求的分析,需要定制开发针对合肥警综平台的报表系统。考虑到人力资源和开发成本,目前的合肥警综开发项目组依托自身资源想要开发一套报表系统,难度高、代价大、可复用性低,通过多方协商和研讨,最终确定使用第三方报表工具生成报表并集成到合肥警综系统中。目前国内主流报表系统主要有FineReport报表系统和润乾报表系统,下面对这两款报表工具进行全面的分析和对比,以供后来者技术选型做参考。 二.优缺点比较 fineReport与润乾报表工具的优缺点比较主要以表格的形式展现 表1 fineReport与润乾比较表 比较范围报表FineReport 润乾 参数设计对比参数的定义与引用(定义 参数形式:SQL语句定义、 报表参数定义、单元格中 直接引用) 定义参数的形式相互独立,根据 需要定义 须现在报表参数中定义参数,然后 在单元格或SQL语句中引用参数预定义参数编辑控件支持不支持 拖拽式设计报表参数 支持从预定义控件中点击然后拖 入相应的单元格 需要对每个单元格定义编辑器,如 果参数较多工作量较大,影响工作 效率 参数控件风格支持将近20种编辑风格仅支持6中编辑风格 展示功能对比树状报表展现(组织递归 树) 支持通过添加树状展现,不需 要写代码 支持需要通过编写繁琐代码实 现 单元格形态(根据数据字 典显示相应的数据) 支持 不支持但有设置显示值的功能, 功能不够强大 单元格绑定数据和数据过 滤(在制作报表的时候需 要将数据放到单元格中, 设置他的扩展属性。如果 较简单只需要进项简单的界 面设置,在单元格过滤中添加过 滤条件即可 较复杂需要在单元格内写表达 式传参数的方式

润乾报表基本介绍

润乾报表3.0介绍 润乾报表 3.0是用于统计报表制作及报表及数据填报的大型企业级工具软件。产品首次成功解决了报表单元格与关系数据库之间的关联规律性,特别适合于中国式报表的填报和统计。 一、产品优势 1.绘制方便 润乾报表采用类EXCEL的绘制方式,真正做到所见即所得,把程序员从繁重且无聊的报表格式设置工作中解脱出来,极大的提高的表格绘制的方便度和效率,产品特有的EXCEL导入功能(包括格式)可充分利用业务人员原有积累。 2.数据模型先进 润乾报表独创的数据模型首次成功地解决了中国报表中单元格与数据字段之间的弱关联性,彻底打破传统行式报表方案,报表行列完全对称,特有的层次扩展机制使多层分组及交叉报表制作非常简单,提供针对关联格的跨行跨组运算,很容易计算小计、同期比等数据。同一报表中支持多个异构的数据源,允许报表各片之间无关,可用多个简单的数据集成组合出复杂报表,程序员无须再为每张报表编程(脚本或存储过程)或写复杂SQL准备数据。

3.输出能力丰富 润乾报表每个单元格属性均提供条件控制,如颜色、行高、是否可见等均可与格内数据相关;支持代码显示值对应、多种数据格式、图片文件和图片字段的处理。产品提供十几种各类统计图,支持PNG/GIF/JPG三种格式。每张报表均可生成HTML、EXCEL、PDF三种输出格式(输出结果完全不失真,包括其内的统计图)。单元格与统计图例均可加带参数的链接从而实现数据钻取功能,多层报表可在线收缩展开。

4.打印控制强大 润乾报表提供强大的打印控制功能,按行数和纸张大小分页分栏或强制分页,表头自动重复(包括左表头),允许一张纸上打多个报表,提供末页补足空行。可采用像素和毫米两种计量单位,独创的底图描绘功能以支持套打; 5.集成性好 润乾报表采用纯JAVA开发,利用服务器端提供丰富的API调用和标记可完全无缝地嵌入到基于J2EE的应用程序中(可看作应用程序员自己写的代码),程序员可更换报表的数据库连接和数据源、采用应用服务器的连接池管理;设计器也提供外置的数据源和数据字典定义,可由应用程序员提供这些信息。 6.特色填报功能 除统计报表外,润乾报表还提供数据填报功能,填报表中可加入跨行跨表的合法性检查规则,支持自动计算,与数据库表关系定义灵活,可同时写入多表,支持自由式填报(每表一条记录)、行式填报(每行一条记录)和交叉表填报(每格一条记录),支持多级填报(填报表部分数据可来自其它数据库的汇总表)。

润乾所有问题汇总

参数和宏 参数在SQL 语句中如何使用? 答:在sql 语句中需要用到参数的地方,写上"?",然后在参数的tab 页中,根据?的顺序,依次写入含参数或者不含参数的表达式,如下图所示: 参数能在单元格中使用吗?和在SQL 语句中的用法有什么区别? 答:可以,直接引用参数名即可,把参数作为表达式的一个变量来使用,例如:=arg1+1 sql 语句中写上 问号 根据问号顺序写 入含参数的表达 式 宏和参数有什么区别?怎么使用宏? 答:参数是有数据类型的变量,在报表运算过程中作为变量来使用。宏是一个字符串标识,没有数据类型,报表运算之前,引擎会搜索报表定义,检索到宏名,替换成宏值,全部替换结束后,才进行报表运算。 宏的引用方式:${macroName} 宏和参数在网页中如何传递? 答:方法一:通过tag 标签来传递, 参数及宏的个数应该与报表中的参数及宏个数相同,参数名及宏名大小写一致。 如果参数值或宏值是变化的,那么应该先在JSP 代码中将参数串拼好,再传入Tag 中, 如下所示: <% String params = "param1=" + value1 + ";param2=" + value2 + ";" … … ";macro1=" + value1 + … … %> WEB 发布时,如果我自己定制参数输入页面,如何把参数值传递给报表? 答:在jsp 中获得参数值,然后先在JSP 代码中将参数串拼好,再传入Tag 中,如下所 示: <% String params = "param1=" + value1 + ";param2=" + value2 + ";" … … ";macro1=" +

润乾报表查询所有汇总

润乾报表查询手册 整理:Yangmc 1.怎么实现报表中行(列)的按条件隐藏? 在报表设计器中,选择相应报表的主格对应的单元格,在其属性“是否隐藏本行”的表达式中输入if(ds1.count()==0,true,false),具体用法请参考润乾报表的函数帮助。(设计器中的函数帮助查看对应函数的用法) 2.怎么实现报表与jsp文件的无缝结合? 在Tag页面中输入,但是在页面顶部还是有一块空白区域,经检查发现是多了一个无用的

所制。 3.报表中参数传递步骤 首先,保证报表中设计没问题,具体表现是在设计器中浏览要达到目标。其次,在解析报表文件的jsp文件的<% …%>设置参数,具体设置参考testinput.jsp。最后,在连接中设置传递参数值。如%root%testinput.jsp?report=””?¶m1=””+¶m2=””+ … 4.报表样式设计 报表样式设计是在设计器中进行的,通过相应的前景颜色或背景颜色来设置颜色样式。通过相关的属性设置其他的样式。基本可以满足开发的需要。 5.层效果设置 选中要实现层效果的行(1,2,3,……)或列(A,B,C,……),在对应行类型或列类型的属性值中选择值(表头区,标题区,……)。在网通项目应用中,我们是把表头设置在jsp页面中,这样也可以实现我们需要的效果。至于具体怎么设好,可以根据具体应用以及方便性来实现。 6.显示特殊字符 如果想要显示特殊字符,最好是用英文中的特殊字符,如果用GBK中的特殊字符,在设计器中没有问题,但是在发布的时候显示为问号(?)。 7.单元格扩展 只要扩展是向下(上)扩展的,子单元格设置可扩展属性时应该设置左主格(不管父单元格在子单元格的上、下方,还是在左、右方);同样如果是扩展是向右(左),子单元格设置可扩展属性时设置上主格(不管父单元格在子单元格的上、下方,还是在左、右方)。 8.润乾报表在JBOSS中的发布 总体来说,在JBOSS中发布跟在TOMCA T发布基本完全一样,只需要将TOMCAT发

相关主题
文本预览
相关文档 最新文档