Обнаружение вызывающего объекта из отчета - PullRequest
0 голосов
/ 07 сентября 2018

Есть ли какой-нибудь способ определить из отчета, какая форма вызвала отчет?

У меня есть форма для выбора нескольких критериев, которые используются для построения условия Where для различных отчетов. В отчете о загрузке я проверяю, открыта ли форма вызова. Если он открыт, я беру критерии выбора для отображения в заголовке отчета. Если он не открыт, я отображаю такие вещи, как «Виды: все» вместо, например, «Виды: голубохвостая красотка». Это работает нормально в данном конкретном случае, но кажется немного ненадежным. Я бы предпочел знать, что именно вызвало отчет, в случае, если в какой-то будущей более сложной системе отчет может быть вызван из разных мест. Я знаю, что родительская форма доступна из подчиненной формы, но в этой ситуации это не применимо.

1 Ответ

0 голосов
/ 07 сентября 2018

У вас есть форма, в которой пользователь выбирает критерии, используемые для построения WhereCondition , которое используется для фильтрации отчета. Не просите отчет пересмотреть критерии формы, чтобы создать соответствующий заголовок для себя. Создайте строку заголовка в той же процедуре, которая создает WhereCondition . Затем передайте эту строку как OpenArgs при вызове OpenReport.

Например, если нет ограничений на виды:

strHeader = "Species: All"

Или для выбранного вида:

strHeader = "Species: Blue-tailed damselfly"

Затем передайте strHeader при открытии отчета:

DoCmd.OpenReport ReportName:="YourReport", _
    View:=acViewReport, _
    WhereCondition:=strWhere, _
    OpenArgs:=strHeader

А в событии загрузки отчета вы можете проверить, есть ли у вас что-то в OpenArgs и использовать его:

If Len(Me.OpenArgs) > 0 Then
    ' do what you want with it '
End If

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

Вы можете даже назначить соответствующий заголовок, когда критерии отчета заранее стандартизированы. Например, командная кнопка с заголовком «Просмотр вчерашних дополнений»:

strWhere = "[Date_Added] >= (Date() - 1) AND [Date_Added] < Date()"
strHeader = "Species Added Yesterday"
DoCmd.OpenReport ReportName:="YourReport", _
    View:=acViewReport, _
    WhereCondition:=strWhere, _
    OpenArgs:=strHeader
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...