Crystal Reports错误地打印重复数据

时间:2014-01-17 18:06:10

标签: crystal-reports crystal-reports-2008

我正在修改打印可选报告卡注释的子报表。提供的数据(通过存储过程)采用这种格式(为简洁起见):

StudentID / Grade / CourseNum / ReportCode / CName     / Comment
9999991   / KG    / EA0_AM1   / M1         / T1Comment / Pam is good!
9999991   / KG    / KP0_PM1   / M1         / T1Comment / Pam is okay!
9999992   / 3     / EA3_AM1   / M1         / T1Comment / Joe is good!
9999993   / 5     / EA5_AM1   / M1         / T1Comment / <null>

如果学生不在幼儿园,我想要打印的唯一评论是CourseNum =“EA?_AM1”。但是,如果他们在幼儿园,则评论应从“EA0_AM1”,“EA0_PM1”,“KP0_AM1”和“KP0_PM1”拉出,并且这些评论应该连接在一起。原始报告只打印来自“EA0_AM1”或“EA0_PM1”的评论,但不是两者都打印(它不知道其他两个幼儿园班级,并且它使用了一个总计来查找评论的最大值),但是在四个潜在的班级中,有两个潜在的教师,今年他们希望他们的评论出现在成绩单上。我认为这不重要,但这是记录选择公式:

(Select {?Marking Period}
    Case '1' : {ReportCode} = 'M1'
    Case '2' : {ReportCode} in ['M1', 'M2']
    Case '3' : {ReportCode} in ['M1', 'M2', 'M3']) and
(Select {Grade}
    Case 'KG': {CourseNum} in ["EA0_AM1", "EA0_PM1", "KP0_AM1", "KP0_PM1"]
    Default  : {CourseNum} like "EA?_AM1")

{?MarkingPeriod}指的是我们感兴趣的三个月。)

我遇到的问题源于我们想要分别打印T1,T2和T3注释的事实。我在Abhilash Kumar的回答中找到了我的解决方案的开头:http://scn.sap.com/thread/3195910。基于他对别人问题的回答,我创建了一个公式 GetAllCommentsT1

WhilePrintingRecords;  
stringvar array arrT1;  
numbervar iT1;  
if not(({Comment} in arrT1) and ({CName} like "T1*")) then  
(  
    iT1 := iT1 + 1;  
    redim preserve arrT1[iT1];  
    arrT1[iT1] := {Comment};  
);  
arrT1[iT1]  
除了“T1”的所有实例分别用“T2”和“T3”替换之外,

GetAllCommentsT2 GetAllCommentsT3 是相同的。我将这三个公式放在详细信息部分中(此部分被禁止:只启用了组页脚2a到2d)。

为了显示结果,我创建了三个公式( DisplayT1Comments DisplayT2Comments DisplayT3Comments )。所有都与此类似:

WhilePrintingRecords;  
stringvar array arrT1;  
join (arrT1, CHR(13) + CHR(13))

将“T1”替换为“T2”或“T3”。 DisplayT1Comments 放置在组页脚2b中, DisplayT2Comments 放置在组页脚2c中, DisplayT3Comments 放置在组页脚2d中。

使用本问题开头提到的数据,对于StudentID:999991 DisplayT1Comments 是“Pam很好!\ n \ nPam没关系!”,这正是在Group Footer 2b中打印的内容。由于尚未输入T2或T3注释(直接在数据库中验证),我希望 DisplayT2Comments DisplayT3Comments 都为空。但是,当我运行子报告时,所有三个页脚的内容都显示“Pam很好!\ n \ nPam没关系!”

任何想法我做错了什么?或者也许建议一个更好的解决方案(即:一个有效!)来解决我的问题?谢谢!

1 个答案:

答案 0 :(得分:0)

我的问题是一个愚蠢的逻辑错误:读取的行

if not(({Comment} in arrT1) and ({CName} like "T1*")) then

应该没有移动到第一个括号内,所以它否定了({Comment} in arrT1),而不是整个事物。这就是我盲目地匆匆修改现有代码而不是坐下来思考一下。感谢那些要求澄清的人。