![]() |
#1 |
Участник
|
Помогите плиз с фильтром!
Есть 2 поля "Starting Action Date" и "Ending Action Date". как создать фильтр чтобы выдавал данные если любой из двух попадает в заданный диапазон? |
|
![]() |
#2 |
Участник
|
тут без программирования не обойтись... есть такая вещь MARK называется... вот и её и пользуйте
![]()
__________________
Want to believe... |
|
![]() |
#3 |
Участник
|
SETFILTER("Starting Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod)
SETFILTER("Ending Action Date", '>%1&<%2', BeginDatePeriod, EndDatePeriod) IF FIND('-') THEN ... |
|
![]() |
#4 |
Участник
|
2 Romeo
А если еще подумать и вопрос перечитать? ![]()
__________________
Want to believe... |
|
![]() |
#5 |
Участник
|
Не сдаемся .. Тагда ..
Если с достоверностью гарантируется, что Starting Action Date меньше Ending Action Date, то пишем так: SETFILTER("Starting Action Date", '>%1', BeginDatePeriod) SETFILTER("Ending Action Date", '<%1', EndDatePeriod) IF FIND('-') THEN ... -) |
|
![]() |
#6 |
Участник
|
Цитата:
Запись со "Starting Action Date" = 05.01.05 и "Ending Action Date" = 31.12.9999. По Вашему алгоритму она в результирующий набор не попадет, а должна. Нет в Навике ИЛИ фильтров по полям, Ardak, используйте MARK, как Вам советовал DA_NEAL. |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от Alterant
![]() Цитата:
Запись со "Starting Action Date" = 05.01.05 и "Ending Action Date" = 31.12.9999. По Вашему алгоритму она в результирующий набор не попадет, а должна. Нет в Навике ИЛИ фильтров по полям, Ardak, используйте MARK, как Вам советовал DA_NEAL. |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#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 |
|
![]() |
#10 |
Участник
|
2 Alterant
Они (romeo,Eugeny_F) прикалываются по ходу дела ![]()
__________________
Want to believe... |
|
![]() |
#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 ... Объясните. |
|
![]() |
#12 |
Участник
|
тут имелось я так понимаю если хоть одна дата из двух попадает в диапазон... то есть условие ИЛИ
|
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Участник
|
|
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
Administrator
|
|
|
![]() |
#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); ![]() |
|
![]() |
#18 |
Участник
|
Хех, тема аналогичная моей ("Когда фильтров уже нехватает...")
|
|
![]() |
#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); |
|
![]() |
#20 |
Участник
|
при сортировке НЕ по первичному ключу
использование MARKEDONLY(true) приведет к тормозам при большом объеме данных. Будьте бдительны. |
|