|
22.05.2011, 12:28 | #1 |
newborn in DAX
|
закон Мэрфи опять сработал
почему-то если rangeStart - фильтр по одному полю rangeStart = qbds.addRange(fieldnum(MyTBL, STARTDATE)); rangeStart.value(strfmt('%1..%2',FromDate.valueStr(),ToDate.valueStr())); то работает и даты как положено воспринимает SELECT * FROM MyTBL WHERE ... AND ((StartDate>={ts '2011-01-01 00:00:00.000'} AND StartDate<={ts '2011-05-22 00:00:00.000'})) AND ..... а если str rangeDate = strfmt("(((STARTDATE>=%1) and (STARTDATE<=%2)) or ((ENDDATE>=%1) and (ENDDATE<=%2)))", FromDate.valueStr(), ToDate.valueStr()); rangeDates = qbds.addRange(fieldNum(MyTBL ,RecId)); rangeDates.value(rangeDate); - фильтр по RecID то даты имеют вид другой SELECT * FROM MyTBL WHERE ... AND (((((STARTDATE>=01/01/2011) and (STARTDATE<=22/05/2011)) or ((ENDDATE>=01/01/2011) and (ENDDATE<=22/05/2011))))) ещё ругается что какой-то скобки не хватает. [Date values should be formatted using Date2StrXpp() ] пыталась вместо FromDate.valueStr() - date2strxpp(FromDate) ругается Argument '_date' ia incompatible with required type. |
|
22.05.2011, 12:46 | #2 |
Участник
|
Цитата:
X++: date2strxpp(FromDate.DateValue()) |
|
22.05.2011, 13:04 | #3 |
newborn in DAX
|
поставила
date2strxpp(FromDate.DateValue()) теперь SQL вообще какой-то кривой (((((STARTDATE>=01\01\2011) and (STARTDATE<=22\05\2011)) or ((ENDDATE>=01\01\2011) and (ENDDATE<=22\05\2011))))) |
|
22.05.2011, 19:49 | #4 |
Участник
|
|
|
23.05.2011, 08:46 | #5 |
newborn in DAX
|
почему && и || ?это же запрос который идёт на SQL сервер. Там вроде как and и or надо.
и слэши обратные как -то не очень. SQL сервер ругается на такое "Incorrect syntax near '\01'." не нравится ему дата в таком виде |
|
23.05.2011, 08:51 | #6 |
Участник
|
Неа. Это запрос, который ещё будет постобработан аксаптой.
Вот такой код у меня выполняется без ошибок: X++: static void JobTestExpressionsInQueryRanges(Args _args) { InventTrans InventTrans; fromDate fromDate = 03\05\2011; toDate toDate = 04\05\2011; Query q; QueryBuildDataSource qbdsInventTrans; QueryRun qr; ; q = new Query(); qbdsInventTrans = q.addDataSource(tableNum(InventTrans)); qbdsInventTrans.addRange(fieldNum(InventTrans, RecId)).value( strfmt("(((%1.%2 >= %4) && (%1.%2 <= %5)) || ((%1.%3 >= %4) && (%1.%3 <= %5)))" , qbdsInventTrans.name(), fieldStr(InventTrans, DatePhysical), fieldStr(InventTrans, DateFinancial), Date2StrXpp(fromDate), Date2StrXpp(toDate) )); info(qbdsInventTrans.toString()); qr = new QueryRun(q); while (qr.next()) { InventTrans = qr.get(tableNum(InventTrans)); info(InventTrans.ItemId); break; } info("."); } Впрочем этот нюанс и многие другие описаны в статье по ссылке, которую я приводил выше Последний раз редактировалось S.Kuskov; 23.05.2011 в 09:43. |
|
23.05.2011, 10:51 | #7 |
newborn in DAX
|
исходная дата приходит из календаря на форме
обратные слэши это после date2strxpp и после info(this.query().dataSourceTable(tableNum(mlm_TemporaryLeaveReport)).toString());и если я правильно понимаю должно быть and а не && т.е обратные слеши идут на SQL,а там их явно не ждали |
|
23.05.2011, 12:23 | #8 |
Участник
|
К примеру.
X++: qbrEmployDate.value( '(EmplTable.PayEmploymentDate_RU != '+date2StrXpp(datenull())+')' +'&&' +'(EmplTable.PayEmploymentDate_RU <= '+date2StrXpp(systemdateget())+')' ); qbrResignDate.value( '(EmplTable.PayResignedDate_RU !='+date2StrXpp(datenull())+')' +'&&' +'(EmplTable.PayResignedDate_RU < '+date2StrXpp(systemdateget())+')');
__________________
В подводной охоте главное вдох ... |
|
Теги |
query, querybuildrange, range, фильтр |
|
|