2014-09-17 4 views
1

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

Например, есть таблица под названием DailyReport. Записи в этой таблице содержат: Дата, участник, состав, описание

Подсчет должен быть для каждой команды в пределах определенного диапазона дат. Однако диапазон дат для каждого отчета/команды не будет одинаковым.


Таким образом, если диапазон дат для всех команд был последовательным, то я мог бы создать один подотчет, и сделать некоторое упорядочение полученных записей, чтобы отделить вещи в команды. Однако, с несогласованными диапазонами дат, я не могу использовать один запрос, поэтому наиболее прямое решение, которое я вижу, заключается в создании отдельных подписок и запросов для каждого диапазона каждой команды. Проблема с этим решением заключается в том, что если я решит изменить формат подзаголовков, я должен сделать это в каждом конкретном подзаголовке - много дублировать работу.

Я хотел бы создать общий запрос и подчиненный отчет. Запрос и вспомогательный отчет будут вызывать функции VB, которые возвращают соответствующее значение. Это означает, что мой родительский отчет имеет один и тот же общий отчет об этом несколько раз. Поскольку каждый подрепортаж визуализируется, я хотел бы увеличить значение за кулисами, чтобы функции, которые генерируют общий запрос и запрос в подположении, возвращают другое значение.

Однако, похоже, что не все работает в Access. Вложенные отчеты в отчете не отображаются линейно. Создается подчиненный отчет, а затем «отпечатан» на отчете, когда это требуется. Это означает, что все мои общие подписи имеют одинаковые данные.


Как я могу определить общий отчет и запрос? Затем подключите разные значения в отчет и запрос, пока отчет повторно используется несколько раз в одном и том же родительском отчете.

+0

Если вы помещаете несколько экземпляров одного и того же отчета, каждый из них может иметь свои собственные критерии фильтрации. Для базового запроса может потребоваться несколько столбцов, представляющих необходимые диапазоны дат для каждого отчета. – JeffO

+0

Вам нужно изучить свойство LinkMasterFields и LinkChildFields отчетов. Они предназначены именно для этой цели - для фильтрации субрепортажа, основанного на текущих данных в основном отчете, без каких-либо кодов или даже запросов. – pteranodon

+0

@pteranodon Yup, теперь я вижу. Это будет делать именно то, что мне нужно. Благодарю. – kimbokasteniv

ответ

0

Таким образом, цель заключалась в том, чтобы повторно использовать один и тот же под-отчет несколько раз в одном и том же родительском отчете с полной гибкостью в отношении того, как подрепорт извлекает данные.

Я разместил несколько экземпляров одного и того же отчета в родительском отчете.На подотчетах Open случае я поместил линию, как

Me.Report.RecordSource = "SELECT * FROM someTable WHERE " & getCriteria() 
nextCriteria() 

Может быть, его можно передать значение, которое идентифицирует, какой экземпляр подотчета открывается к функции getCriteria. Вероятно, как getCriteria(Me.Report.Name). Но в этом случае я отслеживал, сколько подписок было произведено в vb. К сожалению, если ваш подчиненный элемент имеет элементы управления, которые имеют источник данных, который является функцией vb, все отчеты будут показывать одинаковое значение для этого элемента управления. Чтобы обойти это, я добавил что-то вроде getSomeValue() & "As [Some Value]" в инструкцию SELECT выше. Не забудьте добавить одинарные кавычки или хэши вокруг getSomeValue(), если вы передаете строку или дату.

Это в основном, это боль. Но я не мог найти более элегантный способ сделать это.

Редактировать: Одно из основных предостережений, которое я испытываю при этом, заключается в том, что, хотя предварительный просмотр печати работает правильно, при фактической печати или экспорте в PDF некоторые вложенные отчеты не включаются. Возможно, есть что-то еще, вызывающее это ...

0

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

Вы правы, что LMF/LCF не работают в диапазонах дат, только значения. Поэтому используйте LMF/LCF для фильтра команды.

Для фильтрации диапазона дат вы можете использовать несвязанную форму, которая запускает отчет как два параметра, определенные в базовом запросе. Создайте frmLaunch и добавьте два текстовых поля minDate и maxDate. Установите для свойства Format значение Short Date, чтобы Access правильно интерпретировал их и предоставил выбор даты. Теперь измените базовый запрос, добавив два параметра Дата/Время [Forms]![frmLaunch]![minDate] и [Forms]![frmLaunch]![maxDate]. Теперь найдите свое поле даты и установите его критерий Between [Forms]![frmLaunch]![minDate] и [Forms]![frmLaunch]![maxDate]. Добавьте кнопку frmLaunch, которая запускает код DoCmd.OpenReport "YourReportName", acViewPreview.

+0

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

+0

Какова природа разных диапазонов дат? Если это текущий месяц по сравнению с прошлым месяцем или кварталом за кварталом, я думаю, что что-то может быть разработано. Если они являются обычным диапазоном для каждого отчета, это будет сложнее. – pteranodon

+0

Да, к сожалению, они могут быть полностью произвольными и несвязанными диапазонами. – kimbokasteniv