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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2011, 11:58   #1  
Corel is offline
Corel
Участник
Ex AND Project
 
73 / 15 (1) ++
Регистрация: 19.04.2007
Цитата:
Сообщение от AndyD Посмотреть сообщение
Прошу прощение за настойчивость, но вы обратили внимание, что рейнж накладывается на поле не первого, а второго датасорса?
Эээ... не обратил.
Хм... Попробую так. Если у вас вычитание даты из даты корректно работает, значит, надежда есть.

Upd:
Попробовал. Ошибка расширенного диапазона:
Ошибка расширенного диапазона запроса: Table1.Date не является корректной парой datasource.field рядом с 45.
Видимо, из-за того, что датасорсы уж очень далеко отстоят друг от друга - table2 входит в запрос гораздо выше.

Сейчас пробую так:
делаю предварительный запрос, собрав в Map интересующие меня пары код - кол-во дней из table2, а затем в основном Query иду по этой мапе и ставлю условие

X++:
qbdsTable1.addRange(fieldNum(Table1, Date)).value(strfmt('((%2.%4 == %5) && (%6.%7 < %1))',
    date2StrXpp(systemDateGet() - any2int(mapIterator.value())), //%1
    query.dataSourceTable(tableNum(Table2)).name(),                //%2
    fieldStr(Table2, Days),                                                         //%3
    fieldStr(Table2, Id),                                                              //%4
    SysQuery::value(mapIterator.key()),                                      //%5
    query.dataSourceTable(tableNum(Table1)).name(),                 //%6
    fieldStr(Table1, Date)));                                                        //%7
Но пока что выдаёт в это месте синтаксическую ошибку рядом с 38.

