К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как сообщить день недели в 1С

Как определить и вывести день недели в 1С: функция ДеньНедели, Формат с шаблоном ДЛФ, локализация, примеры кода, типичные ошибки и проверка результата.

Задача определить и сообщить день недели возникает в 1С постоянно: при формировании печатных форм, в регламентных заданиях, при проверке графиков работы и в сообщениях пользователю. Встроенный язык платформы даёт несколько способов решить её — от простой функции, возвращающей число, до форматированной строки с названием дня на нужном языке.

Выбор способа зависит от того, что именно требуется: число для сравнения в условии, текст «понедельник» для вывода на экран или полная строка вида «15 марта, среда» для документа. Ниже разобраны все рабочие варианты с примерами кода, ограничениями и типичными ошибками.

Как получить номер дня недели функцией ДеньНедели

Основной инструмент — встроенная функция ДеньНедели(Дата). Она принимает значение типа Дата и возвращает целое число от 1 до 7, где 1 — понедельник, а 7 — воскресенье. Такая нумерация соответствует стандарту ISO 8601 и привычна для российских пользователей.

ТекущийДень = ДеньНедели(ТекущаяДатаСеанса());

Если ТекущийДень >= 6 Тогда

Сообщить("Сегодня выходной день");

Иначе

Сообщить("Сегодня рабочий день, номер дня: " + ТекущийДень);

КонецЕсли;

Функция работает только со значением типа Дата. Если передать строку или число, платформа выдаст ошибку приведения типов. Поэтому при получении даты из внешних источников (файлов, HTTP-запросов) сначала преобразуйте значение в дату, например функцией Дата() или через разбор строки.

Как вывести название дня недели текстом

Число из ДеньНедели редко нужно конечному пользователю — обычно требуется слово «среда» или «пт». Самый простой способ — функция Формат() с форматной строкой ДЛФ:

НазваниеДня = Формат(ТекущаяДатаСеанса(), "ДЛФ=dddd");

// Результат: "среда"

ПолнаяСтрока = Формат(ТекущаяДатаСеанса(), "ДЛФ=DD");

// Результат: "15 марта 2026 г., среда" — дата с днём недели

Обратите внимание на регистр: dddd даёт только название дня недели, ddd — сокращённое название (например, «ср»), а DD — полную длинную дату, включающую день недели. Точный вид результата зависит от региональных настроек сеанса, поэтому в разных локализациях строка может отличаться.

bsl
Сообщить("Сегодня " + Формат(ТекущаяДатаСеанса(), "ДЛФ=dddd"));

Если нужно название с заглавной буквы (в начале предложения), используйте функцию ТРег() или обработайте первый символ вручную: ВРег(Лев(НазваниеДня, 1)) + Сред(НазваниеДня, 2).

Как сообщить день недели пользователю в интерфейсе

Для вывода в управляемых формах и тонком клиенте применяйте объект СообщениеПользователю вместо устаревшего Сообщить() — особенно в клиент-серверном режиме, где важно корректно привязать сообщение к контексту:

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Документ датирован "

+ Формат(ДатаДокумента, "ДЛФ=DD");

Сообщение.Сообщить();

Для интерактивного вопроса с указанием дня недели удобны ПоказатьОповещениеПользователя() и ПоказатьВопрос(). Например, перед проведением документа можно предупредить: «Выбранная дата приходится на воскресенье. Продолжить?» — с кнопками «Да/Нет».

Порядок действий
  1. 1
    Определите, что нужно: число для условия или текст для вывода
  2. 2
    Для числа вызовите ДеньНедели(Дата) и сравните результат с 1–7
  3. 3
    Для текста вызовите Формат(Дата, "ДЛФ=dddd") или ДЛФ=DD
  4. 4
    Выведите результат через СообщениеПользователю, элемент формы или макет печатной формы
  5. 5
    Проверьте результат на датах разных дней недели, включая понедельник и воскресенье

Как использовать день недели в условиях и расчётах

Типовой сценарий — пропустить выходные при расчёте срока. Здесь ДеньНедели применяется в цикле сдвига даты:

ДатаОтгрузки = ДатаЗаказа;

Пока ДеньНедели(ДатаОтгрузки) > 5 Цикл

ДатаОтгрузки = ДатаОтгрузки + 86400; // плюс одни сутки

КонецЦикла;

Учтите важное ограничение: функция ДеньНедели не знает о производственном календаре. Праздничный вторник она вернёт как обычный рабочий день 2. Если логика зависит от праздников и переносов выходных, используйте регистр сведений «Данные производственного календаря» (в типовых конфигурациях) или собственный график работы, а ДеньНедели оставьте для простых проверок «суббота/воскресенье».

Локализация и представление дня недели

Результат функции Формат зависит от кода локализации сеанса. На русской локали ДЛФ=dddd вернёт «понедельник», на английской — «Monday». Если отчёт должен формироваться на конкретном языке независимо от настроек пользователя, укажите локализацию явно во втором параметре форматной строки: Формат(Дата, "Л=en_US; ДЛФ=dddd").

