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

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

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

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

В 1С тип «Дата» всегда содержит и дату, и время с точностью до секунды. Даже если реквизит называется «Дата документа» и пользователь видит только число, внутри хранится значение вида 15.03.2026 10:23:47. Когда нужно вывести только дату — в отчёте, на печатной форме, в сообщении пользователю или при выгрузке данных — приходится явно отсекать время.

Универсального переключателя «не показывать время» в платформе нет, поэтому задача решается несколькими способами: функцией Формат с форматной строкой, функцией НачалоДня, конструкциями языка запросов и настройками полей в СКД. Выбор зависит от того, где именно выводится значение — в коде, в запросе, в отчёте или в макете печатной формы.

Ниже разобраны все рабочие варианты с примерами кода, ограничениями каждого подхода и типичными ошибками, из-за которых время «возвращается» в вывод или сравнение дат работает неправильно.

Как устроен тип «Дата» в 1С и почему время появляется само

Тип «Дата» в платформе 1С — это единое значение, включающее календарную дату и время с точностью до секунды. Разделить их на уровне типа данных нельзя: нет отдельных типов «только дата» и «только время». Пустая дата выглядит как 01.01.0001 00:00:00.

Когда вы пишете реквизит объекта с типом «Дата», в конфигураторе есть свойство «Состав даты»: «Дата», «Время» или «Дата и время». Если выбрано «Дата», время в реквизите автоматически обнуляется при записи — это единственный случай, когда платформа сама гарантирует отсутствие времени. Во всех остальных ситуациях (переменные, параметры, результаты функций) время присутствует всегда.

Именно поэтому при выводе значения через Сообщить(), в строку табличного документа или в элемент формы время появляется, даже если вы его не задавали: функция ТекущаяДата() возвращает текущий момент с секундами, а дата документа хранит время проведения.

Способ 1. Функция Формат — вывод даты в коде

Основной инструмент для вывода только даты — функция Формат с параметром ДЛФ (локальный формат даты). Значение «D» означает вывод даты в кратком формате без времени:

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

СтрокаДляВывода = Формат(ДатаДокумента, "ДЛФ=D");

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

Сообщить("Документ от " + Формат(ДатаДокумента, "ДЛФ=D"));

Помимо «ДЛФ=D» доступны и другие варианты: «ДЛФ=DD» — длинный формат даты («15 марта 2026 г.»), «ДЛФ=T» — только время, «ДФ=dd.MM.yyyy» — произвольный шаблон с явным указанием масок. Произвольный формат удобен, когда нужен нестандартный порядок, например «yyyy-MM-dd» для выгрузки в файлы обмена.

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

bsl
// Только дата в разных форматах
Формат(ТекущаяДата(), "ДЛФ=D");        // 15.03.2026
Формат(ТекущаяДата(), "ДЛФ=DD");       // 15 марта 2026 г.
Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"); // 2026-03-15
Формат(ТекущаяДата(), "ДЛФ=T");        // 10:23:47 (только время)

Способ 2. НачалоДня — отсечение времени для сравнений

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

ДатаБезВремени = НачалоДня(ТекущаяДата());

// Значение: 15.03.2026 00:00:00

Если НачалоДня(Документ.Дата) = НачалоДня(ТекущаяДата()) Тогда

Сообщить("Документ создан сегодня");

КонецЕсли;

Прямое сравнение дат без НачалоДня — частый источник ошибок: дата документа 15.03.2026 14:30:00 никогда не будет равна ТекущаяДата() до секунды, и условие «документ сегодняшний» сработает только при совпадении с точностью до секунды. Правильный приём — либо сравнивать результаты НачалоДня, либо проверять вхождение в интервал от НачалоДня до КонецДня.

Аналогичные функции: КонецДня (23:59:59), НачалоМесяца, НачалоКвартала, НачалоГода, НачалоНедели — они полезны при построении периодов отбора.

Способ 3. Только дата в запросе — НАЧАЛОПЕРИОДА и формат в выборке

В языке запросов нет функции Формат, поэтому для отсечения времени используется конструкция НАЧАЛОПЕРИОДА с указанием периода ДЕНЬ:

ВЫБРАТЬ

НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) КАК ДеньОтгрузки,

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

ИЗ

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

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

НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ)

Такой запрос группирует документы по дням, даже если они проведены в разное время суток. Без НАЧАЛОПЕРИОДА группировка по полю Дата дала бы отдельную строку на каждую секунду, и итоги по дню не посчитались бы.

Если задача — только отобразить дату без времени в результате запроса, который выводится в табличный документ или консоль, то отсекать время в самом запросе не обязательно: достаточно применить Формат при обходе выборки. Но для группировок и соединений по дате НАЧАЛОПЕРИОДА обязательна.

Способ 4. Только дата в отчётах на СКД

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

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

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

Порядок действий в СКД
  1. 1
    Откройте схему компоновки данных отчёта
  2. 2
    Перейдите на вкладку «Настройки» и найдите нужное поле даты
  3. 3
    В оформлении поля задайте формат ДЛФ=D
  4. 4
    Сохраните схему и сформируйте отчёт
  5. 5
    Проверьте, что время в колонке не выводится, а итоги не изменились

Способ 5. Дата без времени в макетах и печатных формах

В табличном документе и макете печатной формы формат задаётся двумя путями. Первый — в коде при заполнении параметров: Область.Параметры.ДатаДокумента = Формат(Шапка.Дата, "ДЛФ=D"). В этом случае в макет передаётся уже готовая строка.

