|
![]() |
#1 |
Ищущий знания...
|
Цитата:
Сообщение от 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()) ![]() ну а если все ок, то и хорошо, может кому пригодиться, и не придется тратить лишний час на проверку правильности логики запроса ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от 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. |
|
![]() |
#3 |
Консультант
|
Цитата:
![]() Цитата:
с 01.10.2010 10:00 по 02.10.2010 00:00 достаточно неожиданно оказывается больше, чем с 01.10.2010 10:00 по 02.10.2010 11:11 Цитата:
Более того, можно, конечно пытаться ещё и интервалы с 10:00 до 10:00 (рабочая суточная смена) пытаться автоматически воспринимать как с 10:00 по 09:59. Тоже на мой взгляд, неправильно зашивать это в глубине системы. Ведь в случае таких вмешательств может получиться, что один отчет/запрос будет работать по явно введёному пользователем диапазону, а другой - по хитро обработанному. Не есть гуд. Извините за флуд, не удержался. Последний раз редактировалось Atar; 30.09.2010 в 15:46. Причина: Извините за флуд, не удержался. |
|
![]() |
#4 |
Ищущий знания...
|
Цитата:
в этом случае отработает условие: X++: 2.FromDate < 1.ToDate 02.10.2010 00:00 - это 02.10.2010 00:00 когда пользователь устанавливает конечную дату больше чем начальную, то с указанием времени у него проблем не возникает ![]() а вот в случае периода в рамках одних суток, случается ситуация которую описал я выше. Про авто подстановку правильного формата тоже думал, но тогда встает вопрос, а если пользователю действительно надо будет указать "00 : 00", тогда что? ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
Теги |
ax2009, ax4.0, utcdatetime, время, дата |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|