2019-1-16水晶报表技巧总结

Posted liuqifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-1-16水晶报表技巧总结相关的知识,希望对你有一定的参考价值。

第一条:合计问题,包括汇总或者是简单数量合计或者是页面行数的统计或者是页面数的统计等...

说简单点,就是3个公式
AmountReset 用于清空页合计
RunningTotal 用于累加页合计
AmountDisplay 用于显示页合计.

在“字段资源管理器”对话框中选择“公式字段”,然后单击“新建”。
将公式命名为“RunningTotal”,然后单击“使用编辑器”。
出现公式工作室,公式编辑器处于活动状态。
将以下内容输入“公式”框:
WhilePrintingRecords;
CurrencyVar Amount;
Amount := Amount + {订单.订单金额};

在公式工作室中创建“AmountReset”:
WhilePrintingRecords;
CurrencyVar Amount := 0;

在公式工作室中创建“AmountDisplay”:
WhilePrintingRecords;
CurrencyVar Amount;
该公式可用于随时显示 Amount 变量的当前值。

第二条:关于抑制显示,在【详细资料】中,有些字段不想在一些页面显示出来,可抑制显示这些字段,在后面的公式中添加:

pagenumber=1

后面的数字,可以是一个范围,填写什么数据,就抑制在那页的显示或者是那些页的显示。

 

第三条:分页问题,有按组分页或者按行分页或者分组后按行分页

按组分页:
直接在【节专家】中选择,组尾,在选择【在后面页新建页】即可。

按行分页:

在以下内容之前新建页:

IF Remainder (RecordNumber, PageNumber*5+1 )=0 then
True
Else
False
这是5行一页
在后面页新建页:
if onlastrecord then
false
else
if RecordNumber mod 10 =0 then
true
else
false
这是10行一页
后面一种方法好一点,前面可以因为总行数不同分的不整齐。

按组按行分:
【在后面页新建页】【在以下内容之前新建页】这两个地方填写公式是不一样的
报表使用了分组,一个组的数据会跨好几页,要单独显示某组显示到【第几页/共几页】
效果类似于:


这是一个综合工程,我们要逐步来拆解一下。

本文使用水晶报表2008操作,其余版本类似。

1:首先,是按照某个字段来分组
这个就不多说了,我用的是水晶报表自带示例库的产品表,用颜色字段进行分组。

2:每页显示5行数据,且每页的上都要显示组页眉,不同的组不能显示在同一页上。也就是组和组之间是的分离

(1)每页显示5行设置

如果是CR2008之前的版本,使用公式 RecordNumber Mod 5=0  
(2)每组上都要显示组页眉

(3)每个组单独占一页,不混合显示。
也就是1页显示5行,如果组a有1行,组b有2行,他们要分别占据1页,而不是合在1页上显示。

如果是CR2008之前的版本,使用公式 GroupNumber Mod 1=0  

3:使用运行时总和为每组数据单独编号


把这个运行总和字段做到模板上看看效果。分别拖到详细资料节和组页眉


可以看到,放在组页眉上的序号,其实就是在该页上第一条记录在组内的序号。

4:组内分页基本原理

现在我们能拿到单独的组内序号了,那么,怎么去用来分页呢。
想一下,假设我们每组记录数目为N(当然,N是变化的),如果存在多页的话,因为是5行一分页
那么对一个组来说,每页第一条的序号分别为1、6、11.。
也就是【5的倍数+1】。

那么我们的公式其实就出来了,
我们以每页组页眉上的那条为基准,也就是每页的第一条为基准,序号 除以 5,取整再 +1 即可。

公式如下


针对以的代码,找不到Roundup,重写:
numbervar x1;
numbervar x2;
numbervar p1;
numbervar p2;
//x1是每个组的数据条数 
x1:=  Count ({ DataTable3 .Job_No},{ DataTable3 .Job_No});
//得到总页码
p1:=round(x1/16+0.4);
//得到当前行组内序号,其实就是换后第一条的序号
x2:={#RTotal0};
//用序号外以每页的条数16,得到当前页码
p2:=round(x2/16+0.4);

if p2=0 then p2:=1;


totext(p2,0) +‘ / ‘ +totext(p1,0) 

效果如下


公式中的几个点特别说明一下
Count(字段,分组字段) 表示组小计计数
RoundUp(x)是向上取整,比如x=5则为5,5.1则为6.

 第四条:公式显示页码

‘第‘+ToText(PageNumber,0)+‘页,共‘+ToText(TotalPageCount,0)+‘页‘

这是可以显示总有几页,现在是第几页

  

  

 

以上是关于2019-1-16水晶报表技巧总结的主要内容,如果未能解决你的问题,请参考以下文章

通过代码文件使用 crostab 对象创建水晶报表

vs2008制作水晶报表

谁能帮忙弄个水晶报表显示条码CODE128的

水晶报表,c#中,怎么在Winform应用程序中设计功能载入rpt水晶报表文件?

使用物理路径在水晶报表中显示图像

水晶报表导出需要永远