3 Replies Latest reply: Jul 4, 2017 6:56 PM by Stanislav Chernov RSS

    Ошибка в функции MakeWeekDate

    Stanislav Chernov

      Здравствуйте коллеги,

      У меня на борту : QV 11.20 SR6.

      Сталкивался ли кто с проблемой при генерации дат через функцию MakeWeekDate ?

      Привожу пример, у меня есть переменная vi = 02.07.2017 , определяем по ней - год, неделю и день недели:

      Year ('$(vi)') = 2017

      Week('$(vi)') =  27

      WeekDay('$(vi)') = вс (6ой день недели)

      Чтобы получить 6-ой день, можно преобразовать результат WeekDay сразу в Num, это работает так: = Num(WeekDay('$(vi)') ) = 6

      Я проверял с Num(WeekDay) и просто WeekDay - результат одинаковый, так вот...

       

      Теперь, я хочу создать дату, по этому же дню недели, но в прошлом году, собственно мне нужно использовать для этого такую функцию со значениями : =MakeWeekDate( Year ('$(vi)')-1, Week('$(vi)') , WeekDay('$(vi)'))

      Но у меня почему то возвращается не та дата, которая должна быть, а именно : 10.07.2016 (если проверить через Week эту дату - то у нас вернется 28-я неделя, а в исходном значении у нас 27-я неделя! - т.е. откуда то прибавляется одна неделя... собственно в этом и ошибка)

       

      Делаем проверку: =Year ('$(vi)')-1 = 2016 - всё правильно.

      Получается что у нас передаются в функцию такие значения : 2016 , 27 , вс

      Пробуем вручную, без переменных : = =MakeWeekDate( 2016, 27, 6) - результат такой же - 10.07.2016 ... чтобы получить дату 03.07.2016 нужно дополнительно отрезать одну неделю от исходной даты и тогда результат будет таким какой и нужен - вопрос - почему эта функция работает так как она работает ?


      Преобразование даты 02.07.2017 в дату 03.07.2016 делается таким образом: =MakeWeekDate( Year ('$(vi)')-1, Week('$(vi)')-1 , WeekDay('$(vi)')) ; и при этом, обе даты соответствуют 27-ой неделе и являются воскресеньями, разница только в годах (2017 и 2016)


      img-2017-07-04-23-31-15.png

      img-2017-07-04-23-28-50.png