如何进行每页数据的汇总


在我以前的一篇文章中,我错误的使用了运行时总计的形式来实现每页的汇总
因为当时比较粗心,没有注意到使用该方式其实是实现了当前页之前的所有页面数据的汇总
后来也一直没有找到合适的方法

最近在做一个应用的时候,突然意识到问题的所在
主要是我们太局限于用一个公式来解决所有的问题。
其实我们可以使用多个公式配合来解决。

思路如下(Crystal语法):
1:用一个变量mySum来累计页面数据 “订单.订单金额”
公式@CurrentSum,放在详细资料节需要进行汇总的字段的位置

WhilePrintingRecords; 
CurrencyVar mySum; 
mySum:
=mySum + {订单.订单金额}; 

如果不需要显示,抑制显示即可

2: 在每页的页脚获取到这个变量的值(也就是该页最后一个Sum值),当然这个时候后一个mySum是前面所有数据的和,
  也就是仍然是我以前犯的错误症状 
  @CurrentPageSum 

WhilePrintingRecords; 
CurrencyVar mySum; 

3:关键所在,在每页的页眉或者页脚的位置将我们的变量重置@ResetPageSum,保证在每页的开始它都是从0开始累计的

WhilePrintingRecords; 
CurrencyVar mySum :
= 0

 

在这里对两个基本概念进行说明
WhilePrintingRecords:
这里的Printing不是指打印机打印的时候,而是水晶报表在获取完数据后将数据显示在报表上的过程

WhilePrintingRecords 强制公式将在程序打印数据库记录的同时进行计算。 
该函数也可以强制不含数据库字段和组字段的公式在打印记录的同时而不是在读取记录之前进行处理。它还强制含有数据库字段的公式在打印记录而不是在读取记录的同时进行处理。 


变量的作用域问题 :
前一篇文章里我对共享变量进行了说明,而此处则使用的是全局变量(Global)的特性
同一名称的全局变量,在报表(一个报表,不含子报表)中使用同样的内存空间,可以为报表中所有的公式使用
默认情况下,可以省略Global关键字,所以在前面的公式中没有出现这个关键字

具体请参见操作录像
https://files.cnblogs.com/babyt/CRMov20050526_1.rar

使用的是水晶报表9.2中文企业版
=========================
阿泰 20050526

posted @ 2005-05-26 23:42  阿泰  阅读(6633)  评论(13编辑  收藏  举报