|
|
|
|
#1 |
|
Участник
|
Это потому что АХ 4 - старая версия
![]() Данный тип был добавлен в АХ 2009 |
|
|
|
|
#2 |
|
Участник
|
В AX 2009 как я понимаю данный тип поля уже является стандартным? Т.е. его можно применить для редактирования т.п.
http://www.axaptapedia.com/UtcDateTime |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от nix0root
В AX 2009 как я понимаю данный тип поля уже является стандартным? Т.е. его можно применить для редактирования т.п.
http://www.axaptapedia.com/UtcDateTime |
|
|
|
|
#4 |
|
Участник
|
Жаль что этот тип не откроют в полный доступ в 4-ке, на 2009 мы врятли будем переходить. Поэтому буду юзать прямые запросы к бд с TO_CHAR и TO_DATE
|
|
|
|
|
#5 |
|
Участник
|
Если не секрет, почему врядли переходить будете?
__________________
Ivanhoe as is.. |
|
|
|
|
#6 |
|
Участник
|
Во первых это дорого нам встанет.
Во вторых долго. В третьих ловить ошибки потом в теч длительного времени , тк у нас много своих наработок. Ну и самое главное у нас ORACLE )))) а на сколько я знаю 2009 уже никак не поддерживает ORA. Собственно вот почему мы не будем переходить на 2009
|
|
|
|
|
#7 |
|
Участник
|
Извините конечно, но я так и непонял, что такого делает этот прямой запрос, что нельзя сделать средствами аксапты?
Вы же вот это хотели получить? Или я что-то не понимаю? Код: ((T.Date > fromDate) || ((T.Date == fromDate) && (T.Time >= fromTime))) && ((T.Date < toDate) || ((T.Date == toDate) && (T.Time <= toTime))) У меня, напротив, встречный вопрос. Учитывая, что Как теперь будут выглядеть запросы, в котроых ограничено должно быть только время, но не число? |
|
|
|
| За это сообщение автора поблагодарили: belugin (1), Gustav (2). | |
|
|
#8 |
|
Ищущий знания...
|
Цитата:
Сообщение от S.Kuskov
Извините конечно, но я так и непонял, что такого делает этот прямой запрос, что нельзя сделать средствами аксапты?
Вы же вот это хотели получить? Или я что-то не понимаю? Код: ((T.Date > fromDate) || ((T.Date == fromDate) && (T.Time >= fromTime))) && ((T.Date < toDate) || ((T.Date == toDate) && (T.Time <= toTime))) ![]() Например, есть таблицы: Table1 с полями: FromDate, FromTime, ToDate, ToTime Table2 с полями: FromDate, FromTime, ToDate, ToTime известно значение Table2, нужно проверить есть ли пересекающиеся во времени строчки в Table1... вот такой случай решается в аксапте геморойно
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
| За это сообщение автора поблагодарили: nix0root (1). | |
|
|
#9 |
|
Участник
|
Ну даже с учетом поддержки 2009-й OR-ы, стоимость и время все равно остаются критичными
|
|
|
|
|
#10 |
|
Участник
|
Цитата:
Цитата:
X++: ((T1.fromDate < T2.toDate) || ((T1.fromDate == T2.toDate) && (T1.fromTime <= T2.toTime))) && ((T1.toDate > T2.fromDate) || ((T1.toDate == T2.fromDate) && (T1.toTime >= T2.fromTime))) P.S.: Накатал тут на коленке пару макросов для работы с датами и временем. Может кому пригодится. X++: #localmacro.lessOrEq
/* (%1) - Date_1 */
/* (%2) - Time_1 */
/* (%3) - Date_2 */
/* (%4) - Time_2 */
( ((%1) < (%3)) || ( ((%1) == (%3)) && ((%2) < (%4)) ) )
#endmacro
#localmacro.greatOrEq
/*(%1) - Date_1 */
/*(%2) - Time_1 */
/*(%3) - Date_2 */
/*(%4) - Time_2 */
( ((%1) > (%3)) || ( ((%1) == (%3)) && ((%2) > (%4)) ) )
#endmacro
#localmacro.dt
/* (%1) - Date */
/* (%2) - Time */
%1, %2
#endmacro
#localmacro.between
/* (%1) - DateFrom */
/* (%2) - TimeFrom */
/* (%3) - DateTo */
/* (%4) - TimeTo */
/* (%5) - Date */
/* (%6) - Time */
(#greatOrEq(#dt(%5, %6), #dt(%1, %2)) && #lessOrEq(#dt(%5, %6), #dt(%3, %4)))
#endmacro
#localmacro.cross
/* (%1) - DateFrom_1 */
/* (%2) - TimeFrom_1 */
/* (%3) - DateTo_1 */
/* (%4) - TimeTo_1 */
/* (%5) - DateFrom_2 */
/* (%6) - TimeFrom_2 */
/* (%7) - DateTo_2 */
/* (%8) - TimeTo_2 */
(#lessOrEq(#dt(%1, %2), #dt(%7, %8)) && #greatOrEq(#dt(%3, %4), #dt(%5, %6)))
#endmacro |
|
|
|
| За это сообщение автора поблагодарили: nix0root (1). | |
|
|
#11 |
|
Ищущий знания...
|
Цитата:
Сообщение от S.Kuskov
Извините конечно, но я так и непонял, что такого делает этот прямой запрос, что нельзя сделать средствами аксапты?
Вы же вот это хотели получить? Или я что-то не понимаю? Код: ((T.Date > fromDate) || ((T.Date == fromDate) && (T.Time >= fromTime))) && ((T.Date < toDate) || ((T.Date == toDate) && (T.Time <= toTime))) Мне же нужно определять вхождение периода1 в период2. Вот конкретный пример: Период1 = с 01.10.2010 00 : 00 по 01.10.2010 00 : 00 (понятно, что имеются ввиду одни сутки. Конечно можно сказать, что пользователь должен конечное время в периоде1 указать как 23 : 59, но пользователей много, за каждым не уследишь. Да и интуитивно, как мне кажется, человек считает сутками с 00 : 00 до 00 : 00, поэтому скорее всего рано или поздно так и поставит.) Период2 = с 01.10.2010 09 : 00 по 01.10.2010 18 : 00 Нужно определить входит ли период2 в период1 (визуально понятно, что входит )После раздумий получился следующий код: X++: select 2 where((2.FromDate < 1.ToDate || (2.FromDate == 1.ToDate && (2.FromTime <= 1.ToTime || 1.ToTime == 0))) || 1.ToDate == dateNull()) && ((2.ToDate > 1.FromDate || (2.ToDate == 1.FromDate && (2.ToTime >= 1.FromTime || 2.ToTime == 0))) || 2.ToDate == dateNull()) ну а если все ок, то и хорошо, может кому пригодиться, и не придется тратить лишний час на проверку правильности логики запроса
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#12 |
|
Участник
|
Цитата:
Сообщение от lev
Вот конкретный пример:
Период1 = с 01.10.2010 00 : 00 по 01.10.2010 00 : 00 (понятно, что имеются ввиду одни сутки. Конечно можно сказать, что пользователь должен конечное время в периоде1 указать как 23 : 59, но пользователей много, за каждым не уследишь. Да и интуитивно, как мне кажется, человек считает сутками с 00 : 00 до 00 : 00, поэтому скорее всего рано или поздно так и поставит.) если время нулевое 00:00, то считаем время равным 59:59. Так? Уточняющий вопрос. Такое допущение должно быть справедливо всегда или только если дата оконьчания совпадает с датой начала периода? т.е. как рассматривать период [01.10.2010 00:00 - 02.10.2010 00:00] как [01.10.2010 00:00 - 02.10.2010 00:01) или как [01.10.2010 00:00 - 02.10.2010 59:59] или как [01.10.2010 00:00 - 01.10.2010 59:59] ? При такой формулировке задачи, в любом случае, я бы не стал сохранять и использовать в условии те даты, которые ввёл пользователь. Что вам мешает перед обработкой/сохранением данных скорректировать их в правильный формат? Последний раз редактировалось S.Kuskov; 30.09.2010 в 15:26. |
|
|