Может кто решал задачу определения номера недели для произвольной даты в 1С (по европейскому стандарту или российскому госту, т.е. первой неделей года является та неделя, на которую попадает первый четверг нового года).
Ну или можете на пальцах объяснить суть алгоритма.
вот тут онлайн калькулятор http://planetcalc.ru/1252/, но алгоритма нет (
1С-ские методы как и функция языка запросов похоже используют "сквозную" нумерацию недель
(7) почитайте Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 "ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ" - официальный способ расчета номера недели в Российской Федерации
Вот такой алгоритм работает: (писал в пользовательском поле, если поймете смысл, реализуете и в коде)
Выбор
Когда Неделя(КонецПериода([Период, день], "Неделя")) = 1 И ДеньНедели(НачалоПериода(КонецПериода([Период, день], "Неделя"), "Год")) > 4
Тогда Выбор
Когда ДеньНедели(НачалоПериода(НачалоПериода([Период, день], "Неделя"), "Год")) > 4
Тогда Неделя(НачалоПериода([Период, день], "Неделя")) - 1
Иначе Неделя(НачалоПериода([Период, день], "Неделя"))
Конец
Иначе Выбор
Когда ДеньНедели(НачалоПериода(КонецПериода([Период, день], "Неделя"), "Год")) > 4
Тогда Неделя(КонецПериода([Период, день], "Неделя")) - 1
Иначе Неделя(КонецПериода([Период, день], "Неделя"))
Конец
Конец
Вот еще с выводом года и сравнением 1С с ГОСТ ИСО 8601-2001/ISO 8601:
ВЫБРАТЬ
ВЫБОР
КОГДА НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ)) = 1
И ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
ТОГДА ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
ТОГДА НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ)) - 1
ИНАЧЕ НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ))
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
ТОГДА НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ)) - 1
ИНАЧЕ НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ))
КОНЕЦ
КОНЕЦ КАК Неделя,
ВЫБОР
КОГДА НЕДЕЛЯ(&Т) = 1
ТОГДА ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(&Т, ГОД)) > 4
ТОГДА ГОД(&Т) - 1
ИНАЧЕ ГОД(&Т)
КОНЕЦ
КОГДА ГОД(&Т) <> ГОД(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Т, ДЕНЬ, 7), ГОД))
ТОГДА ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Т, ДЕНЬ, 7), ГОД)) > 4
ТОГДА ГОД(&Т)
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(КОНЕЦПЕРИОДА(&Т, ГОД)) = 7
ТОГДА ГОД(&Т)
ИНАЧЕ ГОД(&Т) + 1
КОНЕЦ
КОНЕЦ
ИНАЧЕ ГОД(&Т)
КОНЕЦ КАК Год,
НЕДЕЛЯ(&Т) КАК Неделя1С,
ГОД(&Т) КАК Год1С