Имя: Пароль:
1C
1С v8
НеделяГода?
0 Азазелло
 
29.11.11
12:41
Дорого времени суток, уважаемые.
Сегодня для меня большим открытием стало, что штатная функция НеделяГода() в текущем году возвращает номер недели больше истинного на 1. Полез читать, выяснил, что
...
В России действует стандарт ГОСТ ИСО 8601-2001, который соответствует европейскому стандарту ISO 8601. В соответствии с этими стандартами семидневная неделя начинается с понедельника и идентифицируется своим порядковым номером в году. Первой календарной неделей года считают первую неделю, содержащую первый четверг текущего года. В григорианском календаре — это неделя, содержащая 4 января. Неделя, в которой менее четырех дней приходятся на январь нового года, считается последней неделей старого года.

В США и Канаде первой неделей считается любая неделя, содержащая первое января, независимо от числа дней нового года приходящихся на эту неделю. Кроме того, первым днем недели в этих странах принято считать воскресенье. Из-за этого счет недель по европейскому и американскому стандарту может отличаться. Так, например, первое января, суббота в России и Европе считается последней неделей уходящего года, а в Америке и Канаде первой неделей нового года.
...
источник здесь: http://www.macmax.ru/calendar/

Так вот, вопрос: это меня баран покусал, и для получения истинного номера недели года необходимо писать свою функцию, или уже все велосипеды изобретены, нужно только выбрать нужный? (какая-либо штатная функция/настройка, БСП, или есть в типовых конфигурациях)
1 Axel2009
 
29.11.11
12:42
НеделяГода()-1?
2 Азазелло
 
29.11.11
12:43
(1) А если буду ей пользоваться в 2012 году?
3 Азазелло
 
29.11.11
12:46
омг, НЕДЕЛЯ() в запросах дает такой же результат :(
4 Defender aka LINN
 
29.11.11
12:49
(2) "это неделя, содержащая 4 января" - дальше сам догадаешься, или как?
5 Axel2009
 
29.11.11
12:49
(2) а что в ней будет не так? майя прилетят?
6 Aleksey
 
29.11.11
12:49
(0) баян обсуждали на мисте
7 Aleksey
 
29.11.11
12:50
8 Азазелло
 
29.11.11
12:51
2(7) спс.
9 Aleksey
 
29.11.11
12:52
2010 года с ответом от 1с
Предлагаемый алгоритм ISO имеет ряд существенных отличий от используемого у нас. Например, 1 января у нас всегда относится к 1-й неделе года, а 31 декабря к последней неделе предыдущего года. Даже, если эти обе даты приходятся на одну неделю. Согласно ISO-8601 31 декабря и 1 января могут относиться к одной неделе. И это будет либо последняя неделя уходящего года, либо 1-я неделя наступающего. Например, если 1 января приходится на пятницу, то согласно ISO-8601, эта дата будет оноситься к последней неделе предыдущего года, а 1-я неделя текущего года начнется только 4 января (в понедельник, то есть 1-й день недели). Таким образом, помимо функции НеделяГода() требуется функция ГодНеделиГода(), которая позоволит установить к какому году относится неделя года.

Кроме этого,  согласно CLDR и ICU определение дня, с которого начинается 1-я неделя года, является локейло-зависимым. Как и определение 1-го дня недели.

Алгоритм, подобный нашему, используется в MS SQL Server в функции DATEPART(week, ...). Там тоже 1 января всегда относится к 1-й неделе года, а 31 декабря - к последней.

Возможно, если мы решим получить функциональность ISO-8601, самым правильным было бы оставить НеделяГода() как есть и ввести новые две функции для вычисления недели года и года недели года. Эта задача занесена в проект. Будет ли это реализовано и сроки реализации сказать пока не готовы.
(с) OFF: Юзер утверждает, что 30 апреля это не 18-я неделя года
Программист всегда исправляет последнюю ошибку.