Определение номера недели

1. sommid 27.07.16 10:47 Сейчас в теме
Может кто решал задачу определения номера недели для произвольной даты в 1С (по европейскому стандарту или российскому госту, т.е. первой неделей года является та неделя, на которую попадает первый четверг нового года).
Ну или можете на пальцах объяснить суть алгоритма.

вот тут онлайн калькулятор http://planetcalc.ru/1252/, но алгоритма нет (
1С-ские методы как и функция языка запросов похоже используют "сквозную" нумерацию недель
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SaschaL 27.07.16 11:04 Сейчас в теме
(1) sommid, так вроде нет ни какой проблемы, в 1С есть встроенная функция, которая возвращает номер недели
Неделя(ТекущаяДата())


в данном примере возвращает номер недели для текущей даты
5. sommid 27.07.16 11:09 Сейчас в теме
(2) я уже написал выше, что 1С-ские методы работают не так как мне надо.
ни НеделяГода() в коде, ни Неделя() в запросе.

например, 01.01.2017 - это воскресенье => это относится к неделе прошлого года, д.б. 52, а 1С возвращает 1
7. vovan_victory 65 27.07.16 11:42 Сейчас в теме
(5) sommid,
например, 01.01.2017 - это воскресенье => это относится к неделе прошлого года, д.б. 52

может я чего то не понял, но 1 января - это шестой день недели и первая неделя в году. По моему, 1с правильно выдает.
9. sommid 27.07.16 12:07 Сейчас в теме
(7) почитайте Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 "ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ" - официальный способ расчета номера недели в Российской Федерации
3. SaschaL 27.07.16 11:05 Сейчас в теме
Или вы хотите написать свой алгоритм определения номера недели. Может конечно я не до конца вник в ваш вопрос, но если так поправте
4. ranelio 27.07.16 11:06 Сейчас в теме
Да вроде ничего сложного:
Неделя = НеделяГода(Дата);
Если ДеньНедели(НачалоГода(Дата)) > 4 Тогда
    Неделя = Неделя - 1;
КонецЕсли;

Если Неделя = 0 Тогда
    Неделя = 52;
КонецЕсли;
Показать
6. sommid 27.07.16 11:11 Сейчас в теме
(4) в основной массе все так, но вот когда нужно взять последнюю неделю прошлого года, то вопрос.. может быть как 52 так и 53 недели в году
8. ranelio 27.07.16 11:43 Сейчас в теме
Не мое:
Цел((ДеньГода(Дата - (ДеньНедели(Дата) - 4) * 24 * 3600) - 1) / 7) + 1 

http://7orlum.livejournal.com/1192.html
creatermc; user950091; dmpas; Devi; tehas; svilsa; sondarium; МихаилМ; sommid; +9 Ответить
10. sommid 27.07.16 12:17 Сейчас в теме
(8) по формуле из приведенной ссылки вроде работает как надо. Спасибо!
11. HanterVol 8 27.07.16 13:45 Сейчас в теме
Можно тогда проще
Неделя = НеделяГода(НачалоНедели(ДатаНедели));
12. sommid 27.07.16 14:01 Сейчас в теме
(11) нет не будет работать - это поможет только для первой недели, а для второй и далее будет опять +1
13. kuzev 48 27.07.16 14:24 Сейчас в теме
14. bulldog 12.03.18 10:17 Сейчас в теме
Вот такой алгоритм работает: (писал в пользовательском поле, если поймете смысл, реализуете и в коде)
Выбор
		Когда Неделя(КонецПериода([Период, день], "Неделя")) = 1 И ДеньНедели(НачалоПериода(КонецПериода([Период, день], "Неделя"), "Год")) > 4
			Тогда Выбор
					Когда ДеньНедели(НачалоПериода(НачалоПериода([Период, день], "Неделя"), "Год")) > 4
						Тогда Неделя(НачалоПериода([Период, день], "Неделя")) - 1
					Иначе Неделя(НачалоПериода([Период, день], "Неделя"))
				Конец
		Иначе Выбор
				Когда ДеньНедели(НачалоПериода(КонецПериода([Период, день], "Неделя"), "Год")) > 4
					Тогда Неделя(КонецПериода([Период, день], "Неделя")) - 1
				Иначе Неделя(КонецПериода([Период, день], "Неделя"))
			Конец
	Конец
Показать
15. Maxx79 18.10.23 19:14 Сейчас в теме
Вот еще с выводом года и сравнением 1С с ГОСТ ИСО 8601-2001/ISO 8601:
ВЫБРАТЬ
	ВЫБОР
		КОГДА НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ)) = 1
				И ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
			ТОГДА ВЫБОР
					КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
						ТОГДА НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ)) - 1
					ИНАЧЕ НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&Т, НЕДЕЛЯ))
				КОНЕЦ
		ИНАЧЕ ВЫБОР
				КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ), ГОД)) > 4
					ТОГДА НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ)) - 1
				ИНАЧЕ НЕДЕЛЯ(КОНЕЦПЕРИОДА(&Т, НЕДЕЛЯ))
			КОНЕЦ
	КОНЕЦ КАК Неделя,
	ВЫБОР
		КОГДА НЕДЕЛЯ(&Т) = 1
			ТОГДА ВЫБОР
					КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(&Т, ГОД)) > 4
						ТОГДА ГОД(&Т) - 1
					ИНАЧЕ ГОД(&Т)
				КОНЕЦ
		КОГДА ГОД(&Т) <> ГОД(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Т, ДЕНЬ, 7), ГОД))
			ТОГДА ВЫБОР
					КОГДА ДЕНЬНЕДЕЛИ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Т, ДЕНЬ, 7), ГОД)) > 4
						ТОГДА ГОД(&Т)
					ИНАЧЕ ВЫБОР
							КОГДА ДЕНЬНЕДЕЛИ(КОНЕЦПЕРИОДА(&Т, ГОД)) = 7
								ТОГДА ГОД(&Т)
							ИНАЧЕ ГОД(&Т) + 1
						КОНЕЦ
				КОНЕЦ
		ИНАЧЕ ГОД(&Т)
	КОНЕЦ КАК Год,
	НЕДЕЛЯ(&Т) КАК Неделя1С,
	ГОД(&Т) КАК Год1С
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот