2013-04-12 93 views
0

我写具有以下stucture一个crytal报告格式问题:Crystal报表与公式字段

Group 1: School 
    Group 2: Student 
     Group 3: Category 
      Details 

我想详细分成与公式字段两个单独列。这工作正常,除了其中一个公式字段打印在另一个之下,我无法弄清楚如何使它们在同一层上打印。

它看起来像这样:

Category A  Category B 
detail 1 
detail 2 
       detail 1 
       detail 2 
       detail 3 

我希望它看起来像这样:

Category A  Category B 
detail 1   detail 1 
detail 2   detail 2 
       detail 3 

我觉得我失去了一些东西很简单,谁能帮帮我!

回答

0

不幸的是,这并不简单。问题是,由于数据按类别分组,因此它会在下一个类别之前显示所有类别。即使你采取了按类别分组,你还是会落得像数据:

Category A  Category B 
detail 1 
       detail 1 
       detail 2 
detail 2 
       detail 3 

有一种方式来获得它正是你想要的方式,但每个类别下的整个结果集将被放入每个类别的一个字段中。如果您在屏幕上打印或查看它,这不是问题,但导出到Excel会将每列放入一个单元格;像这样:

Category A  Category B 
+---------+  +---------+ 
|detail 1 |  |detail 1 | 
|detail 2 |  |detail 2 | 
+---------+  |detail 3 | 
       +---------+ 

为了做到这一点,我们会创造什么基本上是一个文本磨合总场(或两个)。首先,报告标题中的初始化程序:

WhilePrintingRecords; 
Global StringVar CatA := ""; 
Global StringVar CatB := ""; 
""; //print nothing on screen 

然后,在详细信息部分中更新。细节部分本身实际上是隐藏的(而不是被取消)。

WhilePrintingRecords; 
Global StringVar CatA; 
Global StringVar CatB; 

If {Table.Category} = "Category A" 
    //Chr(10) + Chr(13) is a return/newline 
    Then CatA := CatA + Chr(10) + Chr(13) + {Table.Detail}; 

If {Table.Category} = "Category B" 
    Then CatB := CatB + Chr(10) + Chr(13) + {Table.Detail}; 

""; //print nothing 

最后,相关的类别一切完成后(我假设在组2:学生页脚),打印全局变量的结果。因此,对于A类:

WhilePrintingRecords; 
Global StringVar CatA; 

你将不得不确保结果字段设置为Can grow

+0

EvilBob,这是一个很好的答案!我将在一个实现上述想法的版本上工作。我结束了使用子报表,但我有六个,所以你可以猜测它运行非常缓慢!希望你的方式能更快地工作。 –