Планируете ли вы запустить свой Crystal Report из интерфейса Crystal Reports или в виде надстройки, встроенной в другую программу (вы можете, например, использовать поддержку выполнения CrystalX ActiveX Designer Designer - craxdrt.dll - в коде VB)? В этом последнем случае можно манипулировать каждым объектом отчета перед его запуском. Такие объекты, как параметры, могут быть обновлены в соответствии с вашими потребностями.
В качестве простого примера такого обновления во время выполнения моя подпрограмма печати отчета всегда будет проверять, есть ли в отчете поле с именем «printBy». Если это поле найдено, его значение будет сопоставлено с именем домена пользователя, который запрашивает отчет, и будет распечатано.
На более высоком уровне вы можете даже изменить форму строки SQL отчета, чтобы добавить специальные фильтры, которые могут быть унаследованы из вашего кода. При этом вам могут даже не понадобиться параметры: пусть ваш код добавляет значения фильтрации «на лету»
РЕДАКТИРОВАТЬ: некоторые примеры кода:
(m_rapport - это объект CRAXDRT.report, ActiveSession - мой текущий объект сеанса)
If m_rapport.ParameterFields.Count > 0 Then
For i = 1 To m_rapport.ParameterFields.Count
If m_rapport.ParameterFields(i).Name = "{?PUB_DateDebutPeriode}" Then
m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateDebutPeriode))
End If
If m_rapport.ParameterFields(i).Name = "{?PUB_DateFinPeriode}" Then
m_rapport.ParameterFields(i).AddCurrentValue CDate(DateValue(sessionActive.dateFinPeriode))
End If
If m_rapport.ParameterFields(i).Name = "{?PUB_id_Personne}" Then
m_rapport.ParameterFields(i).AddCurrentValue StringFromGUID(clientActif.id_Personne)
End If
Next i
Endif
У меня также есть другая функция для изменения источника данных отчета во время выполнения, чтобы отчеты могли выполняться на разных серверах / в разных местах.