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

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

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

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

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

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

Функция ДеньНедели: получаем число от 1 до 7

Функция ДеньНедели(Дата) принимает значение типа «Дата» и возвращает целое число: 1 соответствует понедельнику, 7 — воскресенью. Отсчёт идёт по стандарту ISO, то есть неделя начинается с понедельника — это важно учитывать, если вы переносите логику из систем, где первым днём считается воскресенье.

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

НомерДня = ДеньНедели(ДатаДокумента);

Если НомерДня = 6 Или НомерДня = 7 Тогда

Сообщить("Дата попадает на выходной");

КонецЕсли;

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

Вывод названия дня недели через Формат()

Для текстового представления проще всего использовать функцию Формат() с форматной строкой ДЛФ=DDDD. Она возвращает полное название дня недели с учётом региональных настроек сеанса, то есть для русской локали вы получите «понедельник», «вторник» и так далее.

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

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

Сообщить(НазваниеДня); // например: "понедельник"

Если нужна дата вместе с днём недели, комбинируйте параметры: Формат(Дата, "ДЛФ=DD") выдаст строку вида «Понедельник, 15 января 2026 г.». Обратите внимание: DDDD даёт название со строчной буквы, а полный формат DD — с прописной. Для вывода в заголовках это имеет значение.

Ручное соответствие числа и названия

Когда форматная строка не подходит — например, нужен свой регистр, сокращение «Пн», «Вт» или название на другом языке независимо от настроек сеанса — используйте соответствие:

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

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

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

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

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

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

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

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

КороткоеИмя = Названия[ДеньНедели(ДатаДокумента)];

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

День недели в запросе: оператор ДЕНЬНЕДЕЛИ

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

ВЫБРАТЬ

ДЕНЬНЕДЕЛИ(Продажи.Дата) КАК НомерДня,

СУММА(Продажи.Сумма) КАК Сумма

ИЗ

РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО

ДЕНЬНЕДЕЛИ(Продажи.Дата)

Текстовое название дня в запросе получить нельзя — запрос вернёт только число. Преобразование в слово делайте уже при выводе: в СКД через вычисляемое поле или формат, в обычном отчёте — при обходе выборки. Группировка по дню недели — типичный приём для анализа продаж по дням, нагрузки по сменам и подобных задач.

В отчётах на СКД удобно добавить вычисляемое поле с выражением ДеньНедели(Дата), а представление «Пн/Вт/...» задать через оформление или формулу Выбор Когда. Так отчёт остаётся быстрым, а настройка — визуальной, без кода.
ПЗ
Практическое замечание

Вывод дня недели на форме и в печатной форме

На управляемой форме день недели обычно выводят в декорацию-надпись. Создайте реквизит формы строкового типа, заполните его в обработчике ПриСозданииНаСервере или при изменении даты и свяжите с элементом формы.

&НаСервере

Процедура ОбновитьДеньНедели()

Если ЗначениеЗаполнено(Объект.Дата) Тогда

ДеньНеделиНадпись = Формат(Объект.Дата, "ДЛФ=DDDD");

Иначе

ДеньНеделиНадпись = "";

КонецЕсли;

КонецПроцедуры

В макете табличного документа (печатной форме) день недели выводится как обычный параметр: в модуле менеджера печати вычислите значение и передайте его в область макета через Область.Параметры.ДеньНедели = Формат(ДатаДокумента, "ДЛФ=DDDD"). Альтернатива — прямо в ячейке макета указать тип значения «Дата» и форматную строку ДЛФ=DDDD, тогда платформа отформатирует дату сама.

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

Выбор подхода под задачу

У каждого способа есть своя область применения, и смешивать их без необходимости не стоит. Числовое значение нужно для логики, форматная строка — для отображения, запросный оператор — для выборок и группировок.

