Страница 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 в отчете
По моему ничего не путаю. Давно не пользовался.
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'