2 Replies Latest reply: Jun 6, 2013 7:08 AM by Sem Art RSS

    Календарь финансового года

      Появилась необходимость считать недели в календаре с первого февраля.

      При том, логика обратна системной в том, что по умолчанию неделя начавшаяся в предыдущем году заканчивается в следующем (например, если 31/12 - Понедельник 52й недели, то 06/01 - Воскресенье так же 52й недели), а требуется первой неделей года сделать ту, в которой находится 01/02.

      Данная задача была решена, но считаю, что решение крайне неэффективно, возможно, есть встроенная функция или более рациональный способ, ведь финансовые календари встречаются часто.

       

      Вот найденное решение:

       

      if(daynumberofyear(Temp.TempDate)<daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01')),

       

          dual(

               ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & (Year(Temp.TempDate)-1),

               (Year(Temp.TempDate)-1)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)

              )

          ,

         

           dual(

               ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & Year(Temp.TempDate),

               Year(Temp.TempDate)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)

              )

          ) as [Week and Year],