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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2018, 15:50   #1  
BuzCom is offline
BuzCom
Участник
 
38 / 13 (1) ++
Регистрация: 10.08.2017
Неожиданное поведение функции DT2DATE
Столкнулся тут с непредвиденной ошибкой, может кому будет полезно. Вкратце, у нас идет импорт через xml файлы, где присутствует время обновления файла. Если время старее того, что в базе, то ничего не делать. Но последние два месяца пошли жалобы - инфа не хочет обновляться. Расследование показало, что это в основном относится к вечерней информации. Стал копать и вуаля. Вот оно. Маленькая процедурка, где участвовала функция DT2DATE. В примере ниже видно, что при часовом поясе на сервере UTC+3, функция считает, что на вход ей подается время в UTC, а дату выдает в часовом поясе +3. В настройках сервера приложений для сервиса стоит время по умолчанию UTC, если что. То есть при получении времени от 21 до 0 часов эта п.... тупо прибавляла три часа и возвращала уже следующие сутки. Дальше эта инфа записывалась в базу и целые сутки считалось, что информация в базе новее приходящих обновлений.

Код:
EVALUATE(xDateTime,'2018-01-16T21:56:12',9);
  IF (xDateTime <> 0DT) AND EVALUATE(Time1,COPYSTR(FORMAT(xDateTime,0,9),12,8)) THEN
  BEGIN
    xDateTime := CREATEDATETIME(DT2DATE(xDateTime),Time1);
  END;
MESSAGE('%1',xDateTime);
Старый 19.01.2018, 00:32   #2  
jopagames is offline
jopagames
Участник
 
45 / 20 (1) +++
Регистрация: 22.11.2011
Цитата:
Сообщение от BuzCom Посмотреть сообщение
Столкнулся тут с непредвиденной ошибкой, может кому будет полезно...
Расследование редкой функции DT2DATE - штука хорошая
Уточните только, пожалуйста, а ошибка где именно обнаружилась (и как исправилась)?

1. В голове программиста
2. При формировании файла XML
3. В ядре Navision
4. В "настройках сервера приложений для сервиса"
5. где-то ещё...

Я прочитал, но не всё понял.
Особенно про "ошибка только в последние 2 месяца" стала проявляться (что же с UTC случилось? Земля в ноябре налетела на небесную ось? )
Старый 19.01.2018, 10:01   #3  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,566 / 66 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
https://msdn.microsoft.com/en-us/lib...v=nav.90).aspx
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
За это сообщение автора поблагодарили: jopagames (1).
Старый 19.01.2018, 16:26   #4  
BuzCom is offline
BuzCom
Участник
 
38 / 13 (1) ++
Регистрация: 10.08.2017
Цитата:
Сообщение от jopagames Посмотреть сообщение
Расследование редкой функции DT2DATE - штука хорошая
Уточните только, пожалуйста, а ошибка где именно обнаружилась (и как исправилась)?

1. В голове программиста
2. При формировании файла XML
3. В ядре Navision
4. В "настройках сервера приложений для сервиса"
5. где-то ещё...

Я прочитал, но не всё понял.
Особенно про "ошибка только в последние 2 месяца" стала проявляться (что же с UTC случилось? Земля в ноябре налетела на небесную ось? )
Все просто - последние два месяца идет переход с 2009 на 2016.
В xml как раз приходит все верно. Именно это время и хотелось бы вносить в базу. Но при импорте тупо добавляется время из текущего часового пояса сервера. Подчеркну - сервера, на котором установлен сам Nav! Чтобы избежать этого, была написана функция, которая сначала разделяла строку на дату и время, а потом снова склеивала. И только после этого вносилось в базу. В 2009 это работало, время попадало правильное. В 2016 - перестало. Именно из-за DT2DATE. Которая теперь так же смотрит на часовой пояс сервера и добавляет часы к дате.
Настройка сервера по ссылке выше влияет только при работе веб-сервиса. У нас установлено UTC, но можно поставить и другое - никаких изменений нет.
В результате сейчас дату из строки получаем строковой функцией:
Код:
EVALUATE(xDate,COPYSTR(FORMAT(xDateTime,0,9),1,10),9);
Попутно вопрос: для типа datetime можно ли на входе сразу указывать часовой пояс ?
Теги
datetime, utcdatetime

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
использование функции FIELDCAPTION maxofon NAV: Программирование 11 30.03.2015 09:12
Тригонометрические функции balashov NAV: Программирование 2 03.01.2007 23:47
OnModify , Rec , Xrec - странное поведение randrews NAV: Программирование 3 27.10.2006 19:05
Странное поведение GET и FIND в форме aleksys NAV: Программирование 3 07.10.2005 10:54
Функции Navision Шрэк NAV: Программирование 15 17.01.2005 17:57
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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