AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.04.2007, 10:17   #1  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
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));
Это Range в запросе в отчёте, при запуске отчёта выдаётся ошибка

Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 23.
Старый 12.04.2007, 10:23   #2  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Заключите все условие еще раз в скобки ((%2 <= %1) && (%2 >= %3))
Старый 12.04.2007, 10:25   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Вот так должно работать...
X++:
queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq));
Старый 12.04.2007, 10:27   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Лучше всего, мне кажется, использовать функцию date2strXpp для преобразования даты в нужный формат.
За это сообщение автора поблагодарили: longson (1).
Старый 12.04.2007, 10:30   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Лучше всего, мне кажется, использовать функцию date2strXpp для преобразования даты в нужный формат.
Соглашуся
Старый 12.04.2007, 10:42   #6  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Спасибо . Попробовал оба вариант.

Цитата:
Сообщение от Sada Посмотреть сообщение
Вот так должно работать...
X++:
queryBuildRangeTime.value(strfmt('(("%2" <= "%1") && ("%2" >= "%3"))',toDateReq,fieldstr(ReqPO,ReqDateDlv),fromDateReq));
Всё равно выдалась ошибка о конструкции SQL.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Лучше всего, мне кажется, использовать функцию date2strXpp для преобразования даты в нужный формат.
Это дало точный результат.
Старый 12.04.2007, 10:43   #7  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Цитата:
Сообщение от MironovI Посмотреть сообщение
Заключите все условие еще раз в скобки ((%2 <= %1) && (%2 >= %3))
Этого не достаточно. Выдалась аналогичная ошибка, как в первом посте, только 3 заменялся на 4
Старый 12.04.2007, 10:45   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
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  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от 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
Просто "%2" - некорректно, так как это название поля.
А "%1" в дальнейшем тоже выдаст ошибку о некорректном формате даты, afair.
Старый 12.04.2007, 10:54   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Господа, скажите, пожалуйста, в чем тайный смысл написания комбинации
"%1",fieldstr(ReqPO,ReqDateDlv)
вместо простого
"ReqDateDlv"?

Последний раз редактировалось Wamr; 12.04.2007 в 10:57.
Старый 12.04.2007, 10:55   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Wamr Посмотреть сообщение
Господа, скажите, пожалуйста в чем тайный смысл написания комбинации
"%1",fieldstr(ReqPO,ReqDateDlv)
вместо простого
"ReqDateDlv"?

Нууу, хотя бы в том, что на этапе компиляции выполнится проверка существования поля ReqDateDlv
Старый 12.04.2007, 10:58   #12  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
А если в DataSource две таблицы и имеются поля одинакового имени, которые нужно включить в Range ?
Старый 12.04.2007, 11:13   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от longson Посмотреть сообщение
А если в DataSource две таблицы и имеются поля одинакового имени, которые нужно включить в Range ?
По имени датасурса (его можно задать явно вторым параметром addDataSource)

http://www.axaptapedia.com/Expressions_in_query_ranges
Старый 12.04.2007, 11:41   #14  
johny77 is offline
johny77
Участник
 
31 / 27 (1) +++
Регистрация: 04.07.2006
А не проще ли использовать
X++:
...
queryBuildRangeTime.value(SysQuery::range(fromDateReq, toDateReq));

Последний раз редактировалось johny77; 12.04.2007 в 11:49.
Старый 12.04.2007, 11:47   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от johny77 Посмотреть сообщение
А не проще ли использовать
X++:
       ueryBuildRangeTime.value(SysQuery::range(fromDateReq,toDateReq));
Ну, это слишком просто. Вы бы еще сказали:
X++:
queryBuildRangeTime.value(queryRange(fromDateReq, toDateReq));
За это сообщение автора поблагодарили: oip (2).
Старый 12.04.2007, 20:54   #16  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Так а если в Range я хочу написать функцию, это возможно?

Например: strfind(InventTable.ItemGroupId,"J",1)>0
Старый 12.04.2007, 20:57   #17  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от longson Посмотреть сообщение
Так а если в Range я хочу написать функцию, это возможно?

Например: strfind(InventTable.ItemGroupId,"J",1)>0
нет
__________________
Старый 12.04.2007, 21:00   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от longson Посмотреть сообщение
Так а если в Range я хочу написать функцию, это возможно?

Например: strfind(InventTable.ItemGroupId,"J",1)>0
Конкретно для этого случая есть альтернативный вариант (правда медленный)

X++:
ItemGroupId like "*J*"
Старый 13.04.2007, 15:25   #19  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Спасибо. Но решил обойти следующем образом

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  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Боже мой... зашивать руские букавы в код по-моему не прально в корне...
Теги
query, range, фильтр

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Packing date range values in queries Blog bot DAX Blogs 1 09.11.2007 13:10
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Блокирование Range в стандартном запросе Goldy DAX: Программирование 4 04.08.2006 14:20
Копирование Range по имени (2.5) Wamr DAX: Программирование 9 14.05.2004 18:33

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:56.