我正在修改打印可选报告卡注释的子报表。提供的数据(通过存储过程)采用这种格式(为简洁起见):
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没关系!”
任何想法我做错了什么?或者也许建议一个更好的解决方案(即:一个有效!)来解决我的问题?谢谢!
答案 0 :(得分:0)
我的问题是一个愚蠢的逻辑错误:读取的行
if not(({Comment} in arrT1) and ({CName} like "T1*")) then
应该没有移动到第一个括号内,所以它否定了({Comment} in arrT1)
,而不是整个事物。这就是我盲目地匆匆修改现有代码而不是坐下来思考一下。感谢那些要求澄清的人。