Страница 1 из 1

Задание фильтра строкой

Добавлено: 28 Август 2014, 1:17
Lenkov
С6.3
Есть строка CFIL='AGE(S_S:DATE_R) >=36 AND S_S:ACT=1' Как ее вставить в репорт в качестве фильтра

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 1:44
Admin
Это что ли?
Фильтр в отчете
Фильтр в отчете

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 1:47
Admin
А если все таки CFIL то смотри в сторону BIND, EVALUATE и сюда:
BIND в отчете
BIND в отчете
По моему ничего не путаю. Давно не пользовался.

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 2:07
Lenkov
С6.3 АВС
Строка получается в программе и должна использоваться в качестве фильтра в репорте. EVALUATE я пытался вставлять, не проходит

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 4:01
Admin
Lenkov писал(а):С6.3 АВС
Строка получается в программе и должна использоваться в качестве фильтра в репорте. EVALUATE я пытался вставлять, не проходит
Ни черта не помню но вот так работает.
Переменные таблицы, DAT:ID и DAT:Line по моему автоматом биндятся.
Фильтр для отчета
Фильтр для отчета
2014-08-28 10-59-41 DemoReport.png (11.48 КБ) 5750 просмотров

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 5:06
Lenkov
У меня это выглядит вот так
CFIL='AGE(S_S:DATE_R) ' &VOZ &' ' &VOZ1 &' ' &'AND S_S:ACT=1'
ThisReport.SetFilter(CFIL)
Не катит

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 10:18
Admin
Lenkov писал(а):У меня это выглядит вот так
CFIL='AGE(S_S:DATE_R) ' &VOZ &' ' &VOZ1 &' ' &'AND S_S:ACT=1'
ThisReport.SetFilter(CFIL)
Не катит
там все примитивно. Все должно работать. Проверить EMBED куда вставил.
MESSAGE(CFIL) поставить... и т.д.
Параметр SetFilter передается в ViewManager от которого наследуется ProcessClass
Если косяк в BIND, отчет должен по идее ругаться.
Может быть просто в логике проблема или SetFilter не в том месте!?

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 10:29
Игорь Столяров
Lenkov писал(а):У меня это выглядит вот такCFIL='AGE(S_S:DATE_R) ' &VOZ &' ' &VOZ1 &' ' &'AND S_S:ACT=1'ThisReport.SetFilter(CFIL)Не катит
Там зависит от структуры VIEW.
Универсальный способ - полная реинициализация View при смене фильтра.

ThisReport.AddSortOrder(...)
ThisReport.AddRange(...)
ThisReport.SetFilter(...)

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 11:30
kreator
Если ещё не решили проблему. У меня так. В Методе ApplyFilter после Parent Call вставляю Embed:

Код: Выделить всё

  Process:View{prop:SQLFilter} = '((dat_uv is null) or (not dat_uv is null))'
Здесь репорт по одной таблице, поэтому префиксов нет. Думаю, с не SQL будет аналогично.

Re: Задание фильтра строкой

Добавлено: 28 Август 2014, 15:59
Yufil
А Кларионовский фильтр точно осведомлён насчёт фунцкции Age ?
У меня фильтр с пользовательской функцией не срабатывал, функция просто не вызывалась, даже будучи забинденной.

Обходил (с чувством глубокого отвращения), удалив вызов функции из фильтра и добавив в метод ValidateRecord

If not age(....) then return (record:filtered).

Re: Задание фильтра строкой

Добавлено: 29 Август 2014, 1:17
Lenkov
там все примитивно. Все должно работать. Проверить EMBED куда вставил.
MESSAGE(CFIL) поставить... и т.д.
Параметр SetFilter передается в ViewManager от которого наследуется ProcessClass
Если косяк в BIND, отчет должен по идее ругаться.
Может быть просто в логике проблема или SetFilter не в том месте!?[/quote]

Заработало!! Я его точно не туда воткнул.
Большое спасибо

Re: Задание фильтра строкой

Добавлено: 29 Август 2014, 1:59
Admin
kreator писал(а):Если ещё не решили проблему. У меня так. В Методе ApplyFilter после Parent Call вставляю Embed:

Код: Выделить всё

  Process:View{prop:SQLFilter} = '((dat_uv is null) or (not dat_uv is null))'
Здесь репорт по одной таблице, поэтому префиксов нет. Думаю, с не SQL будет аналогично.
Да все прекрасно работает если писать
Process:View{PROP:Filter} = 'условие проверки'

Re: Задание фильтра строкой

Добавлено: 29 Август 2014, 2:03
Admin
Yufil писал(а):А Кларионовский фильтр точно осведомлён насчёт фунцкции Age ?
Да. Думаю там используется EVALUATE, который о функции AGE знает.
Yufil писал(а):У меня фильтр с пользовательской функцией не срабатывал, функция просто не вызывалась, даже будучи забинденной.
Пример бы. Тестовый вариант прекрасно работает.

Re: Задание фильтра строкой

Добавлено: 29 Август 2014, 2:07
Admin
И кстати ТС!
Выполните код MESSAGE(AGE(TODAY()-1000)) и посмотрите на результат. А потом откорректируйте свое условие в фильтре.
Думаю ваш вопрос сразу решится.
The AGE procedure returns a string containing the time elapsed between two dates. The age return string is in the following format:

1 to 60 days - 'nn DAYS'
61 days to 24 months - 'nn MOS'
(2 years + 1 month) to 999 years - 'nnn YRS'