Разработка и Конфигурация · 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, "Воскресенье");
Возврат ДниНедели[ДеньНедели(Дата)];
КонецФункции
Такую функцию разумно разместить в общем модуле, например «РаботаСДатами», чтобы вызывать из любого места конфигурации. Если модуль серверный, а вызов идет с клиента, установите признаки «Сервер» и «Вызов сервера».
Для производительности в массовых операциях (обход тысяч строк табличной части) создавайте Соответствие один раз и передавайте его параметром, а не формируйте на каждой итерации. Впрочем, для типовых задач печати и отчетов разница в скорости незаметна.
ДниНедели = Новый Соответствие;
ДниНедели.Вставить(1, "Понедельник");
// ... остальные дни
НазваниеДня = ДниНедели[ДеньНедели(ДатаДокумента)];День недели словом в запросе и СКД
В языке запросов есть функция ДЕНЬНЕДЕЛИ(Дата), которая так же возвращает число 1–7. Чтобы получить слово прямо в запросе, используйте конструкцию ВЫБОР:
ВЫБОР
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 1 ТОГДА "Понедельник"
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 2 ТОГДА "Вторник"
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 3 ТОГДА "Среда"
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 4 ТОГДА "Четверг"
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 5 ТОГДА "Пятница"
КОГДА ДЕНЬНЕДЕЛИ(Продажи.Период) = 6 ТОГДА "Суббота"
ИНАЧЕ "Воскресенье"
КОНЕЦ КАК ДеньНедели
В СКД есть альтернатива без изменения запроса: добавьте вычисляемое поле с выражением Формат(Период, "ДФ=dddd") на вкладке «Вычисляемые поля». Это удобно, когда запрос нельзя трогать или когда название нужно только для отображения, а не для группировки.
Если по дню недели нужно группировать данные (например, продажи по дням недели для анализа загрузки магазина), предпочтительнее вариант с ВЫБОР в запросе: группировка по строковому полю работает корректно, а порядок сортировки можно задать через дополнительное числовое поле ДЕНЬНЕДЕЛИ().
Сравнение вариантов
Самый быстрый для разовых выводов и печатных форм. Ограничение: зависит от локали сеанса, регистр и склонение фиксированы.
Полный контроль над написанием, независимость от локали. Требует отдельной функции в общем модуле.
Единственный способ получить слово на уровне СУБД для группировок и отчетов. Громоздкий текст запроса.
Подходит для отчетов без правки запроса. Не работает вне СКД и не годится для группировок с произвольным порядком.
Вывод в печатных формах и на формах объектов
В макетах печатных форм (табличный документ) название дня обычно подставляется в параметр области. Заполнение выполняется в коде формирования печатной формы:
ОбластьШапка.Параметры.ДатаСтрокой =
Формат(ДатаДокумента, "ДФ='dddd, d MMMM yyyy г.; Л=ru_RU'");
Для надписи на управляемой форме добавьте реквизит формы строкового типа и заполняйте его в обработчике ПриСозданииНаСервере или ПриЧтенииНаСервере. Обновлять значение на клиенте без вызова сервера можно через ту же функцию Формат() — она доступна и в клиентском контексте.
При выводе в заголовок документа или в представление ссылки учитывайте, что представление формируется в модуле менеджера объекта (обработчик ОбработкаПолученияПолейПредставления / ОбработкаПолученияПредставления). Вставлять туда длинные строки с днем недели стоит только при реальной потребности — это замедляет формирование списков.
- 1Откройте модуль менеджера документа и найдите процедуру формирования печатной формы
- 2Добавьте параметр в область макета, например {ДеньНедели}
- 3В коде заполните его: Область.Параметры.ДеньНедели = Формат(ДатаДокумента, "ДФ=dddd; Л=ru_RU")
- 4Сохраните конфигурацию и сформируйте печатную форму тестового документа
- 5Проверьте документ с датой на выходной и на понедельник — убедитесь, что название корректно
Типичные ошибки и как их проверить
Первая распространенная ошибка — использование ДеньНедели() в надежде получить строку и последующий вывод числа пользователю. Вторая — забытый параметр локали, из-за чего на сервере с английскими настройками в русскую печатную форму попадает «Monday». Третья — обработка пустой даты: как отмечалось, '00010101' дает «понедельник», что искажает отчеты по незаполненным документам.
Еще одна ловушка — путаница между ДФ и ДЛФ. Формат ДЛФ=D выводит длинную дату целиком («12 января 2026 г.»), но без дня недели. День недели доступен только через ДФ с шаблоном dddd.
Как проверить результат
Выводится «понедельник» / «Понедельник»
Число 1 или название другого дня
Пустая строка или прочерк
«Понедельник» при незаполненной дате
Название на русском языке
«Friday» — не задана локаль в форматной строке
Пн, Вт, Ср… по порядку
Алфавитный порядок строк
Какой способ выбрать
Для разовой надписи, печатной формы или представления в списке берите Формат(Дата, "ДФ=dddd; Л=ru_RU") — это одна строка кода без дополнительных функций. Для нестандартного написания (сокращения, склонения, другой регистр) создайте функцию с Соответствием в общем модуле. Для отчетов на СКД с группировкой по дням недели используйте ВЫБОР в запросе плюс числовое поле для сортировки.
Как выбрать действие
Что важно запомнить
ДеньНедели() возвращает число 1–7, а слово получают через Формат() с шаблоном ДФ=dddd, через Соответствие или через ВЫБОР в запросе. Всегда фиксируйте локаль Л=ru_RU для печатных форм, проверяйте дату на заполненность и сортируйте по числовому номеру дня, а не по названию.
Частые вопросы
Как вывести сокращенное название дня недели — «пн», «вт»?
Используйте форматную строку с тремя буквами: Формат(Дата, "ДФ=ddd"). Результат — сокращение по правилам текущей локали. Если нужны собственные сокращения (например, «Пн.» с точкой), сформируйте их через Соответствие.
Почему вместо «пятница» выводится «Friday»?
Форматная строка ДФ=dddd берет язык из региональных настроек сеанса. На сервере или в сеансе с английской локалью название будет английским. Добавьте параметр локали: Формат(Дата, "ДФ=dddd; Л=ru_RU").
Как получить день недели словом в запросе без конструкции ВЫБОР?
В языке запросов нет функции форматирования даты в строку, поэтому ВЫБОР с ДЕНЬНЕДЕЛИ() — единственный способ на уровне запроса. Альтернатива — вычисляемое поле СКД с Формат() или постобработка результата запроса в коде.
Как сделать название дня с заглавной буквы?
Формат() возвращает название в нижнем регистре. Приведите первую букву к верхнему регистру: НазваниеДня = ВРег(Лев(Строка,1)) + Сред(Строка,2). Либо задайте названия с заглавной буквы в Соответствии.
Почему для пустой даты выводится «понедельник»?
Пустая дата '00010101' приходится на понедельник, и ДеньНедели() для нее возвращает 1. Перед выводом проверяйте дату: Если ЗначениеЗаполнено(Дата) Тогда … Иначе выводить пустую строку.
Можно ли вывести день недели вместе с датой одной строкой?
Да, комбинируйте шаблоны в одной форматной строке: Формат(Дата, "ДФ='dddd, d MMMM yyyy г.; Л=ru_RU'") даст «пятница, 12 января 2026 г.». Текст в одинарных кавычках внутри шаблона выводится как есть.