如何在报表最后一页打东西及系统的一个类似小方法
来源:互联网 发布:mac什么浏览器好用 编辑:程序博客网 时间:2024/04/29 20:27
在做报表是发现系统会使用一种firstlast EDT的数据来判断是否打印footer,现在和大家分享一下:
在路径:AR->设置->表格->表格设置 下得到如下配置面板:
可以看到group:金额 下有一个字段:合计,这里选择的是尾页。这个字段的数据来源于表:CustFormletterParameters. TotalsFirstLastPage。我们这里设置的是尾页,即FISTLAST::LAST.
系统中有一个报表中用到了这个设置(得谢谢micky的帮助!),报表名为:CustCollectionJour
它会设置两个标志:BOOLEAN printFooter,showFooter. Init 方法时将printFooter设置为true。
然后重新了fetch,其中代表性的代码如下:
boolean fetch()
{
……
queryRun = new QueryRun(this.query());
while (queryRun.next())
{
showFooter = true;
custCollectionLetterJour = queryRun.get(tablenum(CustCollectionLetterJour));
……
if (!this.send(_custTable))
{
break;
}
printFooter = this.totalsPage(FirstLast::First, showFooter);
……
this.send(custCollectionLetterJour);
……
method send run several times here
……
if (element.page() != 1)
{
printFooter = this.totalsPage(FirstLast::Last, showFooter);
}
else
{
printFooter = showFooter;
}
……
element.newPage(true);
element.page(1);
}
return true;
}
其中调用到了方法:
boolean totalsPage(FirstLast firstLast, boolean printNow)
{
return totalsFirstLastPage == firstLast ? printNow : false;
}
在该方法中totalsFirstLastPage是从表CustFormletterParameters. TotalsFirstLastPage的值。
Footer的excuteSection被重新为:
void executeSection()
{
if (printFooter)
{
super();
printFooter = false;
}
}
整个逻辑类似这样:
首先printFooter和showFooter是true,每拿到一条JournalHeader,先会执行
printFooter = this.totalsPage(FirstLast::First, showFooter);
返回始终是false,所以在下一次设置printFooter前始终不会执行footer的excuteSection的super,也即不会打印footer
当与此Header相关的所有记录、信息都打印完了,这时候执行到了
if (element.page() != 1)
{
printFooter = this.totalsPage(FirstLast::Last, showFooter);
}
else
{
printFooter = showFooter;
}
即在执行到这里之前,即使记录多换页了,footer是不被打印的。这里判断是不是已经不在第一页了,如果不是第一页,执行
printFooter = this.totalsPage(FirstLast::Last, showFooter);
会将printfooter设置为true,所以footer要被打印了。如果是第一页,执行
printFooter = showFooter;
由于showFooter的值在初始后就没有被改动过,所以也返回true,结果就是不管怎么,到这里footer都是要被打印的。
在此之后
element.newPage(true);
element.page(1);
即新开一页,重复上面所提的的逻辑。
之所以要去看这个东西,是因为Micky当时的建议是这样可以设置是否在最后一页打东西。从这个结果看,如果while (queryRun.next())并非执行一次,那么这条路是行不通的。就我目前的了解,在执行完之前是没办法在代码中得到总页数的。
如果有需要只在最后一页执行一些代码,完全可以在
while (queryRun.next())
{….}
之后放入你的处理逻辑。While执行完了当然报表的主体内容也就打印完了。
以上是我个人的理解,希望大家多指正!谢谢!
- 如何在报表最后一页打东西及系统的一个类似小方法
- 在分页后web报表的最后一页补足空行的方法
- 一个类似Gallery的东西
- eXtremeComponents 的最后一页
- Swing做一个类似红绿灯的东西
- oracle 中某月的第一天,最后一天,前一个月的第一天,最后一天,类似方法
- [SSRS / RV](.rdlc报表)隐藏第一页或最后一页的页眉和页脚
- 一个小的·东西
- Datagrid里面如何捕获前一页下一页最后页最前页的事件?
- 如何在小方框上打对号
- 类似BeanUtils的东西
- 如何打patch 及git 打patch 失败的处理方法
- 如何删除word文档最后一页空白页
- CrystalReport在最后一页底部打印签名
- 转载一个李神的东西(打一下脸)
- 如何解决latex中图表在明明页面还有空白部分的情况下自动调整到最后一页的问题
- 系统会在2秒钟后,自动跳到下面最后一个连接?(实现方法)
- jXLS:一个支持类似jstl标签的excel报表工具包
- abcd
- 关于六款WEB上传组件性能测试与比较 [zt]
- javascript函数库大全
- linux学习资源
- LINQ学习篇(2) -- 支持 LINQ 的 Visual Basic 功能
- 如何在报表最后一页打东西及系统的一个类似小方法
- .NET中通过垃圾收集器(GC)对资源进行主动释放示例
- Web 2.0时代垂直型B2B电子商务网站解决方案
- TreeView刷新折叠问题
- 状态模式(State)
- 关于at end of
- 基类指针、派生类指针与他们的关系
- 几种文件系统的介绍
- 使用BinaryFormatter()序列化对象方法