Альтернатива без зависимости от локали — собственное соответствие номеров и названий. Это полезно, когда текст жёстко задан в макете или нужен нестандартный вид (например, «Пн» с заглавной буквы):

Названия = Новый Соответствие;

Названия.Вставить(1, "Понедельник");

Названия.Вставить(2, "Вторник");

// ... и так далее до 7

ТекстДня = Названия[ДеньНедели(НужнаяДата)];

Такой подход полностью контролируется разработчиком, но требует сопровождения: при добавлении нового языка придётся расширять соответствие вручную.

Типичные ошибки и как их проверить

Первая распространённая ошибка — ожидание, что неделя начинается с воскресенья. В 1С понедельник — это 1, а не 0 и не 2. Если переносить логику из других языков (где воскресенье часто равно 0), условия на выходные «съезжают» на один день.

Вторая ошибка — передача в ДеньНедели пустой даты '00010101'. Функция вернёт значение и для неё, но такой результат обычно бессмысленен и может маскировать ошибку в данных. Перед вызовом проверяйте заполненность: Если ЗначениеЗаполнено(ДатаДокумента) Тогда ....

Третья ошибка — сравнение текстового названия дня со строкой «на глаз»: Если Формат(Дата, "ДЛФ=dddd") = "Суббота" Тогда. Регистр, локаль и региональные настройки могут изменить строку, и условие перестанет срабатывать. Для логики всегда сравнивайте числовой результат ДеньНедели, а текст оставляйте для отображения.

Типичные ошибки
01
Считать, что воскресенье — это 0 или 1: в 1С понедельник = 1, воскресенье = 7, условие на выходные смещается
02
Передавать в ДеньНедели строку или незаполненную дату — ошибка приведения типов или бессмысленный результат
03
Сравнивать текстовое название дня со строкой в коде — ломается при смене локали или регистра
04
Полагаться на ДеньНедели при расчёте сроков с праздниками — функция не знает о производственном календаре
Контрольные точки

Как проверить результат

Номер дня для известной даты
Норма

ДеньНедели возвращает ожидаемое число: понедельник — 1, воскресенье — 7

Тревожный признак

Число смещено на день — вероятна логика из другого языка программирования

Текстовое название
Норма

Формат(Дата, "ДЛФ=dddd") выводит название дня на языке сеанса

Тревожный признак

Пустая строка или название на другом языке — проверьте форматную строку и локаль

Поведение с пустой датой
Норма

Код проверяет ЗначениеЗаполнено перед вызовом

Тревожный признак

В сообщениях появляется день недели для даты 01.01.0001

Частые вопросы о дне недели в 1С

Как получить сокращённое название дня недели, например «Пн»?

Используйте Формат(Дата, "ДЛФ=ddd") — платформа вернёт сокращение по региональным настройкам, обычно «пн», «вт» и т.д. Если нужен свой формат с заглавной буквы, сформируйте строку вручную через соответствие номеров и сокращений.

Почему ДеньНедели возвращает не то число, которое я ожидаю?

Чаще всего причина в привычке к нумерации, где неделя начинается с воскресенья (0 или 1). В 1С действует ISO-нумерация: понедельник — 1, воскресенье — 7. Проверьте свои константы в сравнениях.

Как определить, выпадает ли дата на выходной с учётом праздников?

Функция ДеньНедели покажет только субботу и воскресенье. Для учёта праздников и переносов обратитесь к производственному календарю: в типовых конфигурациях это регистр сведений с данными о рабочих и нерабочих днях, в самописных решениях — собственный аналог.

Можно ли вывести день недели в запросе, а не в коде?

В языке запросов есть функция ДЕНЬНЕДЕЛИ(Дата), которая возвращает число от 1 до 7 — её можно использовать в выборке и условиях. Текстовое название в запросе не получить: преобразуйте число в название уже при обработке результата запроса.

Как вывести день недели в печатной форме документа?

В модуле формирования печатной формы вычислите строку через Формат(ДатаДокумента, "ДЛФ=DD") и присвойте её параметру макета. В самом макете достаточно ячейки с параметром — никаких вычислений внутри шаблона не требуется.

Зависит ли результат от часового пояса сервера?

День недели определяется от той даты, которую вы передали. Если используете ТекущаяДатаСеанса(), значение соответствует часовому поясу сеанса, а не сервера — это правильный выбор для пользовательской логики. Универсальное время может дать «вчерашний» день недели для части пользователей.

Итог

Что важно запомнить

ДеньНедели(Дата) возвращает число 1–7 (понедельник — воскресенье) и используется в условиях. Для текста применяйте Формат с ДЛФ=dddd или ДЛФ=DD. Не сравнивайте текстовые названия в коде, проверяйте заполненность даты и помните, что праздники функция не учитывает.