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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Lenkov
Посетитель
Сообщения: 32
Зарегистрирован: 27 Июнь 2006, 14:56

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

Сообщение Lenkov »

С6.3
Есть строка CFIL='AGE(S_S:DATE_R) >=36 AND S_S:ACT=1' Как ее вставить в репорт в качестве фильтра
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение Admin »

Это что ли?
Фильтр в отчете
Фильтр в отчете
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение Admin »

А если все таки CFIL то смотри в сторону BIND, EVALUATE и сюда:
BIND в отчете
BIND в отчете
По моему ничего не путаю. Давно не пользовался.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Lenkov
Посетитель
Сообщения: 32
Зарегистрирован: 27 Июнь 2006, 14:56

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

Сообщение Lenkov »

С6.3 АВС
Строка получается в программе и должна использоваться в качестве фильтра в репорте. EVALUATE я пытался вставлять, не проходит
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение Admin »

Lenkov писал(а):С6.3 АВС
Строка получается в программе и должна использоваться в качестве фильтра в репорте. EVALUATE я пытался вставлять, не проходит
Ни черта не помню но вот так работает.
Переменные таблицы, DAT:ID и DAT:Line по моему автоматом биндятся.
Фильтр для отчета
Фильтр для отчета
2014-08-28 10-59-41 DemoReport.png (11.48 КБ) 5748 просмотров
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Lenkov
Посетитель
Сообщения: 32
Зарегистрирован: 27 Июнь 2006, 14:56

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

Сообщение Lenkov »

У меня это выглядит вот так
CFIL='AGE(S_S:DATE_R) ' &VOZ &' ' &VOZ1 &' ' &'AND S_S:ACT=1'
ThisReport.SetFilter(CFIL)
Не катит
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение 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 не в том месте!?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

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

Сообщение Игорь Столяров »

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(...)
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

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

Сообщение kreator »

Если ещё не решили проблему. У меня так. В Методе ApplyFilter после Parent Call вставляю Embed:

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

  Process:View{prop:SQLFilter} = '((dat_uv is null) or (not dat_uv is null))'
Здесь репорт по одной таблице, поэтому префиксов нет. Думаю, с не SQL будет аналогично.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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

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

If not age(....) then return (record:filtered).
Lenkov
Посетитель
Сообщения: 32
Зарегистрирован: 27 Июнь 2006, 14:56

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

Сообщение Lenkov »

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

Заработало!! Я его точно не туда воткнул.
Большое спасибо
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение 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} = 'условие проверки'
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение Admin »

Yufil писал(а):А Кларионовский фильтр точно осведомлён насчёт фунцкции Age ?
Да. Думаю там используется EVALUATE, который о функции AGE знает.
Yufil писал(а):У меня фильтр с пользовательской функцией не срабатывал, функция просто не вызывалась, даже будучи забинденной.
Пример бы. Тестовый вариант прекрасно работает.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

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

Сообщение 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'
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить