12.04.2007, 10:17 | #1 |
Участник
|
Range в запросе
Будьте добрые, поправьте мне пожалуйста этот фрагмент
X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,ReqDateDlv)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,ReqDateDlv)); queryBuildRangeTime.value(strfmt('(%2 <= %1) && (%2 >= %3)',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 23. |
|
12.04.2007, 10:23 | #2 |
Участник
|
Заключите все условие еще раз в скобки ((%2 <= %1) && (%2 >= %3))
|
|
12.04.2007, 10:25 | #3 |
Программатор
|
Вот так должно работать...
X++: queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); |
|
12.04.2007, 10:27 | #4 |
Участник
|
Лучше всего, мне кажется, использовать функцию date2strXpp для преобразования даты в нужный формат.
|
|
|
За это сообщение автора поблагодарили: longson (1). |
12.04.2007, 10:30 | #5 |
Программатор
|
|
|
12.04.2007, 10:42 | #6 |
Участник
|
Спасибо . Попробовал оба вариант.
Цитата:
Это дало точный результат. |
|
12.04.2007, 10:43 | #7 |
Участник
|
|
|
12.04.2007, 10:45 | #8 |
Программатор
|
X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,RecId)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,RecId)); queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); Строку нада по моему накладывать не на поле а на RecId Последний раз редактировалось Sada; 12.04.2007 в 10:47. |
|
12.04.2007, 10:51 | #9 |
Участник
|
Цитата:
Сообщение от Sada
X++: queryBuildRangeTime = queryBuildDataSource.findRange(fieldnum(ReqPO,RecId)); if (! queryBuildRangeTime) queryBuildRangeTime = queryBuildDataSource.addRange(fieldnum(ReqPO,RecId)); queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq)); Строку нада по моему накладывать не на поле а на RecId А "%1" в дальнейшем тоже выдаст ошибку о некорректном формате даты, afair. |
|
12.04.2007, 10:54 | #10 |
----------------
|
Господа, скажите, пожалуйста, в чем тайный смысл написания комбинации
"%1",fieldstr(ReqPO,ReqDateDlv) вместо простого "ReqDateDlv"? Последний раз редактировалось Wamr; 12.04.2007 в 10:57. |
|
12.04.2007, 10:55 | #11 |
Участник
|
Цитата:
Нууу, хотя бы в том, что на этапе компиляции выполнится проверка существования поля ReqDateDlv |
|
12.04.2007, 10:58 | #12 |
Участник
|
А если в DataSource две таблицы и имеются поля одинакового имени, которые нужно включить в Range ?
|
|
12.04.2007, 11:13 | #13 |
Участник
|
Цитата:
http://www.axaptapedia.com/Expressions_in_query_ranges |
|
12.04.2007, 11:41 | #14 |
Участник
|
А не проще ли использовать
X++: ... queryBuildRangeTime.value(SysQuery::range(fromDateReq, toDateReq)); Последний раз редактировалось johny77; 12.04.2007 в 11:49. |
|
12.04.2007, 11:47 | #15 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: oip (2). |
12.04.2007, 20:54 | #16 |
Участник
|
Так а если в Range я хочу написать функцию, это возможно?
Например: strfind(InventTable.ItemGroupId,"J",1)>0 |
|
12.04.2007, 20:57 | #17 |
Дмитрий Ерин
|
нет
__________________
|
|
12.04.2007, 21:00 | #18 |
Участник
|
Цитата:
X++: ItemGroupId like "*J*" |
|
13.04.2007, 15:25 | #19 |
Участник
|
Спасибо. Но решил обойти следующем образом
X++: queryBuildRangeType = queryBuildDataSource.findRange(fieldnum(InventTable,ItemGroupId)); if (!queryBuildRangeType) queryBuildRangeType = queryBuildDataSource.addRange(fieldnum(InventTable,ItemGroupId)); switch(planType) { case PlanType_REP::Production : queryBuildRangeType.value(strfmt( '((%10 == %1) || (%10 == %2) || (%10 == %3) || (%10 == %4) || (%10 == %5) || (%10 == %6) || (%10 == %7) || (%10 == %8) || (%10 == %9))', queryValue("БПА_J"),queryValue("БПО_J"),queryValue("БПС_J"),queryValue("БСБ_J"),queryValue("БСБП_J"),queryValue("БСМ_J"),queryValue("БСМат_J"),queryValue("БСО_J"),queryValue("БСП_J"),fieldstr(InventTable,ItemGroupId))); break; |
|
13.04.2007, 15:34 | #20 |
Программатор
|
Боже мой... зашивать руские букавы в код по-моему не прально в корне...
|
|