Добрый день!
Есть Террасофт 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 — параметр, там в конце запроса передают через запятую их значения.
Возможно, закешировалось, попробуйте изменить туда-сюда и пересохранить схему.