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