【发布时间】: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]
GetAllCommentsT2 和 GetAllCommentsT3 是相同的,只是“T1”的所有实例分别替换为“T2”和“T3”。我将这三个公式放在详细信息部分(此部分被禁止:仅启用组页脚 2a 到 2d)。
为了显示结果,我创建了三个公式(DisplayT1Comments、DisplayT2Comments 和 DisplayT3Comments)。都是这样的:
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(直接在数据库中验证),我希望 DisplayT2Comments 和 DisplayT3Comments 都为空。但是,当我运行子报表时,所有三个页脚都显示“Pam 很好!\n\nPam 还可以!”
任何想法我做错了什么?或者可能对我的问题提出更好的解决方案(即:一个有效的解决方案!)的建议?谢谢!
【问题讨论】:
-
冗长的解释,但无法理解确切的问题。现在的问题是什么?
-
您是否希望将每个学生的课程 # 和 cmets 连接起来?
-
我想要做的是将幼儿园儿童可能参加的四门课程中的一门或两门的 cmets 连接起来:因为小学是学期制,所以每个学期的 cmets 需要分组三个组一起显示在单独的文本框中。我已经想出了如何通过数组变量和 if/then 逻辑来选择和分组 cmets,但是当我尝试打印出三个三个月的三个数组时,它会打印所有三个的 T1 cmets(T2 和 T3 应该没有数据)。
标签: crystal-reports crystal-reports-2008