Синтаксис и применение Функция ДЕНЬГОДА в платформе 1С:Предприятие. Описание и примеры кода.
Полное описание, параметры и ограничения
Функция ДЕНЬГОДА
Данная функция предназначена для вычисления дня года из значения типа ДАТА. День года находится в диапазоне 1 – 366.
Параметр функции – это выражение, имеющее тип ДАТА.
Если в качестве параметра фигурирует значение типа ДАТА, то результатом функции будет значение типа ЧИСЛО. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и приводят к ошибке исполнения запроса.
см. также: Функции языка запросов
Практические примеры
Части даты: разобрать своё учебное событие 6 октября
Один параметр Дата возвращается в нескольких календарных проекциях. Число месяца, день недели и день года не смешиваются; дополнительно наблюдаем сохранение NULL в функции ГОД.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.
Процедура ВыполнитьПример() Экспорт
ДатаСобытия = Дата(2026, 10, 6, 12, 30, 45);
Если ТипЗнч(ДатаСобытия) <> Тип("Дата") Тогда
ВызватьИсключение "Передайте собственную дату события, не строку";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ГОД(&ДатаСобытия) КАК ГодСобытия,
| МЕСЯЦ(&ДатаСобытия) КАК МесяцСобытия,
| ДЕНЬ(&ДатаСобытия) КАК ДеньМесяца,
| ЧАС(&ДатаСобытия) КАК ЧасСобытия,
| МИНУТА(&ДатаСобытия) КАК МинутаСобытия,
| СЕКУНДА(&ДатаСобытия) КАК СекундаСобытия,
| КВАРТАЛ(&ДатаСобытия) КАК КварталСобытия,
| НЕДЕЛЯ(&ДатаСобытия) КАК НеделяСобытия,
| ДЕНЬНЕДЕЛИ(&ДатаСобытия) КАК ДеньНедели,
| ДЕНЬГОДА(&ДатаСобытия) КАК ДеньГода,
| ГОД(NULL) КАК НетГода";
Запрос.УстановитьПараметр("ДатаСобытия", ДатаСобытия);
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() <> 1 Тогда
ВызватьИсключение "Ожидалась одна собственная строка частей даты";
КонецЕсли;
Событие = Таблица[0];
Сообщить(Событие.ГодСобытия = 2026);
Сообщить(Событие.МесяцСобытия = 10);
Сообщить(Событие.ДеньМесяца = 6);
Сообщить(Событие.ЧасСобытия = 12);
Сообщить(Событие.МинутаСобытия = 30);
Сообщить(Событие.СекундаСобытия = 45);
Сообщить(Событие.КварталСобытия = 4);
Сообщить(Событие.НеделяСобытия = 41);
Сообщить(Событие.ДеньНедели = 2);
Сообщить(Событие.ДеньГода = 279);
Сообщить(ТипЗнч(Событие.НетГода) = Тип("Null"));
КонецПроцедурыРазбор по шагам
Собственная ДатаСобытия фиксирована: 06.10.2026 12:30:45. Не использовать ТекущаяДата, иначе контроль зависит от дня запуска.
Передать значение типа Дата параметром запроса. Строка 06.10.2026 не является датой только потому, что похожа на неё.
ГОД/МЕСЯЦ/ДЕНЬ извлекают 2026/10/6. ЧАС/МИНУТА/СЕКУНДА — 12/30/45, а не длительность между двумя событиями.
КВАРТАЛ возвращает 4 для октября. НЕДЕЛЯ здесь даёт 41; это номер недели года, не число недель от создания заявки.
ДЕНЬНЕДЕЛИ нумерует понедельник 1 и воскресенье 7. 6 октября 2026 — вторник, поэтому 2. ДЕНЬГОДА считает позицию даты в году: 279, а не 6.
ГОД(NULL) возвращает NULL. Проверить его тип, не подставлять молча год 0 и не считать NULL текстом.
До чтения Таблица[0] проверить одну строку. В каждой строке вывода проверяется свой календарный смысл, не строковое представление даты.
Как проверить результат
Одиннадцать сообщений Истина. Известная учебная дата даёт календарные значения 2026/10/6, 12:30:45, квартал 4, неделю 41, вторник 2, день года 279 и отдельное NULL-поле.
Замените только время на 0:0:0: час, минута и секунда изменятся, календарный день останется тем же. Для строкового ДатаСобытия защита останавливает пример до выполнения запроса.
Ожидаемый результат
Дата разложена на реально вычисляемые календарные признаки без обращения к производственным документам и без зависимости от текущего времени.
На что обратить внимание
Число месяца, номер недели, день месяца, день недели и день года — разные величины. Не используйте один показатель вместо другого.
Номер недели на границах года требует согласования правила недель с задачей. Контроль 41 относится только к этой фиксированной дате; он не объявляет универсальное правило календарной отчётности.
Тип Дата 1С не хранит здесь часовой пояс. Извлечение ЧАС не выполняет преобразование UTC в местное время.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.