Последний раз редактировалось Corel; 31.01.2011 в 12:23.
Старый 31.01.2011, 15:24   #2  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
Цитата:
Сообщение от Corel Посмотреть сообщение
Ошибка расширенного диапазона запроса: Table1.Date не является корректной парой datasource.field рядом с 45.
Похожие ошибки бывают когда накладываемое значение ренджа очень длинное и попросту обрезается парсером (вроде в рендж входит значение не длиннее 255 символов). Хотя в Вашем случае условие и не выглядит длинным, но мало ли...
Старый 31.01.2011, 17:13   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
А такой вариант ?
X++:
    qbdsInventTrans.addRange(fieldNum(InventTrans, DateFinancial)).value(strfmt('(((%1.%2 + %3.%4 - %5) > 0))',
                                                                                 query.dataSourceTable(tableNum(InventTrans)).name(),
                                                                                 fieldStr(InventTrans, DateFinancial),
                                                                                 query.dataSourceTable(tableNum(Table2)).name(),
                                                                                 fieldStr(Table2, Days),
                                                                                 date2StrXpp(systemDateGet()));
Старый 31.01.2011, 17:28   #4  
Corel is offline
Corel
Участник
Ex AND Project
 
73 / 15 (1) ++
Регистрация: 19.04.2007
Цитата:
Сообщение от Alexius Посмотреть сообщение
А такой вариант ?
X++:
    qbdsInventTrans.addRange(fieldNum(InventTrans, DateFinancial)).value(strfmt('(((%1.%2 + %3.%4 - %5) > 0))',
                                                                                 query.dataSourceTable(tableNum(InventTrans)).name(),
                                                                                 fieldStr(InventTrans, DateFinancial),
                                                                                 query.dataSourceTable(tableNum(Table2)).name(),
                                                                                 fieldStr(Table2, Days),
                                                                                 date2StrXpp(systemDateGet()));
Не-не-не... Не получится никак заставить SQL прибавлять / вычитать из даты дни так, как аксапта это делает с типом Date, т.к. в SQL это поле имеет формат DateTime. Это будет сложение километров с милиметрами. Кстати, похоже, и вычитание даты из даты тоже даёт эффект только при сравнении с нулём, то есть, в таком случае можно просто свести к сравнению. Ищу, где же косяк в варианте с предварительно составленным мапом, может скобку где пропустил...

Последний раз редактировалось Corel; 31.01.2011 в 17:32.
Старый 31.01.2011, 17:42   #5  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Corel Посмотреть сообщение
Не-не-не... Не получится никак заставить SQL прибавлять / вычитать из даты дни так, как аксапта это делает с типом Date, т.к. в SQL это поле имеет формат DateTime.
Не понимаю, следующий запрос на MS SQL корректно отрабатывает, т.е. вторая дата на один день меньше (для Oracle должно быть аналогично):
Код:
SELECT TOP 1 DATEFINANCIAL, DATEFINANCIAL - 1
FROM INVENTTRANS
WHERE DATEFINANCIAL <> '19000101'
PS. Неплохо бы отслеживать профайлером результирующий запрос
PS2. Городить полноценный полигон мне лень
Старый 31.01.2011, 17:29   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от PavelX Посмотреть сообщение
Похожие ошибки бывают когда накладываемое значение ренджа очень длинное и попросту обрезается парсером (вроде в рендж входит значение не длиннее 255 символов)
Стандартно - 250. И это стандартный размер EDT Range (Позиционирование в гриде). И только в том случае, если пользователю предъявляется форма параметров запроса, т.е. вызывается queryRun.prompt(). Если всё происходит только невидимо в коде, то размер строки Range практически не ограничен (может быть, 64К ?).
За это сообщение автора поблагодарили: PavelX (1), Corel (1).
Старый 31.01.2011, 18:26   #7  
Corel is offline
Corel
Участник
Ex AND Project
 
73 / 15 (1) ++
Регистрация: 19.04.2007
Цитата:
Сообщение от Corel Посмотреть сообщение
Эээ... не обратил.
Хм... Попробую так. Если у вас вычитание даты из даты корректно работает, значит, надежда есть.

Upd:
Попробовал. Ошибка расширенного диапазона:
Ошибка расширенного диапазона запроса: Table1.Date не является корректной парой datasource.field рядом с 45.
Видимо, из-за того, что датасорсы уж очень далеко отстоят друг от друга - table2 входит в запрос гораздо выше.

Сейчас пробую так:
делаю предварительный запрос, собрав в Map интересующие меня пары код - кол-во дней из table2, а затем в основном Query иду по этой мапе и ставлю условие

X++:
qbdsTable1.addRange(fieldNum(Table1, Date)).value(strfmt('((%2.%4 == "%5") && (%6.%7 < %1))',
    date2StrXpp(systemDateGet() - any2int(mapIterator.value())), //%1
    query.dataSourceTable(tableNum(Table2)).name(),                //%2
    fieldStr(Table2, Days),                                                         //%3
    fieldStr(Table2, Id),                                                              //%4
    SysQuery::value(mapIterator.key()),                                      //%5
    query.dataSourceTable(tableNum(Table1)).name(),                 //%6
    fieldStr(Table1, Date)));                                                        //%7
Но пока что выдаёт в это месте синтаксическую ошибку рядом с 38.
Да, этот вариант оказался рабочим, забыл %5 в кавычки взять.
Пока что над этим голову ломать дальше не хочу. Спасибо всем за советы.

Upd:
Придётся-таки думать дальше. При тестировании наткнулся-таки на ограничение длины рэнжа.
Буду вместо мэпа заполнять временную таблицу и джойнить её уже.

Последний раз редактировалось Corel; 31.01.2011 в 19:23.
Теги
querybuildrange, дата, расширенный фильтр

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptafreak: Label for query range cannot be modified in AX 5.0 Blog bot DAX Blogs 0 30.08.2007 16:50
axaptafreak: Label for Query Range cannot be modified (still) Blog bot DAX Blogs 2 25.07.2007 10:09
Fred Shen: Date data type in Query Range Value Expression Blog bot DAX Blogs 0 28.10.2006 16:40
Автоматическая подстановка Range в Query Владимир Максимов DAX: Программирование 9 30.03.2004 16:48
Как вытащить информацию о Range из Query raz DAX: База знаний и проекты 1 26.03.2004 11:10
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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