【问题标题】:Crystal Reports incorrectly printing duplicate dataCrystal Reports 错误地打印重复数据
【发布时间】:2014-01-25 01:26:31
【问题描述】:

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

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" 的评论。但是,如果他们在幼儿园,则这些 cmets 应该从“EA0_AM1”、“EA0_PM1”、“KP0_AM1”和“KP0_PM1”中提取,并且这些 cmets 应该被连接起来。原始报告只会打印来自“EA0_AM1”或“EA0_PM1”的评论,但不会同时打印两者(它不知道其他两个幼儿园班级,它使用运行总计来找到评论的最大值),但是在四个潜在班级中,有两个潜在教师,今年他们希望他们的 cmets 出现在成绩单上。我认为这并不重要,但这里是记录选择公式:

(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 cmets。我在 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]  

GetAllCommentsT2GetAllCommentsT3 是相同的,只是“T1”的所有实例分别替换为“T2”和“T3”。我将这三个公式放在详细信息部分(此部分被禁止:仅启用组页脚 2a 到 2d)。

为了显示结果,我创建了三个公式(DisplayT1CommentsDisplayT2CommentsDisplayT3Comments)。都是这样的:

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

将“T1”酌情替换为“T2”或“T3”。 DisplayT1Comments 放置在 Group Footer 2b 中,DisplayT2Comments 放置在 Group Footer 2c 中,DisplayT3Comments 放置在 Group Footer 2d 中。

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

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

【问题讨论】:

  • 冗长的解释,但无法理解确切的问题。现在的问题是什么?
  • 您是否希望将每个学生的课程 # 和 cmets 连接起来?
  • 我想要做的是将幼儿园儿童可能参加的四门课程中的一门或两门的 cmets 连接起来:因为小学是学期制,所以每个学期的 cmets 需要分组三个组一起显示在单独的文本框中。我已经想出了如何通过数组变量和 if/then 逻辑来选择和分组 cmets,但是当我尝试打印出三个三个月的三个数组时,它会打印所有三个的 T1 cmets(T2 和 T3 应该没有数据)。

标签: crystal-reports crystal-reports-2008


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2012-04-26
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多