День добрый. подскажите кто знает еще способы определения високосного года.
ВЫБРАТЬ
ВЫБОР
КОГДА ДЕНЬГОДА(КОНЕЦПЕРИОДА(&ДАТА, ГОД)) = 365 ТОГДА
"НЕ ВИСОКОСНЫЙ"
ИНАЧЕ
"ВИСОКОСНЫЙ"
КОНЕЦ,
ДЕНЬГОДА(КОНЕЦПЕРИОДА(&ДАТА, ГОД))
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВЫБОР
КОГДА ДЕНЬ(ДОБАВИТЬКДАТЕ(&ДАТА, ДЕНЬ, 365)) = ДЕНЬ(&ДАТА) ТОГДА
"НЕ ВИСОКОСНЫЙ"
ИНАЧЕ
"ВИСОКОСНЫЙ"
КОНЕЦ,
ДОБАВИТЬКДАТЕ(&ДАТА, ДЕНЬ, 365)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВЫБОР
КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДАТА, ГОД), КОНЕЦПЕРИОДА(&ДАТА, ГОД), ДЕНЬ) = 364 ТОГДА
"НЕ ВИСОКОСНЫЙ"
ИНАЧЕ
"ВИСОКОСНЫЙ"
КОНЕЦ,
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДАТА, ГОД), КОНЕЦПЕРИОДА(&ДАТА, ГОД), ДЕНЬ)
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
распределение високосных годов:
год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные;
остальные годы, номер которых кратен 4, — високосные.
год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные;
остальные годы, номер которых кратен 4, — високосные.
Функция ЭтоДатаВисокосногоГода(Дата) Экспорт
Год = Год(Дата);
Если Год % 400 = 0 Тогда
Возврат Истина
ИначеЕсли Год % 100 = 0 Тогда
Возврат Ложь
ИначеЕсли Год % 4 = 0 Тогда
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;
КонецФункции
Показать
(4)
Можно так:
Хотя тут и другие варианты предлагались.
а как это можно сделать в запросе? просто пытался это реализовать в запросе, но так и не получилось.
Можно так:
ВЫБРАТЬ
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 2, 28), ГОД, &Год - 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 3, 1), ГОД, &Год - 1), ДЕНЬ) = 2
ТОГДА "Високосный"
ИНАЧЕ "Простой"
КОНЕЦ КАК ТипГода
Параметр &Год - числовое значение года. Если нужно получать для поля типа Дата в таблице, нужно использовать вместо параметра функцию ГОД(), например, ГОД(ДатаДокумента) - 1.
ВЫБОР
КОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 2, 28), ГОД, &Год - 1), ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 3, 1), ГОД, &Год - 1), ДЕНЬ) = 2
ТОГДА "Високосный"
ИНАЧЕ "Простой"
КОНЕЦ КАК ТипГода
Хотя тут и другие варианты предлагались.
Запрос, выводящий все високосные года между двумя указанными датами
============================================================ ====
ВЫБРАТЬ
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
УПОРЯДОЧИТЬ ПО
Год
============================================================ ====
============================================================
ВЫБРАТЬ
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
УПОРЯДОЧИТЬ ПО
Год
============================================================
(15)
Огромное спасибо за пример запроса. В документации к 8.0 было указано что запросы работают в двух режимах - 7-коподобные и SQLподобные. Мне было трудно понять что такое SQLподобный запрос в 8ке, пока не разобралась с SQL. За что огромная благодарность авторам инфостарта.
Запрос, выводящий все високосные года между двумя указанными датами
Огромное спасибо за пример запроса. В документации к 8.0 было указано что запросы работают в двух режимах - 7-коподобные и SQLподобные. Мне было трудно понять что такое SQLподобный запрос в 8ке, пока не разобралась с SQL. За что огромная благодарность авторам инфостарта.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот