01.12.2005, 15:13 | #1 |
Участник
|
Помогите плиз с фильтром!
Есть 2 поля "Starting Action Date" и "Ending Action Date". как создать фильтр чтобы выдавал данные если любой из двух попадает в заданный диапазон? |
|
01.12.2005, 15:20 | #2 |
Участник
|
тут без программирования не обойтись... есть такая вещь MARK называется... вот и её и пользуйте
__________________
Want to believe... |
|
01.12.2005, 16:45 | #3 |
Участник
|
SETFILTER("Starting Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod)
SETFILTER("Ending Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod) IF FIND('-') THEN ... |
|
01.12.2005, 17:03 | #4 |
Участник
|
2 Romeo
А если еще подумать и вопрос перечитать?
__________________
Want to believe... |
|
01.12.2005, 17:24 | #5 |
Участник
|
Не сдаемся .. Тагда ..
Если с достоверностью гарантируется, что Starting Action Date меньше Ending Action Date, то пишем так: SETFILTER("Starting Action Date", '>%1', BeginDatePeriod) SETFILTER("Ending Action Date", '<%1', EndDatePeriod) IF FIND('-') THEN ... -) |
|
01.12.2005, 18:16 | #6 |
Участник
|
Цитата:
Запись со "Starting Action Date" = 05.01.05 и "Ending Action Date" = 31.12.9999. По Вашему алгоритму она в результирующий набор не попадет, а должна. Нет в Навике ИЛИ фильтров по полям, Ardak, используйте MARK, как Вам советовал DA_NEAL. |
|
01.12.2005, 18:29 | #7 |
Участник
|
Цитата:
Сообщение от Alterant
Цитата:
Запись со "Starting Action Date" = 05.01.05 и "Ending Action Date" = 31.12.9999. По Вашему алгоритму она в результирующий набор не попадет, а должна. Нет в Навике ИЛИ фильтров по полям, Ardak, используйте MARK, как Вам советовал DA_NEAL. |
|
02.12.2005, 09:06 | #8 |
Участник
|
|
|
02.12.2005, 09:27 | #9 |
Участник
|
А оператор IF тут не поможет? Типа:
SETRANGE("Starting Action Date",BeginDatePeriod, EndDatePeriod); IF FIND('-') THEN BEGIN ........... END ELSE BEGIN SETRANGE("Starting Action Date"); SETRANGE("Ending Action Date",BeginDatePeriod, EndDatePeriod); IF FIND('-') THEN BEGIN ............ END; END |
|
02.12.2005, 09:55 | #10 |
Участник
|
2 Alterant
Они (romeo,Eugeny_F) прикалываются по ходу дела
__________________
Want to believe... |
|
02.12.2005, 10:04 | #11 |
Участник
|
Прочитал. В условии сказано - запись удовлетворяет, если ЛЮБАЯ из дат, то есть ОБЕ, то есть И - Starting Action Date и Ending Action Date - попадает в диапазон. Не понимаю, чем не удовлетворяет написанное мной:
SETFILTER("Starting Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod) SETFILTER("Ending Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod) IF FIND('-') THEN ... Объясните. |
|
02.12.2005, 11:10 | #12 |
Участник
|
тут имелось я так понимаю если хоть одна дата из двух попадает в диапазон... то есть условие ИЛИ
|
|
02.12.2005, 11:22 | #13 |
Участник
|
|
|
02.12.2005, 11:50 | #14 |
Участник
|
|
|
02.12.2005, 11:56 | #15 |
Участник
|
|
|
02.12.2005, 14:20 | #16 |
Administrator
|
|
|
02.12.2005, 15:53 | #17 |
Участник
|
Спасибо всем!!! получился вариант с Mark,MarkedOnly
вот код: OnPreDataItem() REPEAT IF ("Starting Action Date">=StartDate) AND ("Starting Action Date"<=EndDate) THEN MARK(TRUE); IF ("Ending Action Date">=StartDate) AND ("Ending Action Date"<=EndDate) THEN MARK(TRUE); UNTIL NEXT = 0; MARKEDONLY(TRUE); |
|
02.12.2005, 16:07 | #18 |
Участник
|
Хех, тема аналогичная моей ("Когда фильтров уже нехватает...")
|
|
02.12.2005, 16:21 | #19 |
Участник
|
Цитата:
Сообщение от Ardak
Спасибо всем!!! получился вариант с Mark,MarkedOnly
вот код: OnPreDataItem() REPEAT IF ("Starting Action Date">=StartDate) AND ("Starting Action Date"<=EndDate) THEN MARK(TRUE); IF ("Ending Action Date">=StartDate) AND ("Ending Action Date"<=EndDate) THEN MARK(TRUE); UNTIL NEXT = 0; MARKEDONLY(TRUE); Т.е. REPEAT IF ("Starting Action Date">=StartDate) AND ("Starting Action Date"<=EndDate) THEN MARK(TRUE) ELSE IF ("Ending Action Date">=StartDate) AND ("Ending Action Date"<=EndDate) THEN MARK(TRUE); UNTIL NEXT = 0; MARKEDONLY(TRUE); или если с ключами SETCURRENTKEY(..., "Starting Action Date", ...); //чем меньше полей до "Starting Action Date", тем лучше SETRANGE("Starting Action Date", StartDate, EndDate); IF FIND('-') THEN REPEAT MARK(TRUE); UNTIL NEXT = 0; SETRANGE("Starting Action Date"); SETCURRENTKEY(..., "Ending Action Date", ...); //чем меньше полей до "Ending Action Date", тем лучше SETRANGE("Ending Action Date", StartDate, EndDate); IF FIND('-') THEN REPEAT MARK(TRUE); UNTIL NEXT = 0; MARKEDONLY(TRUE); |
|
02.12.2005, 16:57 | #20 |
Участник
|
при сортировке НЕ по первичному ключу
использование MARKEDONLY(true) приведет к тормозам при большом объеме данных. Будьте бдительны. |
|