Posts Tagged ‘行式填报’

动态行的自动计算

01.16.2010 by hewei - 0 Comment - 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报表工具

行式填报导入excel发生错位的问题

01.13.2010 by hewei - 0 Comment - 0
Posted in web相关技术
快逸报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能。 使用快逸报表行式填报的用户遇到这样的一个问题:行式填报导入excel,发生了错位。比如:excel的第一列本来应该导入到报表的第一列,结果却不见了,excel的第二列反而导入到了报表的第一列。如何解决呢? 解决方案 在用户的填报表中发现,需要导入excel的第一列是个合并格,将这个合并格恢复成普通单元格,就可以正确导入了。例如第一列是A1和B1的合并格,拆分就可以正确导入了。
引自:报表工具知识库
原文链接: 快逸报表:解决行式填报导入excel发生错位的问题
相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 快逸报表在瑞星2009下填报编辑框无法使用的解决办法 ; 快逸报表行式填报:动态行的自动计算
其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案web报表研究专业.net报表工具

导入excel发生错位的问题

01.01.2010 by hewei - 0 Comment - 0
Posted in web报表应用
, , , , , , 快逸报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能。 使用快逸报表行式填报的用户遇到这样的一个问题:行式填报导入excel,发生了错位。比如:excel的第一列本来应该导入到报表的第一列,结果却不见了,excel的第二列反而导入到了报表的第一列。如何解决呢? 解决方案 在用户的填报表中发现,需要导入excel的第一列是个合并格,将这个合并格恢复成普通单元格,就可以正确导入了。例如第一列是A1和B1的合并格,拆分就可以正确导入了。
引自:报表工具知识库
原文链接: 快逸报表:解决行式填报导入excel发生错位的问题
相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 快逸报表在瑞星2009下填报编辑框无法使用的解决办法 ; 快逸报表行式填报:动态行的自动计算
其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案web报表研究专业.net报表工具

行式填报

12.29.2009 by hewei - 0 Comment - 0
Posted in web报表应用

任务背景

输入页面的动态增删行是个比较头痛的问题。用户在录入数据的时候,往往希望可以动态插入、删除、添加记录,这样操作起来比较方便。 对于比较简单的清单式报表,有这样的要求,但是对于比较复杂的分组报表,或者是分片输入的报表,也同样会提出类似的要求。此时要求能够选择报表区域,针对某个区域进行增删行的操作。 新增加的行要求能够自动生成对应的编辑风格、自动计算、合法性检查等功能

面临困难

如果编程实现上述的功能,面临如下困难: - 需要记录每条记录的修改、删除、新增状态 - 需要写复杂的javascript,实现动态增删的功能 - 对于分组报表和分片输入的报表,还需要智能识别用户需要增删的是哪个报表区域,从而对相应区域进行操作。 动 态增删需要考虑的细节非常多,决不是表面上的增删行那么简单,在增加行的时候需要把编辑风格、自动计算、合法性检查等属性动态解析到新增加的行,这是一个 最复杂的功能,因为每一行的编辑风格、自动计算、合法性检查等属性不会完全一样,因为这些属性往往和当前行的一些数据值有关系。而且还有一些全局的自动计 算,可能和所有行都有关系,例如对所有行的sum操作等,这些自动计算的表达式都要动态的解析和变化。 当然,新增加的行还会有缺省值等属性,例如动态流水号等等,这些功能必然会遇到。 考虑到直接编程实现上述功能太麻烦,建议采用润乾报表的行式填报,快逸报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片 输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能,实现步骤如下:

实现步骤

  1. 设计一个填报表,把报表样式设为”行式报表”
  2. 根据业务需要,添加编辑风格、自动计算、合法性检查、流水号等属性
  3. 在jsp中发布时,往tag里添加insertRowLabel、appendRowLabel、deleteRowLabel等属性,即插入、添加、删除按钮。

于是,功能完美的行式填报完成了,请看效果图:

效果演示

row_report_input.png

引自:报表工具知识库

