Високосный год

1. kvaleksandr 22 19.02.19 14:25 Сейчас в теме
День добрый. подскажите кто знает еще способы определения високосного года.

ВЫБРАТЬ
	ВЫБОР
		КОГДА ДЕНЬГОДА(КОНЕЦПЕРИОДА(&ДАТА, ГОД)) = 365 ТОГДА
			"НЕ ВИСОКОСНЫЙ"
		ИНАЧЕ
			"ВИСОКОСНЫЙ"
	КОНЕЦ,	
	ДЕНЬГОДА(КОНЕЦПЕРИОДА(&ДАТА, ГОД))

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВЫБОР
		КОГДА ДЕНЬ(ДОБАВИТЬКДАТЕ(&ДАТА, ДЕНЬ, 365)) = ДЕНЬ(&ДАТА) ТОГДА
			"НЕ ВИСОКОСНЫЙ"
		ИНАЧЕ
			"ВИСОКОСНЫЙ"
	КОНЕЦ,
	ДОБАВИТЬКДАТЕ(&ДАТА, ДЕНЬ, 365)	
	
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДАТА, ГОД), КОНЕЦПЕРИОДА(&ДАТА, ГОД), ДЕНЬ) = 364 ТОГДА
			"НЕ ВИСОКОСНЫЙ"
		ИНАЧЕ
			"ВИСОКОСНЫЙ"
	КОНЕЦ,
	РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДАТА, ГОД), КОНЕЦПЕРИОДА(&ДАТА, ГОД), ДЕНЬ)
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 19.02.19 15:17 Сейчас в теме
распределение високосных годов:
год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные;
остальные годы, номер которых кратен 4, — високосные.

Функция ЭтоДатаВисокосногоГода(Дата) Экспорт
	Год = Год(Дата);
	Если Год % 400 = 0 Тогда
		Возврат Истина
	ИначеЕсли Год % 100 = 0 Тогда
		Возврат Ложь
	ИначеЕсли Год % 4 = 0 Тогда
		Возврат Истина
	Иначе
		Возврат Ложь		
	КонецЕсли;
КонецФункции
Показать
3. boln 1040 24.02.19 19:22 Сейчас в теме
Получить разность в днях между 01.03 и 28.02 нужного года. Если разность 1, то год простой, если 2, то високосный.
4. kvaleksandr 22 25.02.19 14:57 Сейчас в теме
(3) а как это можно сделать в запросе? просто пытался это реализовать в запросе, но так и не получилось.
5. Octopus 337 25.02.19 15:52 Сейчас в теме
(4)
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(ПроверяемыйГод, 2, 28), ДАТАВРЕМЯ(ПроверяемыйГод, 3, 1), ДЕНЬ) = 2 КАК ЭтоВисокосныйГод
6. kvaleksandr 22 26.02.19 07:26 Сейчас в теме
(5)
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(ПроверяемыйГод, 2, 28), ДАТАВРЕМЯ(ПроверяемыйГод, 3, 1), ДЕНЬ) = 2

Я пробовал так, но вот к сожалению параметром год передать нельзя.
7. Octopus 337 26.02.19 07:50 Сейчас в теме
(6) в вашем примере передается &Дата, используйте функцию ГОД(&Дата)
9. kvaleksandr 22 26.02.19 08:24 Сейчас в теме
(7) и это так же не работает. я уже пробовал такой вариант ранее. Отсюда заморочка с передачей параметра.
10. Octopus 337 26.02.19 08:26 Сейчас в теме
(9) Так все-таки, что подается запросу на вход?
11. kvaleksandr 22 26.02.19 08:32 Сейчас в теме
(10) Передается дата, но выдается ошибка при выполнении запроса.

12. Octopus 337 26.02.19 08:46 Сейчас в теме
(11) РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ГОД), МЕСЯЦ, 1), ДЕНЬ, 27), ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ГОД), МЕСЯЦ, 2), ДЕНЬ) = 2
14. boln 1040 27.02.19 15:09 Сейчас в теме
(6)
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(ПроверяемыйГод, 2, 28), ДАТАВРЕМЯ(ПроверяемыйГод, 3, 1), ДЕНЬ) = 2
ДАТАВРЕМЯ() - это не функция, это "литерал функционального типа". Аргументами могут быть только целые числа - и больше ничего.
13. boln 1040 27.02.19 15:06 Сейчас в теме
(4)
а как это можно сделать в запросе? просто пытался это реализовать в запросе, но так и не получилось.

Можно так:
ВЫБРАТЬ
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 2, 28), ГОД, &Год - 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 3, 1), ГОД, &Год - 1), ДЕНЬ) = 2
ТОГДА "Високосный"
ИНАЧЕ "Простой"
КОНЕЦ КАК ТипГода
Параметр &Год - числовое значение года. Если нужно получать для поля типа Дата в таблице, нужно использовать вместо параметра функцию ГОД(), например, ГОД(ДатаДокумента) - 1.

Хотя тут и другие варианты предлагались.
8. Octopus 337 26.02.19 07:51 Сейчас в теме
Ну и почитайте уже описание функций в запросах...
15. user1192282 13.03.21 13:11 Сейчас в теме
Запрос, выводящий все високосные года между двумя указанными датами

============================================================­====
ВЫБРАТЬ
0 КАК Цифра
ПОМЕСТИТЬ ВТ_Цифры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), ГОД, 100 * ВТ_Цифры2.Цифра + 10 * ВТ_Цифры1.Цифра + ВТ_Цифры.Цифра) КАК Год
ПОМЕСТИТЬ ВТ
ИЗ
ВТ_Цифры КАК ВТ_Цифры,
ВТ_Цифры КАК ВТ_Цифры1,
ВТ_Цифры КАК ВТ_Цифры2
ГДЕ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), ГОД, 100 * ВТ_Цифры2.Цифра + 10 * ВТ_Цифры1.Цифра + ВТ_Цифры.Цифра) МЕЖДУ &Дата1 И &Дата2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВТ.Год КАК Год
ИЗ
ВТ КАК ВТ
ГДЕ
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВТ.Год, ГОД), КОНЕЦПЕРИОДА(ВТ.Год, ГОД), ДЕНЬ) = 365

УПОРЯДОЧИТЬ ПО
Год
============================================================­====
user1534961; +1 Ответить
16. user1534961 13.03.21 13:32 Сейчас в теме
(15)
Запрос, выводящий все високосные года между двумя указанными датами

Огромное спасибо за пример запроса. В документации к 8.0 было указано что запросы работают в двух режимах - 7-коподобные и SQLподобные. Мне было трудно понять что такое SQLподобный запрос в 8ке, пока не разобралась с SQL. За что огромная благодарность авторам инфостарта.
Оставьте свое сообщение

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