Второй путь — задать формат в свойствах самой ячейки макета: откройте свойства параметра ячейки, найдите свойство «Формат» и укажите ДЛФ=D. Тогда в параметр можно передавать исходную дату, а платформа сама отформатирует её при выводе. Это предпочтительнее, если одна и та же область используется с разными данными.

Тот же принцип работает для полей формы: у элемента «Поле надписи» или «Поле ввода» есть свойство «Формат», где достаточно указать ДЛФ=D, чтобы реквизит с типом «Дата и время» отображался только как дата.

Выбор способа и контроль результата

Каждый способ решает свою задачу, и смешивать их без необходимости не стоит. Формат — для вывода строки человеку, НачалоДня — для логики сравнений, НАЧАЛОПЕРИОДА — для группировок в запросах, оформление поля — для отчётов и форм.

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

Формат(..., "ДЛФ=D")

Для вывода строки пользователю, в файл, в сообщение. Возвращает строку — не подходит для сравнений и параметров запроса

НачалоДня()

Для сравнений дат и передачи параметром в запрос. Сохраняет тип «Дата», время обнуляется

НАЧАЛОПЕРИОДА(..., ДЕНЬ)

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

Формат в оформлении поля

Для отчётов СКД, форм и макетов без изменения кода. Влияет только на отображение

После внесения изменений проверьте результат на реальных данных: сформируйте отчёт или печатную форму по документам, проведённым в разное время суток. Убедитесь, что документы одного дня попали в одну группу, сравнения «сегодня/вчера» работают, а в выгружаемых файлах дата имеет ожидаемый вид.

Контрольные точки

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

Отображение в отчёте
Норма

В колонке видна только дата без 00:00:00

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

Время по-прежнему выводится — формат задан не для того поля

Группировка по дням
Норма

Документы одного дня объединены в одну строку

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

На каждый документ отдельная строка — нет НАЧАЛОПЕРИОДА

Сравнение дат в коде
Норма

Условие «документ сегодня» срабатывает для любого времени

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

Условие не срабатывает — даты сравниваются с точностью до секунды

Типичные ошибки и ограничения

Самая распространённая ошибка — попытка сравнить результат функции Формат с датой. Формат возвращает строку, и выражение вида Формат(Дата, "ДЛФ=D") = "15.03.2026" может не сработать из-за региональных настроек: на другом сервере разделитель или порядок частей даты может отличаться. Для сравнений всегда используйте НачалоДня.

Вторая ошибка — применение НАЧАЛОПЕРИОДА к полю, по которому потом выполняется соединение таблиц. После отсечения времени значения перестают совпадать с исходными датами документов, и соединение возвращает пустой результат. Соединяйте по исходному полю, а НАЧАЛОПЕРИОДА применяйте только к выводимому или группировочному полю.

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

Типичные ошибки
01
Сравнение строки из Формат с датой — условие работает нестабильно и зависит от региональных настроек
02
Соединение таблиц по полю после НАЧАЛОПЕРИОДА — соединение возвращает пустой результат
03
Использование ТекущаяДата() вместо ТекущаяДатаСеанса() — «сегодня» определяется по серверу, а не по пользователю
04
Форматирование даты строкой в макете вместо свойства Формат ячейки — при смене формата приходится править код

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

Как вывести дату в формате ГГГГ-ММ-ДД для выгрузки в файл?

Используйте произвольную форматную строку: Формат(Дата, "ДФ=yyyy-MM-dd"). Маски: yyyy — год четырьмя цифрами, MM — месяц, dd — день. Такой формат не зависит от региональных настроек и подходит для файлов обмена.

Почему Формат(Дата, "ДЛФ=D") выводит пустую строку?

Так происходит, если дата пустая (01.01.0001). Платформа по умолчанию выводит пустую дату как пустую строку. Если нужно явное отображение, проверяйте значение функцией ЗначениеЗаполнено перед форматированием.

Можно ли хранить в реквизите только дату без времени?

Да. В свойствах реквизита установите «Состав даты» = «Дата». Платформа будет автоматически обнулять время при записи, и дополнительная обработка в коде не потребуется.

Как получить только время без даты?

Функцией Формат с параметром ДЛФ=T: Формат(ТекущаяДата(), "ДЛФ=T") вернёт строку вида «10:23:47». Отдельного типа «время» в платформе нет, поэтому результат — строка.

Чем НачалоДня отличается от НАЧАЛОПЕРИОДА?

НачалоДня — функция встроенного языка, работает в коде. НАЧАЛОПЕРИОДА — конструкция языка запросов, применяется внутри текста запроса. Обе возвращают дату с нулевым временем, но используются в разных контекстах.

Как вывести дату прописью, например «15 марта 2026 г.»?

Используйте длинный формат: Формат(Дата, "ДЛФ=DD"). Результат зависит от языка региональных настроек информационной базы, поэтому на англоязычной инфобазе текст будет на английском.

Итог

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

Для вывода даты строкой используйте Формат с ДЛФ=D, для сравнений — НачалоДня, для группировок в запросах — НАЧАЛОПЕРИОДА(Поле, ДЕНЬ), а в отчётах и макетах задавайте формат в оформлении поля. Не сравнивайте отформатированные строки с датами и не соединяйте таблицы по полям после отсечения времени.