СпособРезультатКогда использоватьОграничение
ДеньНедели(Дата)Число 1–7Проверки, вычисления, сдвиги датТребует преобразования для вывода словом
Формат(Дата, "ДЛФ=DDDD")Строка «понедельник»Надписи, сообщения, печатные формыЗависит от региональных настроек сеанса
ДЕНЬНЕДЕЛИ в запросеЧисло 1–7Фильтры и группировки в выборкахНе возвращает текстовое название
Соответствие вручнуюПроизвольная строкаСокращения, другой язык, свой форматТребует поддержки кода
Маршрут решения

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

Нужно проверить, выходной ли это день, или сдвинуть датуИспользуйте ДеньНедели(Дата) и сравнивайте с числами 6 и 7
Нужно показать пользователю название дня словомИспользуйте Формат(Дата, "ДЛФ=DDDD")
Нужно сгруппировать или отфильтровать данные по дням неделиПрименяйте оператор ДЕНЬНЕДЕЛИ прямо в запросе
Нужны сокращения или названия независимо от локалиЗадайте собственное соответствие чисел и строк

Проверка результата и типичные ошибки

После внедрения проверьте поведение на граничных случаях: понедельник, воскресенье, пустая дата, дата из другого часового пояса сеанса. Убедитесь, что логика выходных срабатывает на субботу и воскресенье, а надпись не показывает день недели для незаполненной даты.

Типичные ошибки
01
Ожидание, что неделя начинается с воскресенья: в 1С понедельник = 1, воскресенье = 7, и сравнение ДеньНедели = 1 как «выходной» даёт неверный результат
02
Вызов ДеньНедели для строки или незаполненного реквизита без проверки типа — ошибка времени выполнения или неожиданное значение для пустой даты
03
Сравнение строки из Формат() с литералом без учёта регистра: «понедельник» и «Понедельник» — разные строки, сравнивайте через ВРег/НРег
04
Использование текстового названия в запросе: оператор ДЕНЬНЕДЕЛИ возвращает только число, попытка сравнить его со строкой молча даст пустую выборку или ошибку
Контрольные точки

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

Понедельник
Норма

ДеньНедели возвращает 1, Формат выводит «понедельник»

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

Возвращается 2 или другое число — проверьте саму дату

Воскресенье
Норма

ДеньНедели возвращает 7, проверка выходного срабатывает

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

Возвращается 0 — значит, логика написана под отсчёт с воскресенья

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

Надпись очищается или показывает заглушку

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

Выводится день недели для 01.01.0001 — добавьте проверку ЗначениеЗаполнено

FAQ

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

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

Почему Формат выводит название дня не на русском языке?

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

Можно ли получить сразу «Пн, 15.01» одной строкой?

Стандартной форматной строкой сокращённое «Пн» не выводится. Комбинируйте: возьмите короткое название из своего соответствия и присоедините к нему Формат(Дата, "ДЛФ=D") для краткой даты.

Работает ли ДеньНедели с датой-временем?

Да, функция принимает любое значение типа Дата, включая дату со временем — время просто игнорируется, день недели определяется по календарной части.

Как вывести день недели в СКД без программирования?

Добавьте на закладке «Вычисляемые поля» поле с выражением ДеньНедели(Дата) — оно даст число. Для текстового представления используйте выражение Выбор Когда 1 Тогда "Пн" … Конец или задайте оформление поля.

Чем ДеньНедели отличается от НачалоНедели и КонецНедели?

ДеньНедели возвращает порядковый номер дня внутри недели, а НачалоНедели и КонецНедели — конкретные даты границ недели, в которую попадает переданная дата. Это разные задачи: номер дня против диапазона дат.

Итог

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

ДеньНедели(Дата) возвращает число от 1 (понедельник) до 7 (воскресенье) и нужен для логики. Для вывода словом используйте Формат(Дата, "ДЛФ=DDDD"), в запросах — оператор ДЕНЬНЕДЕЛИ. Всегда проверяйте дату на заполненность и помните, что неделя в 1С начинается с понедельника.