![]() |
#1 |
Участник
|
![]()
Делаю сложный 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))
)
);
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... |
|
![]() |
#2 |
Участник
|
Как вариант, можно попробовать
X++: addRange( FieldNum( Table, dataAreaId ) ).value('(ArrivalDateTime == 01\01\1990 )||( DepartureDateTime == 01\01\1990)'); Последний раз редактировалось sparco; 31.01.2013 в 16:05. |
|
![]() |
#3 |
Участник
|
Нужен вариант функции Date2StrXpp, но только для utcDateTime.
|
|
![]() |
#4 |
Участник
|
Цитата:
Не проходит. Пробовал. Когда смотрю в дебагере вижу WHERE ((ArrivalDateTime = '1900-01-01T00:00:00')) С текстовыми полями проходит. Да и суть вопроса в том, что мне нужен диапазон: ArrivalDateTime с ... по... ИЛИ DepartureDateTime с... по Спасибо за помощь ![]()
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... Последний раз редактировалось Отшельник; 31.01.2013 в 16:36. |
|
![]() |
#5 |
Участник
|
X++: gbr.value (strFmt ( '%1..%2',
SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly, 32400)),
SysQuery::value(DateTimeUtil::newDateTime(fromDateShiftOnly+1, 32400-1))
)
);
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... |
|
![]() |
#6 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: Отшельник (1). |
![]() |
#7 |
Участник
|
Вы наверное все же правы:
Цитата:
Сообщение от 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 Хороший ученик во всем найдет себе учителя... |
|
![]() |
#8 |
Участник
|
Спасибо всем за выручку!
Особое спасибо 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). |