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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.02.2010, 11:29   #1  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
Дата и время в Axapta
Возможно кому-нибудь пригодится данная конструкция.

Стояла следующая проблема:

Т.к. Axapta не умеет хранить в одном поле дату и время (например 11.11.2009 22:02:33), принято хранить эту информацию в двух отдельных полях (типы полей Date и Int). Это затрудняет поиск данных по периоду.

Я решил данную проблему следующим образом (пример для Oracle):

TO_DATE(TO_CHAR(T.DATE + (T.TIME/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS') BETWEEN
TO_DATE(TO_CHAR(TO_DATE('01.01.2010', 'DD.MM.YYYY') + (60692/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS') AND
TO_DATE(TO_CHAR(TO_DATE('22.02.2010', 'DD.MM.YYYY') + (43200/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS')
Старый 11.02.2010, 11:58   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от nix0root Посмотреть сообщение
Т.к. Axapta не умеет хранить в одном поле дату и время (например 11.11.2009 22:02:33), принято хранить эту информацию в двух отдельных полях (типы полей Date и Int). Это затрудняет поиск данных по периоду.
offtop:
Это справедливо только для более старых версий АХ, до появления типа utcDateTime
Старый 11.02.2010, 12:10   #3  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
Работаю на 4-ке, данного типа данных utcDateTime у меня нет
Старый 11.02.2010, 12:19   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от nix0root Посмотреть сообщение
Работаю на 4-ке, данного типа данных utcDateTime у меня нет
Это потому что АХ 4 - старая версия
Данный тип был добавлен в АХ 2009
Старый 11.02.2010, 12:25   #5  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
В AX 2009 как я понимаю данный тип поля уже является стандартным? Т.е. его можно применить для редактирования т.п.
http://www.axaptapedia.com/UtcDateTime
Старый 12.02.2010, 11:16   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от nix0root Посмотреть сообщение
В AX 2009 как я понимаю данный тип поля уже является стандартным? Т.е. его можно применить для редактирования т.п.
http://www.axaptapedia.com/UtcDateTime
Да, тип стандартный. Более того, в большинстве таблиц, где присутствовали время и дата, была произведена замена на новый тип.
Старый 11.02.2010, 12:17   #7  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Есть.
К примеру, таблица SysClientSessions.
Поле Login_date там именно такого типа, хотя нигде увидеть это из Аксапты невозможно - только из SQL Studio. Т.е. там не только дата входа хранится, но и время заодно, ибо SQL тип - DateTime.
Из-за этого, кстати, запросы типа select clientSessions where clientSessions.Login_date < systemdateget()) могут возвращать немного не то, что хотелось бы.
И в Global:: есть функция для работы с такими convertUTCDateToLocalDate, а вот обратной, кстати, нет, что приводит к проблемам с такими запросами.
Если интересно - можно еще посмотреть по ссылкам, где эта функция используется.
Но вот самому такое поле, думаю, заполнить не выйдет - это поле заполняется самим ядром.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 11.02.2010 в 12:20.
Старый 12.02.2010, 15:27   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
2009 поддерживает ORACLE http://www.microsoft.com/dynamics/en...ents-2009.aspx
За это сообщение автора поблагодарили: nix0root (1).
Старый 12.02.2010, 15:52   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Про переход и затраты понятно, но вот про возможности.. Пока из своего опыта 2009 намного стабильнее, полноценные 64 бита и т.п., в части функциональности много нового и интересного, в т.ч. локализаторы стараются.

В т.ч. дата и время не просто новый тип, он активно участвует в расчетах сроков поставки и проч., есть настройки часовых поясов пользователя.
__________________
Ivanhoe as is..
Старый 12.02.2010, 15:57   #10  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
А с какой базой вы работаете если не секрет, и чем пользуетесь для отчетов?
Старый 17.02.2010, 14:51   #11  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
На самом деле с фильтрацией все плохо .

Есть дата 08.02.2010 12:00:00. Фильтруем из формы (CTRL+F, либо правой мышкой), указывая дату - запись отображается. Открываем расширенный фильтр и видим, что, например, 08.02.2010 превратилось в "08.02.2010 00:00:00" и если мы сразу нажмем ОК, то фильтр уже сработает с условием и по времени, в итоге запись пропадет (а ведь мы ничего не поменял в фильтре)!!! Это очень неинтуитивно. Ну и еще - в расширенном фильтре по такому полю нельзя выбрать дату из календаря. MS потихоньку отказывается от расширенного фильтра?? )

Мне кажется правильнее было бы тогда уж использовать новый подход AX 2009 с ключевыми словами в критериях. Например, при фильтрации из формы чтобы критерий автоматически подставлялся как AnyTime(08.02.2010), а уже внутри скрытно для пользователя расшифровывался как "08.02.2010 00:00:00 .. 08.02.2010 23:59:59".
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: kashperuk (3).
Старый 17.02.2010, 15:34   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
На самом деле с фильтрацией все плохо .
Ну, не так уж и плохо, потому что она работает для большинства сценариев.
Просто нужно менять подход разработки уже сейчас, избегая использования отдельно Даты и Времени.

Функциональность выбора даты и времени в расширенном фильтре, возможно, будет добавлена в АХ6. Но пока окончательного решения не принято. Но баг в системе такой уже создан.
Старый 30.09.2010, 15:40   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Привычка дело наживное. Привыкли же все месяц вводить как 01.10.2010..31.10.2010, а не 01.10.2010..01.11.2010, чем время хуже!
Старый 30.09.2010, 15:54   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Ещё добавлю, вопрос как раз в указании времени, а не в указании дат, с периодом дат все нормально
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.09.2010, 16:05   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Можно попытаться отличить случай, когда пользователь вообще не вводил время потому,что оно ему не важно, и время осталось нулевым, от случая, когда пользователь намеренно ввёл 00:00.
Тип time может принимать значение -1, которое визуально отображается как "??????". Он принимает это значение при ошибке ввода. Можно использовать это значение в качестве начального, что бы потом определить корректировал его пользователь или нет.

Или вообще для ввода времени использовать текстовое поле с проверками. Тогда значение "00:00" можно считать настоящим нулём, а пустую строку - концом суток

P.S.: А можно даже свой тип сделать и лукап к нему для ввода времени

Последний раз редактировалось S.Kuskov; 30.09.2010 в 16:14.
Теги
ax2009, ax4.0, utcdatetime, время, дата

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 22.11.2006 15:20
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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