Подавление раздела в Crystal Reports с помощью вложенного отчета

StackOverflow https://stackoverflow.com/questions/1246856

Вопрос

Я пытаюсь создать отчет в crystal reports 11 на основе этого sql-запроса

ВЫБЕРИТЕ *
    ИЗ (таблицы) OM, (таблица) OL, (таблица) C
    ГДЕ OM.ORDER = OL.ORDER
    И OM.COMPANY = C.КОМПАНИЯ
    И (СУЩЕСТВУЕТ (ВЫБЕРИТЕ *
            ИЗ (табличного) ЭКРАННОГО меню, (табличный) экранный МЕНЮ
            ГДЕ OSD.ORDER = OL.ORDER
            И ЭКРАННОЕ МЕНЮ.СТРОКА = OL.LINE
            И OSD.REVISION = OL.REVISION
            И OSD.DIM = OSDD.DIM
            И OSDD.SHAPE = OL.SHAPE))

Я подумал, что лучший способ начать - это создать основной отчет, используя первые две таблицы, и создать вложенный отчет, используя раздел запроса "СУЩЕСТВУЕТ" и вернув ссылку на основной отчет.

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

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

Это было полезно?

Решение

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

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 suppress в разделе expert, как предложил rexem.

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top