Разработка и Конфигурация · 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Добавьте строковый реквизит формы, например ДеньНеделиНадпись
- 2Создайте элемент формы типа «Поле надписи» и свяжите с реквизитом
- 3В обработчике ПриИзменении поля даты вызовите процедуру обновления надписи
- 4В процедуре присвойте реквизиту Формат(Дата, "ДЛФ=DDDD") с проверкой на пустую дату
- 5Откройте форму и проверьте надпись при разных датах, включая пустую
Выбор подхода под задачу
У каждого способа есть своя область применения, и смешивать их без необходимости не стоит. Числовое значение нужно для логики, форматная строка — для отображения, запросный оператор — для выборок и группировок.
| Способ | Результат | Когда использовать | Ограничение |
|---|---|---|---|
ДеньНедели(Дата) | Число 1–7 | Проверки, вычисления, сдвиги дат | Требует преобразования для вывода словом |
Формат(Дата, "ДЛФ=DDDD") | Строка «понедельник» | Надписи, сообщения, печатные формы | Зависит от региональных настроек сеанса |
ДЕНЬНЕДЕЛИ в запросе | Число 1–7 | Фильтры и группировки в выборках | Не возвращает текстовое название |
| Соответствие вручную | Произвольная строка | Сокращения, другой язык, свой формат | Требует поддержки кода |
Как выбрать действие
Проверка результата и типичные ошибки
После внедрения проверьте поведение на граничных случаях: понедельник, воскресенье, пустая дата, дата из другого часового пояса сеанса. Убедитесь, что логика выходных срабатывает на субботу и воскресенье, а надпись не показывает день недели для незаполненной даты.
Как проверить результат
ДеньНедели возвращает 1, Формат выводит «понедельник»
Возвращается 2 или другое число — проверьте саму дату
ДеньНедели возвращает 7, проверка выходного срабатывает
Возвращается 0 — значит, логика написана под отсчёт с воскресенья
Надпись очищается или показывает заглушку
Выводится день недели для 01.01.0001 — добавьте проверку ЗначениеЗаполнено
FAQ
Как определить, является ли дата выходным днём?
Сравните результат ДеньНедели(Дата) с числами 6 и 7: если значение больше 5, день приходится на субботу или воскресенье. Учтите, что производственный календарь с переносами праздников так не проверить — для этого нужны данные регистра календарей или внешний календарь.
Почему Формат выводит название дня не на русском языке?
Форматная строка использует региональные настройки текущего сеанса. Если сеанс запущен с другой локалью, название будет на соответствующем языке. Для жёсткой фиксации языка используйте собственное соответствие чисел и строк вместо Формат.
Можно ли получить сразу «Пн, 15.01» одной строкой?
Стандартной форматной строкой сокращённое «Пн» не выводится. Комбинируйте: возьмите короткое название из своего соответствия и присоедините к нему Формат(Дата, "ДЛФ=D") для краткой даты.
Работает ли ДеньНедели с датой-временем?
Да, функция принимает любое значение типа Дата, включая дату со временем — время просто игнорируется, день недели определяется по календарной части.
Как вывести день недели в СКД без программирования?
Добавьте на закладке «Вычисляемые поля» поле с выражением ДеньНедели(Дата) — оно даст число. Для текстового представления используйте выражение Выбор Когда 1 Тогда "Пн" … Конец или задайте оформление поля.
Чем ДеньНедели отличается от НачалоНедели и КонецНедели?
ДеньНедели возвращает порядковый номер дня внутри недели, а НачалоНедели и КонецНедели — конкретные даты границ недели, в которую попадает переданная дата. Это разные задачи: номер дня против диапазона дат.
Что важно запомнить
ДеньНедели(Дата) возвращает число от 1 (понедельник) до 7 (воскресенье) и нужен для логики. Для вывода словом используйте Формат(Дата, "ДЛФ=DDDD"), в запросах — оператор ДЕНЬНЕДЕЛИ. Всегда проверяйте дату на заполненность и помните, что неделя в 1С начинается с понедельника.