|  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) приведет к тормозам при большом объеме данных. Будьте бдительны. | 
|  |