Подавление раздела в Crystal Reports с вложенным отчетом - PullRequest
0 голосов
/ 08 августа 2009

Я пытаюсь создать отчет в Crystal Reports 11 на основе этого SQL-запроса

ВЫБРАТЬ *
ОТ (стол) ОМ, (стол) ОЛ, (стол) С
Где OM.ORDER = OL.ORDER
AND OM.COMPANY = C.COMPANY
И (СУЩЕСТВУЕТ (ВЫБРАТЬ *
ИЗ (таблицы) OSD, (таблицы) OSDD
ГДЕ OSD.ORDER = OL.ORDER
AND OSD.LINE = OL.LINE
AND OSD.REVISION = OL.REVISION
AND OSD.DIM = OSDD.DIM
AND OSDD.SHAPE = OL.SHAPE))

Я подумал, что лучше всего начать с создания основного отчета с использованием первых двух таблиц и создания подотчета, используя раздел запроса «EXISTS», и со ссылкой на основной отчет.

В разделе «Мои данные» содержатся данные из основного отчета и подотчета. Я получаю правильные результаты для того места, где вложенный отчет возвращает значение, но я хочу иметь возможность подавить подробный раздел основного отчета, если вложенный отчет равен нулю, но я не могу найти способ ссылаться на вложенный отчет в любом формулы выбора.

Я открыт для предложений, если есть лучший способ подражать этому запросу.

Ответы [ 2 ]

1 голос
/ 08 августа 2009

Нет смысла использовать вложенный отчет, если вы не хотите видеть какие-либо данные, для которых вложенный отчет равен нулю. Вы слишком усложняете отчет.

Если вы все еще хотите это сделать, атрибут Suppress разрешает выражения. Скорее всего, вам придется использовать переменную globalvar, установить переменную на основе подотчета, но я сомневаюсь, что она будет установлена ​​до отображения строки.

0 голосов
/ 08 августа 2009

Я не уверен, какой тип базы данных вы используете, но я считаю, что вы, вероятно, можете использовать что-то вроде:

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
inner join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
inner join (table) OSDD on OSDD.SHAPE = OL.SHAPE

Это не в моей голове и не тестировалось, но идея в том, что он будет показывать все записи из OM, OL, C, OSD и OSDD, где найдены совпадения. поскольку вы не используете левое соединение в OSD или OSDD, у вас не должно быть нулевых строк.

Однако вы всегда можете изменить их на левые внешние соединения, например:

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
left outer join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
left outer join (table) OSDD on OSDD.SHAPE = OL.SHAPE

Это даст вам все строки из OM, OL и C и только строки из OSD и OSDD, в которых найдено совпадение. Затем у вас есть несколько вариантов подавления строк, которые вы не хотите видеть, например, использование формулы подавления he в эксперте раздела, как предложил rexem.

Надеюсь, это поможет.

...