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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.03.2011, 12:28   #1  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Несмотря на все протесты Mifi, функция работает некорректно. Никакие это ни майя - очередная бага, вернее, их скопище, которые лежат еще с 3ки, если не раньше.

Да, wkofyr(_date) - работает некорректно. Но для этого и был написан пафосный класс-обертка weekOfYear(), который учитывает локальные настройки, в частности, с какого дня начинается неделя, но при этом при формировании тестовой даты не учитывает, что год может быть високосным

Ошибка возникает здесь, как я говорил:
X++:
            if (week > 52)
            {
                // Look at the last day of the week and compare it
                // to the target date.  If the year is different
                // then the target date is part of week 1 for next year.
                testDate = _curDate + ((#DaysPerWeek - 1) - dowCurDate); //Ошибка
Непонятна необходимость данной проверки. В России 31.12.2012 является 54 неделей, а не 1й.
Ладно, хорошо. Может, в мире и не так. Тогда надо учитывать, что каждый 4й год происходит такая беда как високосный год, и testDate формируется некорректно.

С Уважением,
Георгий
Старый 10.03.2011, 12:58   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от George Nordic Посмотреть сообщение
надо учитывать, что каждый 4й год происходит такая беда как високосный год, и testDate формируется некорректно.
А при чём тут високосный год? testDate формируется с одной лишь целью - узнать на какой год попадает конец недели. В случае если неделя начинается в одном году а коньчается в другом, то ей присваивают первый номер! Зачем это сделано? Наверное для того чтобы дни одной и той же недели с понедельника по воскресенье всегда оказывались в одном номере недели.
Старый 10.03.2011, 13:07   #3  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А при чём тут високосный год? testDate формируется с одной лишь целью - узнать на какой год попадает конец недели. В случае если неделя начинается в одном году а коньчается в другом, то ей присваивают первый номер!
Честно - я не помню уже. Давно разбирал, году в 2004 столкнулся с этой проблемой. Но давайте разберем вместе. Так вот, поставьте брекпоинт на эту строчку и проверьте, корректно ли формируется testDate в обычном и високосном году. В обычном году была ошибка на 2 дня, кажется, в високосный - тоже ошибка была.
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Зачем это сделано?
Да вот сам в шоке. Наверное, что бы понять, если последняя неделя года приходится с переходом на другой год, то дать ей номер 1?
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Наверное для того чтобы дни одной и той же недели с понедельника по воскресенье всегда оказывались в одном номере недели.
Угу. А вот с переходом через год этот фокус не срабатывает.

С Уважением,
Георгий
Старый 10.03.2011, 13:35   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от George Nordic Посмотреть сообщение
давайте разберем вместе. Так вот, поставьте брекпоинт на эту строчку и проверьте, корректно ли формируется testDate в обычном и високосном году.
Давайте ещё раз посмотрим на строчку которую вы привели
X++:
testDate = _curDate + ((#DaysPerWeek - 1) - dowCurDate);
Здесь testDate получается смещением даты в перёд на количество дней оставшееся до конца недели. Т.е. так чтобы попасть на воскресенье. Единственное место где здесь может быть засада - это функция dayofwk (используется для расчёта dowCurDate), возвращающая номер дня недели. Но она работает корректоно и в високосный год и в не високосный.

Цитата:
Сообщение от George Nordic Посмотреть сообщение
В обычном году была ошибка на 2 дня, кажется, в високосный - тоже ошибка была.
Т.е. дата testDate не попадала на воскресенье? Мне это воспроизвести не удалось.
Теги
weekofyear

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Баг на форме "Проводки по сопоставлению" S.Kuskov DAX: Программирование 12 29.04.2009 19:19
Тендер на внедрение модуля "Управление персоналом" и "Расчеты с персоналом" Oxsana DAX: Прочие вопросы 5 02.05.2006 19:47
Галка "Закрыто" на таблице "В наличии" sev DAX: Функционал 1 11.04.2006 10:19
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

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

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

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