30.01.2012, 08:59 | #1 |
MCTS
|
Сложный фильтр
Подскажите, пожалуйста, вот такое условие придется в Query строковым условием писать или можно как-то написать как обычно:
X++: ( table.StartDate == dateNull() && table.EndDate == dateNull() ) || ( table.StartDate <= _date && (table.EndDate == dateNull() || table.EndDate >= _date) ) |
|
30.01.2012, 09:12 | #2 |
Ищущий знания...
|
Цитата:
Сообщение от Eldar9x
Подскажите, пожалуйста, вот такое условие придется в Query строковым условием писать или можно как-то написать как обычно:
X++: ( table.StartDate == dateNull() && table.EndDate == dateNull() ) || ( table.StartDate <= _date && (table.EndDate == dateNull() || table.EndDate >= _date) ) такой range придется писать строковым условием. при построении запроса с "ИЛИ" есть некоторые нюансы, которые уже обсуждались на форуме. вот разные вариации построения запросов ещё вот эту тему читайте и ещё вот тут писалось P.S. думаю можно ещё много всяких тем на этот счет найти на форуме
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
30.01.2012, 09:55 | #3 |
MCTS
|
Спасиб
|
|
30.01.2012, 09:57 | #4 |
Участник
|
Цитата:
Сообщение от Eldar9x
Подскажите, пожалуйста, вот такое условие придется в Query строковым условием писать или можно как-то написать как обычно:
X++: ( table.StartDate == dateNull() && table.EndDate == dateNull() ) || ( table.StartDate <= _date && (table.EndDate == dateNull() || table.EndDate >= _date) ) Немного преобразовав его можно записать в таком виде: ( _date >= table.StartDate) && ( (_date <= table.EndDate) || (table.EndDate == dateNull())) А в таком виде его уже можно реализовать стандартным range. |
|
|
За это сообщение автора поблагодарили: gl00mie (4). |
30.01.2012, 12:00 | #5 |
Участник
|
Скорее всего хотят, чтобы указанная дата(_date) проверялась в периоде StartDate..EndDate если эти даты явно указаны в таблице.
Т.е. 1) если указана дата StartDate но неуказана EndDate, то бери если _date >= StartDate, 2) если не указана StartDate но указана EndDate, то бери если _date <= Enddate, 3) если указана StartDate и указана EndDate, то бери если _date >= StartDate и при этом _date <= EndDate, 4) если не указана StartDate и не указана EndDate, то бери в любом случае. Если я правильно понял, то будет работать такой вариант Query : X++: qbdsTable.addRange(fieldNum(Table, StartDate)).value( QueryRange( _date,datenull() ) ); qbdsTable.addRange(fieldNum(Table, StartDate)).value( QueryValue( datenull() ) ); qbdsTable.addRange(fieldNum(Table, EndDate)).value( QueryRange( datenull(),_date ) ); qbdsTable.addRange(fieldNum(Table, EndDate)).value( QueryValue( datenull() ) );
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
30.01.2012, 13:48 | #6 |
Administrator
|
Цитата:
Сообщение от Pustik
Скорее всего хотят, чтобы указанная дата(_date) проверялась в периоде StartDate..EndDate если эти даты явно указаны в таблице.
Т.е. 1) если указана дата StartDate но неуказана EndDate, то бери если _date >= StartDate, 2) если не указана StartDate но указана EndDate, то бери если _date <= Enddate, 3) если указана StartDate и указана EndDate, то бери если _date >= StartDate и при этом _date <= EndDate, 4) если не указана StartDate и не указана EndDate, то бери в любом случае. Таким образом, один из критериев можно опустить (и ещё, кажется, Вы перепутали условия для StartDate и EndDate). X++: qbdsTable.addRange(fieldNum(Table, StartDate)).value(queryRange(dateNull(), _date)); qbdsTable.addRange(fieldNum(Table, EndDate)).value(queryRange(_date, dateNull())); qbdsTable.addRange(fieldNum(Table, EndDate)).value(queryValue(dateNull()));
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: Pustik (1), gl00mie (1), PavelX (3), Eldar9x (1), Aquarius (1), S.Kuskov (1). |
30.01.2012, 15:06 | #7 |
Участник
|
Да, действительно перепутал. Понедельник день тяжелый.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
ERP-BLOG: Axapta, фильтр по сетке | 26 | |||
Исполнить сформированный фильтр | 14 | |||
Сложный фильтр складских журналов | 13 | |||
Иногда не работает фильтр | 0 | |||
Как наложить на запрос сложный фильтр? | 10 |
|