|
24.06.2010, 09:24 | #1 |
Участник
|
Расширенный запрос по дате
Пробую создать расширенный запрос по дате. Не получается.
Упростил задачу и не работает даже при таком: Есть таблица table2 c полем date1980 - d1. X++: public void init() { QueryBuildDataSource qbds; date dd1 = today()-10; date dd2 = today()+10; str rangeDate = strfmt("(d1>=%1 && d1<=%2)",dd1,dd2); ; super(); qbds = Table2_ds.query().dataSourceNo(1); qbds.addRange(fieldnum(Table2,RecId)).value(rangeDate);// Не работает //qbds.addRange(fieldnum(Table2,d1)).value(rangeDate); // -------Не работает //qbds.addRange(fieldnum(Table2,d1)).value(strfmt('%1..%2',dd1,dd2));// - Работает } Говорит ошибка в скобках. При просмотре qbds в отладчике работающий и неработающий вариант отличаются только тем, что в нерабочем есть дополнительная пара скобок. Мне эти скобки нужны, т.к. вообще буду сцеплять дальше такие пары по ИЛИ. Кто-нибудь сталкивался с датами в расширенном запросе и проблемами с ними? |
|
24.06.2010, 09:32 | #2 |
NavAx
|
а qbds.addRange(fieldnum(Table2,DateField)).value(queryRange(dd1,dd2)) - это уже не "Джим Бим"?
|
|
24.06.2010, 09:35 | #3 |
Участник
|
Делать вот такие простые - это одно. А как теперь тогда присоединить еще один туда же по ИЛИ, но по другому полю даты или по этому же, но с другим диапазоном дат?
|
|
24.06.2010, 10:37 | #4 |
Участник
|
Если по тому же полю, то можно добавлять нужные диапазоны через запятую
__________________
Axapta v.3.0 sp5 kr2 |
|
24.06.2010, 10:40 | #5 |
Участник
|
|
|
24.06.2010, 09:42 | #6 |
Участник
|
Попробуйте str rangeDate = strfmt("((d1>=%1) && (d1<=%2))",dd1,dd2);
т.е. каждое условие заключить в отдельные скобки, должно сработать.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
24.06.2010, 09:47 | #7 |
Участник
|
Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 14
|
|
24.06.2010, 09:50 | #8 |
Участник
|
|
|
24.06.2010, 10:00 | #9 |
Ищущий знания...
|
уже обсуждалось...
вот рабочий вариант: добавление уловия OR (ИЛИ) в QUERY, кавычки и скобки ОБЯЗАТЕЛЬНО!!!: X++: sQuery = strFmt('((%1 == "%3") || (%2 == "%3"))', fieldStr(Table, Field), fieldStr(Table, Field), queryValue());
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.06.2010, 10:01 | #10 |
Участник
|
Да, вместо dd1 и dd2 подставляйте date2strxpp(dd1) и date2strxpp(dd2)
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
24.06.2010, 10:13 | #11 |
Участник
|
|
|
24.06.2010, 10:03 | #12 |
Ищущий знания...
|
конкретно для вашего примера:
X++: str rangeDate = strfmt('((d1>="%1") && (d1<="%2"))',dd1,dd2);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.06.2010, 10:15 | #13 |
Участник
|
|
|
24.06.2010, 10:31 | #14 |
Ищущий знания...
|
Цитата:
Если уверены что все правильно указано и должны выводиться записи, выложите здесь конкретный пример с вашим кодом, так как он у вас написан. Тоже Axapta 3.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.06.2010, 10:38 | #15 |
Участник
|
Цитата:
X++: public void init() { QueryBuildDataSource qbds; date dd1 = today()-10; date dd2 = today()+10; str rangeDate = strfmt('((d1>="%1") && (d1<="%2"))',dd1,dd2); ; super(); qbds = Table2_ds.query().dataSourceNo(1); qbds.addRange(fieldnum(Table2,d1)).value(rangeDate); } |
|
24.06.2010, 10:45 | #16 |
Ищущий знания...
|
Я же написал, что все работает стабильно! Все нормально выводится! Сейчас тоже у себя попробую написать джоб для примера.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.06.2010, 10:40 | #17 |
Участник
|
Не поленился, написал джоб для проверки работоспособности - все работает, данные попадают
X++: static void testQuery(Args _args) { Query query; QueryRun queryRun; QueryBuildDataSource qbds; QueryBuildRange qbr; EmplTable emplTable; ; query = new Query(); qbds = query.addDataSource(TableNum(EmplTable)); qbr = qbds.addRange(fieldNum(EmplTable, EmplId)); qbr.value(strfmt("((CreatedDate >= %1) && (CreatedDate <= %2))", date2strxpp(31\12\2009), date2strxpp(31\01\2010))); queryRun = new QueryRun(query); while(queryRun.next()) { emplTable = queryRun.get(TableNum(EmplTable)); info(emplTable.EmplId); } }
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
|
За это сообщение автора поблагодарили: Димитрий (1). |
24.06.2010, 10:47 | #18 |
Участник
|
Цитата:
X++: str rangeDate = strfmt('((d1>=%1) && (d1<=%2))',date2strxpp(dd1),date2strxpp(dd2)); X++: str rangeDate = strfmt('(d1>=%1 && d1<=%2)',date2strxpp(dd1),date2strxpp(dd2)); |
|
24.06.2010, 10:49 | #19 |
Участник
|
Сработало и по ИЛИ. Спасибо.
|
|
24.06.2010, 10:51 | #20 |
Участник
|
Для проверки расширенных диапазонов не надо писать джобов.
Достаточно открыть любую форму с датами и в запросе прописать нужное условие. К примеру, у меня прекрасно фильтруется по такому запросу в складских журналах по полю "Идентификатор записи" X++: ((transdate >= 01\01\2010) && (transdate <=01\01\2010)) || ((createddate >= 01\01\2010) && (createddate <=01\01\2010))
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
Теги |
query, range |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|