Разработка и Конфигурация · 9 мин
Как сообщить день недели в 1С
Как определить и вывести день недели в 1С: функция ДеньНедели, Формат с шаблоном ДЛФ, локализация, примеры кода, типичные ошибки и проверка результата.
Задача определить и сообщить день недели возникает в 1С постоянно: при формировании печатных форм, в регламентных заданиях, при проверке графиков работы и в сообщениях пользователю. Встроенный язык платформы даёт несколько способов решить её — от простой функции, возвращающей число, до форматированной строки с названием дня на нужном языке.
Выбор способа зависит от того, что именно требуется: число для сравнения в условии, текст «понедельник» для вывода на экран или полная строка вида «15 марта, среда» для документа. Ниже разобраны все рабочие варианты с примерами кода, ограничениями и типичными ошибками.
Как получить номер дня недели функцией ДеньНедели
Основной инструмент — встроенная функция ДеньНедели(Дата). Она принимает значение типа Дата и возвращает целое число от 1 до 7, где 1 — понедельник, а 7 — воскресенье. Такая нумерация соответствует стандарту ISO 8601 и привычна для российских пользователей.
ТекущийДень = ДеньНедели(ТекущаяДатаСеанса());
Если ТекущийДень >= 6 Тогда
Сообщить("Сегодня выходной день");
Иначе
Сообщить("Сегодня рабочий день, номер дня: " + ТекущийДень);
КонецЕсли;
Функция работает только со значением типа Дата. Если передать строку или число, платформа выдаст ошибку приведения типов. Поэтому при получении даты из внешних источников (файлов, HTTP-запросов) сначала преобразуйте значение в дату, например функцией Дата() или через разбор строки.
Как вывести название дня недели текстом
Число из ДеньНедели редко нужно конечному пользователю — обычно требуется слово «среда» или «пт». Самый простой способ — функция Формат() с форматной строкой ДЛФ:
НазваниеДня = Формат(ТекущаяДатаСеанса(), "ДЛФ=dddd");
// Результат: "среда"
ПолнаяСтрока = Формат(ТекущаяДатаСеанса(), "ДЛФ=DD");
// Результат: "15 марта 2026 г., среда" — дата с днём недели
Обратите внимание на регистр: dddd даёт только название дня недели, ddd — сокращённое название (например, «ср»), а DD — полную длинную дату, включающую день недели. Точный вид результата зависит от региональных настроек сеанса, поэтому в разных локализациях строка может отличаться.
Сообщить("Сегодня " + Формат(ТекущаяДатаСеанса(), "ДЛФ=dddd"));Если нужно название с заглавной буквы (в начале предложения), используйте функцию ТРег() или обработайте первый символ вручную: ВРег(Лев(НазваниеДня, 1)) + Сред(НазваниеДня, 2).
Как сообщить день недели пользователю в интерфейсе
Для вывода в управляемых формах и тонком клиенте применяйте объект СообщениеПользователю вместо устаревшего Сообщить() — особенно в клиент-серверном режиме, где важно корректно привязать сообщение к контексту:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Документ датирован "
+ Формат(ДатаДокумента, "ДЛФ=DD");
Сообщение.Сообщить();
Для интерактивного вопроса с указанием дня недели удобны ПоказатьОповещениеПользователя() и ПоказатьВопрос(). Например, перед проведением документа можно предупредить: «Выбранная дата приходится на воскресенье. Продолжить?» — с кнопками «Да/Нет».
- 1Определите, что нужно: число для условия или текст для вывода
- 2Для числа вызовите ДеньНедели(Дата) и сравните результат с 1–7
- 3Для текста вызовите Формат(Дата, "ДЛФ=dddd") или ДЛФ=DD
- 4Выведите результат через СообщениеПользователю, элемент формы или макет печатной формы
- 5Проверьте результат на датах разных дней недели, включая понедельник и воскресенье
Как использовать день недели в условиях и расчётах
Типовой сценарий — пропустить выходные при расчёте срока. Здесь ДеньНедели применяется в цикле сдвига даты:
ДатаОтгрузки = ДатаЗаказа;
Пока ДеньНедели(ДатаОтгрузки) > 5 Цикл
ДатаОтгрузки = ДатаОтгрузки + 86400; // плюс одни сутки
КонецЦикла;
Учтите важное ограничение: функция ДеньНедели не знает о производственном календаре. Праздничный вторник она вернёт как обычный рабочий день 2. Если логика зависит от праздников и переносов выходных, используйте регистр сведений «Данные производственного календаря» (в типовых конфигурациях) или собственный график работы, а ДеньНедели оставьте для простых проверок «суббота/воскресенье».
Локализация и представление дня недели
Результат функции Формат зависит от кода локализации сеанса. На русской локали ДЛФ=dddd вернёт «понедельник», на английской — «Monday». Если отчёт должен формироваться на конкретном языке независимо от настроек пользователя, укажите локализацию явно во втором параметре форматной строки: Формат(Дата, "Л=en_US; ДЛФ=dddd").
Альтернатива без зависимости от локали — собственное соответствие номеров и названий. Это полезно, когда текст жёстко задан в макете или нужен нестандартный вид (например, «Пн» с заглавной буквы):
Названия = Новый Соответствие;
Названия.Вставить(1, "Понедельник");
Названия.Вставить(2, "Вторник");
// ... и так далее до 7
ТекстДня = Названия[ДеньНедели(НужнаяДата)];
Такой подход полностью контролируется разработчиком, но требует сопровождения: при добавлении нового языка придётся расширять соответствие вручную.
Типичные ошибки и как их проверить
Первая распространённая ошибка — ожидание, что неделя начинается с воскресенья. В 1С понедельник — это 1, а не 0 и не 2. Если переносить логику из других языков (где воскресенье часто равно 0), условия на выходные «съезжают» на один день.
Вторая ошибка — передача в ДеньНедели пустой даты '00010101'. Функция вернёт значение и для неё, но такой результат обычно бессмысленен и может маскировать ошибку в данных. Перед вызовом проверяйте заполненность: Если ЗначениеЗаполнено(ДатаДокумента) Тогда ....
Третья ошибка — сравнение текстового названия дня со строкой «на глаз»: Если Формат(Дата, "ДЛФ=dddd") = "Суббота" Тогда. Регистр, локаль и региональные настройки могут изменить строку, и условие перестанет срабатывать. Для логики всегда сравнивайте числовой результат ДеньНедели, а текст оставляйте для отображения.
Как проверить результат
ДеньНедели возвращает ожидаемое число: понедельник — 1, воскресенье — 7
Число смещено на день — вероятна логика из другого языка программирования
Формат(Дата, "ДЛФ=dddd") выводит название дня на языке сеанса
Пустая строка или название на другом языке — проверьте форматную строку и локаль
Код проверяет ЗначениеЗаполнено перед вызовом
В сообщениях появляется день недели для даты 01.01.0001
Частые вопросы о дне недели в 1С
Как получить сокращённое название дня недели, например «Пн»?
Используйте Формат(Дата, "ДЛФ=ddd") — платформа вернёт сокращение по региональным настройкам, обычно «пн», «вт» и т.д. Если нужен свой формат с заглавной буквы, сформируйте строку вручную через соответствие номеров и сокращений.
Почему ДеньНедели возвращает не то число, которое я ожидаю?
Чаще всего причина в привычке к нумерации, где неделя начинается с воскресенья (0 или 1). В 1С действует ISO-нумерация: понедельник — 1, воскресенье — 7. Проверьте свои константы в сравнениях.
Как определить, выпадает ли дата на выходной с учётом праздников?
Функция ДеньНедели покажет только субботу и воскресенье. Для учёта праздников и переносов обратитесь к производственному календарю: в типовых конфигурациях это регистр сведений с данными о рабочих и нерабочих днях, в самописных решениях — собственный аналог.
Можно ли вывести день недели в запросе, а не в коде?
В языке запросов есть функция ДЕНЬНЕДЕЛИ(Дата), которая возвращает число от 1 до 7 — её можно использовать в выборке и условиях. Текстовое название в запросе не получить: преобразуйте число в название уже при обработке результата запроса.
Как вывести день недели в печатной форме документа?
В модуле формирования печатной формы вычислите строку через Формат(ДатаДокумента, "ДЛФ=DD") и присвойте её параметру макета. В самом макете достаточно ячейки с параметром — никаких вычислений внутри шаблона не требуется.
Зависит ли результат от часового пояса сервера?
День недели определяется от той даты, которую вы передали. Если используете ТекущаяДатаСеанса(), значение соответствует часовому поясу сеанса, а не сервера — это правильный выбор для пользовательской логики. Универсальное время может дать «вчерашний» день недели для части пользователей.
Что важно запомнить
ДеньНедели(Дата) возвращает число 1–7 (понедельник — воскресенье) и используется в условиях. Для текста применяйте Формат с ДЛФ=dddd или ДЛФ=DD. Не сравнивайте текстовые названия в коде, проверяйте заполненность даты и помните, что праздники функция не учитывает.