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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2013, 15:30   #1  
Отшельник is offline
Отшельник
Участник
 
38 / 11 (1) +
Регистрация: 15.06.2011
Post Сложный Range с датами
Делаю сложный Range c текстовыми полями типа

X++:
queryBuildRange.value(strFmt('((ItemType == %1) || (ItemId == "%2"))', 
    queryValue("ААА")),
    queryValue("ВВВ")));
Работает.
А вот задача отобрать два разных поля ArrivalDateTime и DepartureDateTime (типа DateTime)
Одно поле без проблем:
X++:
 gbr.value   (strFmt (   '%1..%2',
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
А вот как отобрать ArrivalDateTime ИЛИ DepartureDateTime в выше указанных пределах?
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...
Старый 31.01.2013, 15:47   #2  
sparco is offline
sparco
Участник
Самостоятельные клиенты AX
 
44 / 21 (1) +++
Регистрация: 10.10.2011
Адрес: Москва
Как вариант, можно попробовать
X++:
addRange( FieldNum( Table, dataAreaId ) ).value('(ArrivalDateTime == 01\01\1990 )||( DepartureDateTime == 01\01\1990)');

Последний раз редактировалось sparco; 31.01.2013 в 16:05.
Старый 31.01.2013, 16:25   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Нужен вариант функции Date2StrXpp, но только для utcDateTime.
Старый 31.01.2013, 16:33   #4  
Отшельник is offline
Отшельник
Участник
 
38 / 11 (1) +
Регистрация: 15.06.2011
Цитата:
Сообщение от sparco Посмотреть сообщение
Как вариант, можно попробовать
X++:
addRange( FieldNum( Table, dataAreaId ) ).value('(ArrivalDateTime == 01\01\1990 )||( DepartureDateTime == 01\01\1990)');

Не проходит. Пробовал. Когда смотрю в дебагере вижу
WHERE ((ArrivalDateTime = '1900-01-01T00:00:00'))
С текстовыми полями проходит.
Да и суть вопроса в том, что мне нужен диапазон:
ArrivalDateTime с ... по...
ИЛИ
DepartureDateTime с... по

Спасибо за помощь
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...

Последний раз редактировалось Отшельник; 31.01.2013 в 16:36.
Старый 31.01.2013, 16:35   #5  
Отшельник is offline
Отшельник
Участник
 
38 / 11 (1) +
Регистрация: 15.06.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Нужен вариант функции Date2StrXpp, но только для utcDateTime.

X++:
gbr.value   (strFmt (   '%1..%2',
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
Проходит же. Вот только не знаю, где можно поля ArrivalDateTime ИЛИ DepartureDateTime указать + не знаю как по другому указать ДИАПАЗОН дат.
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...
Старый 31.01.2013, 16:40   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Отшельник Посмотреть сообщение
X++:
gbr.value   (strFmt (   '%1..%2',
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
Проходит же.
Не, не путайте обычный синтаксис QueryRange и расширенный http://www.axaptapedia.com/Expressions_in_query_ranges
За это сообщение автора поблагодарили: Отшельник (1).
Старый 31.01.2013, 16:58   #7  
Отшельник is offline
Отшельник
Участник
 
38 / 11 (1) +
Регистрация: 15.06.2011
Вы наверное все же правы:
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Нужен вариант функции Date2StrXpp, но только для utcDateTime.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Не, не путайте обычный синтаксис QueryRange и расширенный http://www.axaptapedia.com/Expressions_in_query_ranges
Стараюсь не путать....Я из этой статьи и брал расширенный синтаксис.
Вот этот пример я и брал за основу
X++:
queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))',
    fieldStr(InventTable, ItemType),
    any2int(ItemType::Service),
    any2int(ItemType::Item),
    fieldStr(InventTable, ProjCategoryId),
    queryValue("Spares")));
У меня так:
X++:
  QueryBuildRange         gbr;
;
...
gbr = this.query().dataSourceTable(tablenum(CheckpointTable_KBK)).addRange(fieldnum(CheckpointTable_KBK, ArrivalDateTime));//Дата и время Прибытия
Потом пытался делать так:
X++:
   gbr.value   (strFmt (   '((%1 > %2) && (%1 < %3))',
                                fieldStr(CheckpointTable_KBK, ArrivalDateTime),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
В дебагере снимаю
NAME:
gbr
VALUE:
((ArrivalDateTime > "15.01.2013 09:00:00") && (ArrivalDateTime < "16.01.2013 08:59:59"))
TYPE:
QueryBuildRange

Вроде как бы все как надо, но данных нет.

X++:
gbr.value   (strFmt (   '%1..%2',
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
В дебагере вижу
ArrivalDateTime>='2013-01-15T09:00:00' AND ArrivalDateTime<='2013-01-16T08:59:59'
Выборка есть.

Явно разнятся форматы времени и даты.
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...
Старый 31.01.2013, 17:53   #8  
Отшельник is offline
Отшельник
Участник
 
38 / 11 (1) +
Регистрация: 15.06.2011
Спасибо всем за выручку!
Особое спасибо S.Kuskov
Все получилось вот так:

X++:
 gbr = this.query().dataSourceTable(tablenum(CheckpointTable_KBK)).addRange(fieldnum(CheckpointTable_KBK, ArrivalDateTime));//Дата и время Прибытия
        gbr.value   (strFmt (   
                                '((%1 > %3) && (%1 < %4)) || ((%2 > %3) && (%2 < %4))',
                                fieldStr(CheckpointTable_KBK, ArrivalDateTime),
                                fieldStr(CheckpointTable_KBK, DepartureDateTime),
                                DateTimeUtil::toStr(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
                                DateTimeUtil::toStr(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
                            )
                    );
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...
За это сообщение автора поблагодарили: kia (1).
Теги
query, range

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сложный Range в Query. axalex DAX: Программирование 7 28.07.2011 13:29
fatihdemirci: Axaptada forma kodla çoklu range eklemek Blog bot DAX Blogs 0 09.10.2010 09:25
jinx: Dynamics AX LookupForms &ndash; FindValue und Range auf gleichem Feld Blog bot DAX auf Deutsch 0 18.09.2009 03:13
axaptapedia: Packing date range values in queries Blog bot DAX Blogs 1 09.11.2007 13:10
и снова про сложный Range sparur DAX: Программирование 1 28.09.2007 15:59

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.