Добрый день!
Есть Террасофт 3.3.2
Не понятно как вывести стандартную форму фильтрации для отчета FastReport и как указать в это форме по каким поля фильтровать
Нравится
См., как сделано в стандартном отчёте «Взаиморасчеты», используемом в разделах «Контрагенты» и «Операции». Там есть карточка wnd_MutualSettlements, в её скрипте wnd_MutualSettlementsScript при нажатии «ОК» срабатывает код, где налагаются фильтры и запускается отчёт:
function btnOkOnClick(Control) {
if (edtStartDate.IsNull || edtDueDate.IsNull) {
ShowWarningDialog("Поле \"Дата с\" и \"дата по\" являются обязательным для заполнения");
return false;
}
var StartDate = new Date(edtStartDate.Value);
var DueDate = new Date(edtDueDate.Value);
if (StartDate.getTime() > DueDate.getTime()) {
ShowWarningDialog("Поле \"Дата с\" не может быть дольше поля \"дата по\"");
return false;
}
StartDate.setHours(0, 0, 1);
DueDate.setHours(23, 59, 59);
edtMultiSelectOnChange(edtDebtorCreditor);
var ds_AccountInMutualSettlements =
MutualSettlementsScript.ReportPreviewer.DatasetByUSI('ds_AccountInMutualSettlements');
ds_AccountInMutualSettlements.Close();
var ds_MutualSettlements =
MutualSettlementsScript.ReportPreviewer.DatasetByUSI('ds_MutualSettlements');
ds_MutualSettlements.Close();
EnableDatasetFilters(ds_AccountInMutualSettlements, false);
EnableDatasetFilters(ds_AccountInMutualSettlements, true, 'IsActual');
EnableDatasetFilters(ds_MutualSettlements, false);
EnableDatasetFilters(ds_MutualSettlements, true, 'IsActual', 'DebtorCreditorID');
MutualSettlementsScript.Report.Attributes('StartDate') = DateToStr(StartDate);
MutualSettlementsScript.Report.Attributes('DueDate') = DateToStr(DueDate);
ApplyDatasetFilter(ds_AccountInMutualSettlements, 'StartDate',
StartDate.getVarDate(), true);
ApplyDatasetFilter(ds_AccountInMutualSettlements, 'DueDate',
DueDate.getVarDate(), true);
ApplyDatasetFilter(ds_MutualSettlements, 'StartDate',
StartDate.getVarDate(), true);
ApplyDatasetFilter(ds_MutualSettlements, 'DueDate',
DueDate.getVarDate(), true);
if ((!!MutualSettlementsScript.DebtorCreditorIDs) &&
('length' in MutualSettlementsScript.DebtorCreditorIDs) &&
(MutualSettlementsScript.DebtorCreditorIDs.length > 0)) {
ApplyDatasetIncludeFilter(ds_AccountInMutualSettlements,
'DebtorCreditorIDs', MutualSettlementsScript.DebtorCreditorIDs, true);
}
SendNotify(Self, MSG_OK);
}Карточка указана в настройках записи в разделе «Отчёты».
На сколько я понял тут описана доработанная форма фильтрации,а имел ввиду стандартная которая формируется кнопкой "Установить фильтр" в окне FastReport. Форма с набором фильтров у меня сейчас формируется, отчет работает, но единственное что не работает это фильтрация записей отчета по выбранным фильтрам. Как передать в отчет параметры фильтрации?
Стандартно в 3.3.2 в окне FastReport нет такой кнопки «Установить фильтр»:

Это может быть доработка, без её анализа сложно сказать, что делаете не так.
Посмотрите, как сделана фильтрация для обычных отчётов, вроде «Адресной книги контрагентов». Там в sq, по которой строится ds отчёта, предусмотрены соответствующие фильтры.
На скриншоте окна фильтров их видно намного больше, чем Вы настроили в запросе.
Посмотрите в профайлере, какой запрос идёт в базу. Может, в sq не добавлено или добавлено не так это поле.
@P1 — параметр, там в конце запроса передают через запятую их значения.
Возможно, закешировалось, попробуйте изменить туда-сюда и пересохранить схему.