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

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

Как в 1С вывести день недели словом

Как в 1С вывести день недели словом: функция ДеньНедели, форматная строка Формат(), регистр сведений и готовые примеры кода для отчетов и документов.

Во встроенном языке 1С тип «Дата» хранит только число, месяц и год, а название дня недели в явном виде не содержит. Поэтому задача вывести «понедельник» или «пятницу» словом возникает постоянно: в печатных формах, отчетах, надписях на формах и при обмене данными. Встроенная функция ДеньНедели() возвращает только число от 1 до 7, и это число нужно преобразовать в строку.

Существует несколько рабочих способов: форматная строка функции Формат(), соответствие чисел названиям, функция с конструкцией «Если…ИначеЕсли», а также готовые механизмы типовых конфигураций. Выбор зависит от того, где нужен результат — в коде, в запросе, в СКД или в макете печатной формы.

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

Как работает функция ДеньНедели() и почему она возвращает число

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

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

ДатаДокумента = ТекущаяДатаСеанса();

НомерДня = ДеньНедели(ДатаДокумента); // например, 5 — это пятница

Отдельный нюанс — работа с пустой датой. Если передать в ДеньНедели() значение '00010101' (пустая дата), функция вернет 1, то есть понедельник. Это частая причина ошибок: документ без даты в отчете внезапно «становится понедельником». Перед выводом проверяйте дату на заполненность через ЗначениеЗаполнено(Дата).

Вывод дня недели через форматную строку Формат()

Самый короткий способ — функция Формат() с форматной строкой ДФ=dddd. Четыре строчные буквы «d» означают полное название дня недели, а «ddd» — сокращенное («пн», «вт»).

ДеньСловом = Формат(ТекущаяДатаСеанса(), "ДФ=dddd");      // "пятница"

ДеньКратко = Формат(ТекущаяДатаСеанса(), "ДФ=ddd"); // "пт"

ПолнаяСтрока = Формат(ТекущаяДатаСеанса(), "ДФ='dddd, d MMMM yyyy г.'"); // "пятница, 12 января 2026 г."

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

Ключевое ограничение: язык названия зависит от кода локализации сеанса или параметра Л= в форматной строке. Если сеанс запущен с английской локализацией, вы получите «Friday». Для гарантированного русского результата укажите локаль явно:

ДеньСловом = Формат(Дата, "ДФ=dddd; Л=ru_RU");

Преобразование числа в слово через Соответствие

Когда нужен полный контроль над написанием — склонение, регистр, сокращения под макет — используйте Соответствие. Это универсальный подход, не зависящий от локали и настроек сеанса.

Функция ДеньНеделиСловом(Дата) Экспорт

ДниНедели = Новый Соответствие;

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

ДниНедели.Вставить(2, "Вторник");

ДниНедели.Вставить(3, "Среда");

ДниНедели.Вставить(4, "Четверг");

ДниНедели.Вставить(5, "Пятница");

ДниНедели.Вставить(6, "Суббота");

ДниНедели.Вставить(7, "Воскресенье");

Возврат ДниНедели[ДеньНедели(Дата)];

КонецФункции

Такую функцию разумно разместить в общем модуле, например «РаботаСДатами», чтобы вызывать из любого места конфигурации. Если модуль серверный, а вызов идет с клиента, установите признаки «Сервер» и «Вызов сервера».

Для производительности в массовых операциях (обход тысяч строк табличной части) создавайте Соответствие один раз и передавайте его параметром, а не формируйте на каждой итерации. Впрочем, для типовых задач печати и отчетов разница в скорости незаметна.

bsl
ДниНедели = Новый Соответствие;
ДниНедели.Вставить(1, "Понедельник");
// ... остальные дни
НазваниеДня = ДниНедели[ДеньНедели(ДатаДокумента)];

День недели словом в запросе и СКД

В языке запросов есть функция ДЕНЬНЕДЕЛИ(Дата), которая так же возвращает число 1–7. Чтобы получить слово прямо в запросе, используйте конструкцию ВЫБОР:

ВЫБОР

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 1 ТОГДА "Понедельник"

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 2 ТОГДА "Вторник"

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 3 ТОГДА "Среда"

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 4 ТОГДА "Четверг"

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 5 ТОГДА "Пятница"

КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 6 ТОГДА "Суббота"

ИНАЧЕ "Воскресенье"

КОНЕЦ КАК ДеньНедели

В СКД есть альтернатива без изменения запроса: добавьте вычисляемое поле с выражением Формат(Период, "ДФ=dddd") на вкладке «Вычисляемые поля». Это удобно, когда запрос нельзя трогать или когда название нужно только для отображения, а не для группировки.

Если по дню недели нужно группировать данные (например, продажи по дням недели для анализа загрузки магазина), предпочтительнее вариант с ВЫБОР в запросе: группировка по строковому полю работает корректно, а порядок сортировки можно задать через дополнительное числовое поле ДЕНЬНЕДЕЛИ().

Сравнение вариантов

Формат(Дата, "ДФ=dddd")

Самый быстрый для разовых выводов и печатных форм. Ограничение: зависит от локали сеанса, регистр и склонение фиксированы.

Соответствие + ДеньНедели()

Полный контроль над написанием, независимость от локали. Требует отдельной функции в общем модуле.

ВЫБОР в запросе

Единственный способ получить слово на уровне СУБД для группировок и отчетов. Громоздкий текст запроса.

Вычисляемое поле СКД

Подходит для отчетов без правки запроса. Не работает вне СКД и не годится для группировок с произвольным порядком.

Вывод в печатных формах и на формах объектов

В макетах печатных форм (табличный документ) название дня обычно подставляется в параметр области. Заполнение выполняется в коде формирования печатной формы:

ОбластьШапка.Параметры.ДатаСтрокой = 

