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

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

Как вывести название дня недели в 1С

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

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

Основных подхода два: функция Формат() с форматной строкой и функция ДеньНедели(), возвращающая число от 1 до 7, которое затем преобразуют в текст. Первый способ короче и учитывает язык локализации, второй даёт полный контроль над написанием и регистром.

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

Способ 1: функция Формат с форматной строкой

Функция Формат() преобразует значение в строку по заданному шаблону. Для дат шаблон задаётся параметром ДФ (для русского языка) — внутри него элемент dddd означает полное название дня недели, а ddd — сокращённое («Пн», «Вт»).

ДатаДокумента = Дата(2026, 3, 15);

ПолноеНазвание = Формат(ДатаДокумента, "ДФ=dddd");

// Результат: "пятница"

КраткоеНазвание = Формат(ДатаДокумента, "ДФ=ddd");

// Результат: "Пт"

СоставнаяСтрока = Формат(ДатаДокумента, "ДФ='dddd, d MMMM yyyy'");

// Результат: "пятница, 15 марта 2026"

Обратите внимание: полное название выводится в нижнем регистре — таково стандартное поведение форматирования. Если день недели стоит в начале предложения или используется как заголовок, первую букву придётся поднять вручную:

Название = Формат(ДатаДокумента, "ДФ=dddd");

НазваниеСЗаглавной = ВРег(Лев(Название, 1)) + Сред(Название, 2);

// Результат: "Пятница"

bsl
НазваниеДня = Формат(НужнаяДата, "ДФ=dddd"); // "понедельник"
Краткое = Формат(НужнаяДата, "ДФ=ddd");       // "Пн"

Способ 2: функция ДеньНедели и собственное соответствие

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

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

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

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

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

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

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

Названия.Вставить(5, "Пятница");

Названия.Вставить(6, "Суббота");

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

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

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

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

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

Учёт языка и локали

Функция Формат() по умолчанию использует язык, заданный в региональных настройках информационной базы или сеанса. Если база обслуживает пользователей с разными языками, поведение можно контролировать явно через параметр Л (код языка):

Формат(ДатаДокумента, "ДФ=dddd;Л=ru_RU"); // "пятница"

Формат(ДатаДокумента, "ДФ=dddd;Л=en_US"); // "Friday"

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

Вывод дня недели в запросах и СКД

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

ВЫБРАТЬ

Реализация.Дата КАК Дата,

ВЫБОР

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 1 ТОГДА "Понедельник"

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 2 ТОГДА "Вторник"

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 3 ТОГДА "Среда"

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 4 ТОГДА "Четверг"

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 5 ТОГДА "Пятница"

КОГДА ДЕНЬНЕДЕЛИ(Реализация.Дата) = 6 ТОГДА "Суббота"

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

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

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

В СКД альтернатива — вычисляемое поле с выражением Формат(Дата, "ДФ=dddd") на языке встроенных выражений. Это короче, но снова привязывает результат к локали сервера, на котором выполняется отчёт.

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

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

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

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

Формат(Шапка.Дата, "ДФ='dddd, d MMMM yyyy ''г.'''");

На управляемой форме для надписи достаточно реквизита строкового типа, который заполняется в обработчике ПриИзменении поля даты. Не вычисляйте название в ПриОткрытии без привязки к изменению даты — иначе при редактировании даты надпись останется старой.

Порядок действий для надписи на форме
  1. 1
    Добавьте строковый реквизит формы, например НазваниеДняНедели
  2. 2
    В обработчике ПриИзменении поля даты вызовите Формат(Дата, "ДФ=dddd") и запишите результат в реквизит
  3. 3
    Поднимите первую букву, если надпись стоит в начале строки
  4. 4
    Откройте форму, меняйте дату и проверьте, что надпись обновляется
  5. 5
    Проверьте даты, попадающие на субботу и воскресенье, — там чаще всего видны ошибки смещения

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

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

Ещё одна ловушка — пустая или незаполненная дата. Формат('00010101', "ДФ=dddd") вернёт день недели для пустой даты, что в печатной форме выглядит как мусор. Перед форматированием проверяйте заполненность:

Если ЗначениеЗаполнено(ДатаДокумента) Тогда

Название = Формат(ДатаДокумента, "ДФ=dddd");

Иначе

Название = "";

КонецЕсли;

Типичные ошибки
01
Ожидание строки от ДеньНедели() — функция возвращает число 1–7, название нужно получать отдельно
02
Смещение соответствия на один день из-за отсчёта с воскресенья — в 1С понедельник равен 1
03
Форматирование пустой даты без проверки — в печатную форму попадает день недели для 01.01.0001
04
Игнорирование регистра — Формат с dddd возвращает название в нижнем регистре, заглавную букву нужно добавлять вручную
05
Отсутствие параметра Л при мультиязычной базе — название выводится не на том языке
Контрольные точки

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

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

Название совпадает с календарём (например, проверьте дату, которая точно была понедельником)

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

Смещение на один день — ошибка в соответствии чисел

Пустая дата
Норма

Выводится пустая строка или осмысленная заглушка

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

В форму попадает день недели для 01.01.0001

Выходные дни
Норма

Суббота и воскресенье определяются корректно

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

Выходные сдвинуты — перепутан порядок в ВЫБОР или соответствии

Язык вывода
Норма

Название на языке, ожидаемом пользователем

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

Название на языке сервера — добавьте параметр Л

Сравнение подходов

Выбор зависит от контекста: для разовой подстановки проще Формат(), для прикладной логики с особыми требованиями к написанию — собственное соответствие, для отчётов — конструкция ВЫБОР в запросе.

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

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

Самый короткий код, учитывает язык. Ограничения: нижний регистр, зависимость от локали

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

Полный контроль над написанием и регистром, независимость от локали. Минус — больше кода

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

Единственный чистый способ получить название непосредственно в запросе и отчёте СКД без вычисляемых полей

Вычисляемое поле СКД с Формат()

Удобно для отчётов без изменения запроса, но результат зависит от локали сервера

Итог

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

Для названия дня недели используйте Формат(Дата, "ДФ=dddd"), для числа — ДеньНедели(Дата) с отсчётом от понедельника. Проверяйте заполненность даты, регистр первой буквы и язык локализации, а в запросах применяйте конструкцию ВЫБОР.

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

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

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

Почему Формат выводит название с маленькой буквы?

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

Как определить, является ли день выходным?

Проверьте, что ДеньНедели(Дата) больше 5: значения 6 и 7 — суббота и воскресенье. Учтите, что это только календарные выходные; производственный календарь с переносами и праздниками так не определить — для этого в типовых конфигурациях используется регистр «Данные производственного календаря».

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

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

Название выводится на английском, хотя база русская. Что делать?

Проверьте региональные установки информационной базы и язык сеанса. Надёжное решение — явно указать код языка в форматной строке: Формат(Дата, "ДФ=dddd;Л=ru_RU"). Тогда результат не будет зависеть от настроек сервера и клиента.

Как вывести дату вида «Пятница, 15 марта» в печатной форме?

Сформируйте строку составной форматной строкой: Формат(Дата, "ДФ='dddd, d MMMM yyyy'"), при необходимости поднимите первую букву и передайте результат в параметр макета. Текст внутри одинарных кавычек в форматной строке выводится как есть, поэтому литералы вроде «г.» добавляйте через них.