доступ к предыдущим полям записи в отчетах о кристаллах

Я показываю оценки для записей студентов. Они сидят в более низком году (AS ...), затем выбирают продолжить определенные курсы до верхнего года (A ...). Это означает, что у меня есть следующий набор данных для каждого ученика:

+----------------------+-------+-----------+-----+
|            Name      | Grade |    End    | Code|
+----------------------+-------+-----------+-----+
| A Business           | C     | 06-Jul-12 | BUS |
| A English            | B     | 06-Jul-12 | ELL |
| A History            | C     | 06-Jul-12 | HIS |
| AS Business Studies  | E     | 08-Jul-11 | BUS |
| AS Critical Thinking | B     | 08-Jul-11 | CRT | <-- lower year only
| AS English           | D     | 08-Jul-11 | ELL |
| AS History           | F     | 08-Jul-11 | HIS |
+----------------------+-------+-----------+-----+

Для каждой студенческой записи я хочу отображать оценки только на уровне А и АС. В приведенном выше примере, который будет подавлять AS Critical Thinking:

A Business           | C
A English            | B
A History            | C
AS Business Studies  | E
AS English           | D
AS History           | F

Без редактирования базового набора данных существует способ, которым Crystal Reports может подавлять те записи, которые отображаются только как классы AS? Например:

If Code not present in records AND Name starts with AS
  Suppress
Else
  Display
1
nl ja de
Вы заботитесь о заказе? Было бы проще группировать код курса, но тогда ваш отчет больше не будет сортироваться по имени класса.
добавлено автор Ryan, источник
Правильно, но подходит ли вам порядок, который классы кажутся для каждого студента?
добавлено автор Ryan, источник
Извините, что добавил, что каждый ученик имеет один из этих списков записей. Я постараюсь сделать вопрос немного яснее
добавлено автор pluke, источник
было бы здорово, если бы курсы A прошли курсы AS. Но это не слишком большой кошмар, если они не
добавлено автор pluke, источник

2 ответы

Предполагая, что все значения «A» входят до значений «AS», я бы использовал массив для хранения найденных кодов.

Во-первых, инициализируйте массив, это может быть в заголовке отчета или если результаты сгруппированы по студенту в заголовке группы студентов.

WhilePrintingRecords;
Global StringVar Array CodesFound;

Redim CodesFound[1];

CodesFound[1] := "";

//print nothing
"";

Затем обновите список в деталях

WhilePrintingRecords;
Global StringVar Array CodesFound;

If Left({table.Name},2) = "A "
    Then (
        If CodesFound[1] = ""
            Then (
                CodesFound[1] := {table.Code};
            )
            Else (
            Redim Preserve CodesFound[UBound(CodesFound) + 1];
        CodesFound[UBound(CodesFound)] := {table.Code};
        );
    );
//print nothing
"";

Наконец, в разделе условного подавления:

WhilePrintingRecords;
Global StringVar Array CodesFound;
Local BooleanVar found := false;
Local NumberVar i;

If Left({table.name},2) = "AS"
    Then (
        For i := 1 to UBound(CodesFound) do (
            If CodesFound[i] = {table.Code}
                Then found := true;
        );
        //suppress if not found
        Not(found);
    )
    Else
       //Not an "AS", don't suppress
        false;
2
добавлено

** редактировать **

Лучшим решением для предполагаемого вопроса было бы объединение логической таблицы в поле кода:

-- Oracle syntax
WITH

V AS (
  SELECT Name, Grade, End_Date, Code
  FROM   ...
)

SELECT *
FROM   V
INNER JOIN V V2 ON V.Code=V2.Code
  AND SUBSTR(V2.Name,1,2)='A '

Если необходимо:

Добавьте форму условного подавления в раздел «Подробности»:

IsNull({table.Code}) AND Left({table.Name},2)="AS"
1
добавлено
Ваша интерпретация кажется правильной, но вопрос OP никоим образом не напоминает этого.
добавлено автор craig, источник
Это отвечает на последнюю часть вопроса, если это само по себе, но на самом деле это не то, что ищет OP. Он/она не хочет отображать строку «AS Critical Thinking», потому что нет строки «A» с кодом критического мышления («CRT»).
добавлено автор EvilBob22, источник
Мне пришлось прочесть его пару раз, чтобы туда добраться.
добавлено автор EvilBob22, источник