Формат(ДатаДокумента, "ДФ='dddd, d MMMM yyyy г.; Л=ru_RU'");

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

При выводе в заголовок документа или в представление ссылки учитывайте, что представление формируется в модуле менеджера объекта (обработчик ОбработкаПолученияПолейПредставления / ОбработкаПолученияПредставления). Вставлять туда длинные строки с днем недели стоит только при реальной потребности — это замедляет формирование списков.

Порядок действий для печатной формы
  1. 1
    Откройте модуль менеджера документа и найдите процедуру формирования печатной формы
  2. 2
    Добавьте параметр в область макета, например {ДеньНедели}
  3. 3
    В коде заполните его: Область.Параметры.ДеньНедели = Формат(ДатаДокумента, "ДФ=dddd; Л=ru_RU")
  4. 4
    Сохраните конфигурацию и сформируйте печатную форму тестового документа
  5. 5
    Проверьте документ с датой на выходной и на понедельник — убедитесь, что название корректно

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

Первая распространенная ошибка — использование ДеньНедели() в надежде получить строку и последующий вывод числа пользователю. Вторая — забытый параметр локали, из-за чего на сервере с английскими настройками в русскую печатную форму попадает «Monday». Третья — обработка пустой даты: как отмечалось, '00010101' дает «понедельник», что искажает отчеты по незаполненным документам.

Еще одна ловушка — путаница между ДФ и ДЛФ. Формат ДЛФ=D выводит длинную дату целиком («12 января 2026 г.»), но без дня недели. День недели доступен только через ДФ с шаблоном dddd.

Типичные ошибки
01
Вывод результата ДеньНедели() напрямую — пользователь видит цифру 5 вместо «пятница»
02
Отсутствие Л=ru_RU в форматной строке — на сервере с другой локалью название выходит на английском
03
Отсутствие проверки ЗначениеЗаполнено(Дата) — пустая дата превращается в «понедельник»
04
Сортировка по строковому названию дня — дни выстраиваются по алфавиту, а не по порядку недели; сортируйте по числовому ДеньНедели()
05
Использование ДЛФ=D в ожидании дня недели — этот формат его не содержит
Контрольные точки

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

Дата — понедельник
Норма

Выводится «понедельник» / «Понедельник»

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

Число 1 или название другого дня

Пустая дата документа
Норма

Пустая строка или прочерк

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

«Понедельник» при незаполненной дате

Печатная форма с сервера
Норма

Название на русском языке

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

«Friday» — не задана локаль в форматной строке

Сортировка отчета по дням
Норма

Пн, Вт, Ср… по порядку

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

Алфавитный порядок строк

Какой способ выбрать

Для разовой надписи, печатной формы или представления в списке берите Формат(Дата, "ДФ=dddd; Л=ru_RU") — это одна строка кода без дополнительных функций. Для нестандартного написания (сокращения, склонения, другой регистр) создайте функцию с Соответствием в общем модуле. Для отчетов на СКД с группировкой по дням недели используйте ВЫБОР в запросе плюс числовое поле для сортировки.

Маршрут решения

Как выбрать действие

Нужно быстро вывести день в печатной форме или надписиИспользуйте Формат(Дата, "ДФ=dddd; Л=ru_RU")
Требуется особое написание, склонение или сокращениеСоздайте функцию с Соответствием в общем модуле
Нужна группировка по дням недели в отчете СКДДобавьте ВЫБОР с ДЕНЬНЕДЕЛИ() в запрос и числовое поле для сортировки
Запрос в отчете менять нельзяДобавьте вычисляемое поле СКД с Формат(Период, "ДФ=dddd")
Итог

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

ДеньНедели() возвращает число 1–7, а слово получают через Формат() с шаблоном ДФ=dddd, через Соответствие или через ВЫБОР в запросе. Всегда фиксируйте локаль Л=ru_RU для печатных форм, проверяйте дату на заполненность и сортируйте по числовому номеру дня, а не по названию.

Частые вопросы

Как вывести сокращенное название дня недели — «пн», «вт»?

Используйте форматную строку с тремя буквами: Формат(Дата, "ДФ=ddd"). Результат — сокращение по правилам текущей локали. Если нужны собственные сокращения (например, «Пн.» с точкой), сформируйте их через Соответствие.

Почему вместо «пятница» выводится «Friday»?

Форматная строка ДФ=dddd берет язык из региональных настроек сеанса. На сервере или в сеансе с английской локалью название будет английским. Добавьте параметр локали: Формат(Дата, "ДФ=dddd; Л=ru_RU").

Как получить день недели словом в запросе без конструкции ВЫБОР?

В языке запросов нет функции форматирования даты в строку, поэтому ВЫБОР с ДЕНЬНЕДЕЛИ() — единственный способ на уровне запроса. Альтернатива — вычисляемое поле СКД с Формат() или постобработка результата запроса в коде.

Как сделать название дня с заглавной буквы?

Формат() возвращает название в нижнем регистре. Приведите первую букву к верхнему регистру: НазваниеДня = ВРег(Лев(Строка,1)) + Сред(Строка,2). Либо задайте названия с заглавной буквы в Соответствии.

Почему для пустой даты выводится «понедельник»?

Пустая дата '00010101' приходится на понедельник, и ДеньНедели() для нее возвращает 1. Перед выводом проверяйте дату: Если ЗначениеЗаполнено(Дата) Тогда … Иначе выводить пустую строку.

Можно ли вывести день недели вместе с датой одной строкой?

Да, комбинируйте шаблоны в одной форматной строке: Формат(Дата, "ДФ='dddd, d MMMM yyyy г.; Л=ru_RU'") даст «пятница, 12 января 2026 г.». Текст в одинарных кавычках внутри шаблона выводится как есть.