原文链接:谈谈行式填报

相关文章:普及报表系统功能说明 ; 好用的java开发工具 ; 数据集由内建还原为sql后没有数据 ; 利用内建数据集方便地进行快逸报表调试

其他相关内容:润乾报表 ; RAQSOFT ; 润乾商业智能解决方案 ; java报表研究

行式填报表实现批量删除

12.21.2009 by hewei - 0 Comment - 0
Posted in web报表
普通的行式填报表只可以单行删除数据,但是有很多web报表用户的业务需要批量的删除,本文就来介绍一下怎样使行式填报表实现批量删除。 实现思路: 1. 在原有行式填报报表基础上增加可以多选和全选的checkbox。 2. 编写可以实现多选和全选后同时批量删除的JavaScript并插入到发布报表的jsp中。 3. 在toolbar中添加新功能的按钮。 下面根据思路来做一个例子,实现步骤如下: 首先打开快逸例子中的/基础填报/网格式填报.raq这张填报表,点击属性-报表属性,将该报表改成行式填报,在A列执行插入列的操作,调整增加列后的新的A列宽度位置,如图所示: 快逸报表行式报表设计.PNG 其中:A4单元格在填报属性-编辑风格设置为复选框,关值为0,开值为1,A列的复选框在报表发布后将作为每行前的选择框使用。 第一步:增加全选和多选的Chekbox代码如下: < script language=”javascript”> function selcheck() { var objs = report1.getElementsByTagName(”input”); // 得到所有复选框 for(var i=0; i< objs.length; i++) { //遍历这个所有复选框结果集,对每个复选框进行操作 if(objs[i].type.toLowerCase() == “checkbox” ) objs[i].checked =event.srcElement.checked; //如果类型为” checkbox”,则对该复选框进行勾选 } } 第二步:在展现报表的jsp中增加批量删除的JavaScript 由于对报表进行页面上的全选操作使 用JavaScript来实现的,所以需要编写批量删除的JavaScript代码,大致原理:遍历选中行,将选中行依次赋值给快逸提供的 JavaScript函数currCell,调用行式填报的_deleteRow(report),依次删除,实现批量删除效果。 代码如下: < script language=”javascript”> function deleteRows(){ //创建删除函数 var report = document.getElementById(’report1′);/ /根据报表ID取得报表 for(var i=report.rows.length-1;i>0;i-){ //循环报表行数 var row = report.rows[i];/ /逐行取得每行的值 if(!row.all.tags(”input”)[0].checked) continue; //判断如果该行填报属性中的值为0则不作操作,也就是上文提到的复选框关值 var cell = row.cells[1]; //将值为1的单元格赋值给一个变量 report.currCell = cell; //设定这个变量为取选中单元格 _deleteRow(report); //对该单元格所在行进行删除 } } < /script> 第三步:页面toolbar按钮设置代码如下: 在展现报表的jsp中的< body>中加入设置全选、删除等按钮。 < table> < tr> < td style=”background-color:”> < div noWrap style=”font-family:宋体;font-size:13px;color:;”> 全选:< INPUT type=”checkbox” onclick=”selcheck()”> < span style=”cursor:pointer” onclick=”_insertRow( report1 )”>插入< /span> < span style=”cursor:pointer” onclick=”_appendRow( report1 )”>添加< /span> < span style=”cursor:pointer” onclick=”deleteRows()”>删除勾选< /span> < span style=”cursor:pointer” onclick=”_submitRowInput( report1 )”>提交< /span> < /div> < /td> < /tr> < /table> 增加了全选和多选框后的行式填报表效果: 快逸报表行式报表批量删除展现效果.PNG 这样就可以实现在行式填报中增加全选/多选的checkbox了, 大大方便了web报表用户进行批量删除的操作。

更加灵活的填报——普通报表与行式报表的结合

07.02.2009 by fengzhou - 0 Comment - 0
Posted in web报表

润乾行式填报表的动态增删行功能,对于录入记录数不固定的情况使用起来非常的方便。但是有的时候报表的样式要更加复杂些,不仅仅只是简单的行式报 表,而是以分片的形式,普通报表和行式报表相结合的报表。填报数据的时候要求仅仅一部分支持动态增删行,而另外的部分只能填写修改。

对于这种需求,润乾报表也可以很完美的解决。只需要将报表样式设置为行式报表,运算引擎会自动判断当前区域是否是行式,是否可以动态增删行。例如, 下面是一个纵向分为三片的填报表,第一片和第三片分别是订单信息和特殊说明信息,是普通的填报表;而第二片是订单明细,与订单是多对一的关系,是行式的填 报表,可以动态增删行。

1.png

在web录入界面上,当鼠标处于第一、三片区域时,若点击添加/插入行,系统会给出提示”此区域不能添加行!”;点击中间区域时,则会添加新行供输入新的明细数据。

2.png

引自:润乾报表知识库
原文链接:更加灵活的填报——普通报表与行式报表的结合
相关文章:一种实现类似excel把负数显示成红色且去掉负号的方法 ; 导入带公式excel的问题web报表的扩展功能
润乾报表出了新版统计图解决行式填报导入excel发生错位的问题
其他相关内容: 润乾商业智能解决方案 ; 商业智能BI联盟 ; Java报表 ; 报表软件

利用oracle中的序列巧解并发流水号问题

06.04.2009 by fengzhou - 0 Comment - 0
Posted in web相关技术

问题背景分析:

在行式填报表中,可以通过使用流水号来作为自增长型主键进行数据的更新。在这种情况下,多用户并发批量添加若干数据的时候,就可能会产生由于主键冲突而导致的并发插入数据失败。原因是润乾自带流水号是根据数据表的主键ID字段的max()值为基础、通过自加或自减实现递增或递减的流水号,这种流水号的递增或递减都是基于客户端的,当多用户并发的时候必然会引起冲突。这时,就需要在服务器的数据库端解决该问题。

oracle数据库提供了序列的功能,利用oracle的序列,从数据库服务器端按照一定规则直接赋值生成一个流水号,就可以解决客户端并发时流水号相同的情况。

解决思路步骤(Oracle创建序列):

一、在oracle表中创建一个序列
【1】
create sequence name
increment by x //x为增长间隔
start with x //x为初始值
maxvalue x //x为最大值
minvalue x //x为最小值
cycle //循环使用,到达最大值或者最小值时,从新建立对象
cache x //制定缓存序列值的个数

【2】
——–一个例子——–
create sequence for_test -序列名
increment by 1 -每次增加1
start with 1 -从1开始
nomaxvalue -没有最大值
nocache -没有缓存序列

【3】
———-创建测试表——
create table Test
(
TestID int primary key,
TestName varchar2(20) not null,
Tdescription varchar2(200) null
)

【4】
———-使用序列——-
insert into Test
values(for_test.nextval,’序列测试’,’这是一个序列使用的例子’)

【5】
——-序列使用结果查询——
select * from test

二、在润乾报表中创建数据集

在润乾报表中创建一个数据集,语句如下:

select for_test.nextval seq from dual //查询自己建立的序列的序列号

三、在报表单元格中使用

在需要的单元格中像一般的数据集使用一样,直接写ds.seq使用即可。这样每刷新或是查询一次,oracle会根据序列表的设置赋值。

四、基于序列seq字段创建一个流水号

在报表中创建一个流水号,在流水号的初值表达式中直接写:ds.seq*100000;具体需要的单元格中增加填报属性的流水号计算公式,设置为:++var1。这样在添加一条信息时,获取的流水号均唯一赋值。

这样,对于同一个行式填报表的大批量并发插入操作可能导致的主键冲突问题就迎刃而解了。

引自:润乾报表知识库
原文链接:利用oracle中的序列巧解并发流水号问题
相关文章:润乾报表填报:可输入的下拉框; 润乾决策分析系统润乾报表多源回填:快速实现多库多表提交数据润乾报表出了新版统计图定制填报提交的“确认”提示框
其他相关内容: 润乾商业智能解决方案 ; 商业智能BI联盟 ; Java报表 ; 润乾报表:动态改变填报更新数据的数据源 ;EXCEL和报表工具

快逸报表:行式填报增加删除当前行按钮

04.27.2009 by fengzhou - 0 Comment - 0
Posted in web报表

快逸报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能。

而且快逸报表的行式填报还提供了很强的扩展性,例如:有些客户的报表数据是从数据库中直接查询出来的,想在当前报表展现的每行最后一列加一个”删除当前行”的按钮。点击后要能够删除当前行的数据并且能够进行行式填报其他功能。

解决方案

实现思路:使用javascript函数,自定义按钮获取当前行的焦点,然后直接调用删除行的函数_deleteRow(report1)即可。

使用例子如下:delete_row.zip

Javascript函数如下:

function shanchu(btn){

//获取button所在的单元格,然后复制给当前的单元格获取焦点

var cell=btn.parentElement;

report1.currCell=cell;

_deleteRow(report1);

}

快逸报表行式填报:动态行的自动计算

04.26.2009 by fengzhou - 0 Comment - 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报表工具

谈谈.NET报表中的行式填报

03.31.2009 by fengzhou - 0 Comment - 0
Posted in .net报表相关

任务背景

输入页面的动态增删行是个比较头痛的问题。用户在录入数据的时候,往往希望可以动态插入、删除、添加记录,这样操作起来比较方便。
对于比较简单的清单式报表,有这样的要求,但是对于比较复杂的分组报表,或者是分片输入的报表,也同样会提出类似的要求。此时要求能够选择报表区域,针对某个区域进行增删行的操作。
新增加的行要求能够自动生成对应的编辑风格、自动计算、合法性检查等功能

面临困难

如果编程实现上述的功能,面临如下困难:
- 需要记录每条记录的修改、删除、新增状态
- 需要写复杂的javascript,实现动态增删的功能
- 对于分组报表和分片输入的报表,还需要智能识别用户需要增删的是哪个报表区域,从而对相应区域进行操作。

动态增删需要考虑的细节非常多,决不是表面上的增删行那么简单,在增加行的时候需要把编辑风格、自动计算、合法性检查等属性动态解析到新增加的行,这是一个最复杂的功能,因为每一行的编辑风格、自动计算、合法性检查等属性不会完全一样,因为这些属性往往和当前行的一些数据值有关系。而且还有一些全局的自动计算,可能和所有行都有关系,例如对所有行的sum操作等,这些自动计算的表达式都要动态的解析和变化。

当然,新增加的行还会有缺省值等属性,例如动态流水号等等,这些功能必然会遇到。

考虑到直接编程实现上述功能太麻烦,建议采用博计报表的行式填报,博计报表的行式填报从根本上解决了动态增删行的问题,不仅仅可以对分组报表、分片输入的报表实现多区域的插入删除,还能够动态解析编辑风格、自动计算、合法性检查等属性,实现了很智能的流水号、缺省值等功能,实现步骤如下:

实现步骤

  1. 设计一个填报表,把报表样式设为”行式报表”
  2. 根据业务需要,添加编辑风格、自动计算、合法性检查、流水号等属性
  3. 在jsp中发布时,往tag里添加insertRowLabel、appendRowLabel、deleteRowLabel等属性,即插入、添加、删除按钮。

于是,功能完美的行式填报完成了,请看效果图:

效果演示

row_report_input.png

引自:.NET报表知识库
原文连接:谈谈.NET报表中的行式填报
相关文章:高效.NET Web报表设计 ; 博计报表的几大主要功能简介 ; 通过插入局部报表更方便地做报表 ; 在.NET Web填报报表中使用下拉多选列表框
其他相关内容:面向普及的报表工具 ; RAQSOFT ; 专业.net报表打印工具研究.NET报表设计.net报表研究