Вопрос

Стандартная форма фильтрации в отчете

Добрый день!

Есть Террасофт 3.3.2

Не понятно как вывести стандартную форму фильтрации для отчета FastReport и как указать в это форме по каким поля фильтровать

Нравится

23 комментария

См., как сделано в стандартном отчёте «Взаиморасчеты», используемом в разделах «Контрагенты» и «Операции». Там есть карточка 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 нет такой кнопки «Установить фильтр»:

Это может быть доработка, без её анализа сложно сказать, что делаете не так.

Я имел ввиду кнопку "Установить фильтры" в меню редактора FastReport

Кнопка между Обновить и Выберите родительский отчет

 

Вот еще скриншоты и исходники

Посмотрите, как сделана фильтрация для обычных отчётов, вроде «Адресной книги контрагентов». Там в sq, по которой строится ds отчёта, предусмотрены соответствующие фильтры.

Добавил фильтр в запросе не помогло.Не понятно как привязать параметры из формы фильтрации как запросу

есть идеи в чем проблема?

 

На скриншоте окна фильтров их видно намного больше, чем Вы настроили в запросе.

Я настроил пока то что пытался фильтровать. Зачем настраивать дальше если даже то что настроено не работает?

Посмотрите в профайлере, какой запрос идёт в базу. Может, в sq не добавлено или добавлено не так это поле.

WHERE(NOT (([tbl_Task].[OwnerID] IN (@P1)))

что такое @P1?

проблема в NOT

буду смотреть как она появляется

 

Зверев Александр спасибо за Profiler

@P1 — параметр, там в конце запроса передают через запятую их значения.

не пойму передается NOT хотя в фильтре стоит "="

Возможно, закешировалось, попробуйте изменить туда-сюда и пересохранить схему.

помогло. спасибо

Показать все комментарии