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

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

Как вывести дату без времени в 1С

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

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

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

Ниже разобраны рабочие способы с примерами кода, условиями выбора, типичными ошибками и способами проверить результат.

Почему в 1С дата всегда содержит время

Тип «Дата» в платформе 1С хранит значение с точностью до секунды. Даже когда пользователь вводит только число, месяц и год, система дописывает время 00:00:00. Это поведение заложено в платформу и не отключается настройками.

Из-за этого возникают две разные задачи, которые часто путают. Первая — отобразить дату без времени: пользователь должен видеть «15.03.2026», а не «15.03.2026 14:32:07». Вторая — получить значение без времени для логики: сравнений, группировок, поиска документов за день.

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

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

Функция Формат() преобразует значение в строку по заданному шаблону. Исходное значение остаётся неизменным — меняется только его строковое представление. Это основной способ для сообщений пользователю, заголовков, печатных форм.

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

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

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

СтрокаДлинная = Формат(ДатаДокумента, "ДЛФ=DD");

// Результат: "15 марта 2026 г."

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

Параметр ДЛФ (локальный формат даты) принимает значения:

  • D — краткая дата: 15.03.2026;
  • DD — длинная дата: 15 марта 2026 г.;
  • DT — дата и время (значение по умолчанию);
  • DV — только время.

Для нестандартных шаблонов используется параметр ДФ — произвольная строка формата:

Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");      // 15.03.2026

Формат(ДатаДокумента, "ДФ='дд ММММ гггг'"); // 15 марта 2026

Формат(ДатаДокумента, "ДФ=yyyy-MM-dd"); // 2026-03-15 (для выгрузок)

Формат yyyy-MM-dd удобен для обмена данными: он однозначно читается внешними системами и корректно сортируется как строка.

Обрезание времени функцией НачалоДня()

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

ДатаСоВременем = ТекущаяДатаСеанса(); // 15.03.2026 14:32:07

ДатаБезВремени = НачалоДня(ДатаСоВременем); // 15.03.2026 0:00:00

// Типичное применение — сравнение дат без учёта времени

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

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

КонецЕсли;

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

Обратите внимание: НачалоДня() не превращает дату в строку и не меняет тип значения. Результат по-прежнему «Дата», просто с нулевым временем. Если такое значение вывести через Сообщить() без форматирования, время 0:00:00 всё равно отобразится — поэтому для показа пользователю комбинируйте: Формат(НачалоДня(Дата), "ДЛФ=D").

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

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

Меняет только отображение, возвращает строку. Подходит для сообщений, заголовков, печати. Не подходит для сравнений.

НачалоДня(Дата)

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

НАЧАЛОПЕРИОДА в запросе

Обрезает время на стороне СУБД. Подходит для группировок и отборов в запросах, не требует постобработки результата.

Дата без времени в запросах

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

ВЫБРАТЬ

НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ) КАК День,

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

ИЗ

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

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

НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ)

УПОРЯДОЧИТЬ ПО

День

Второй параметр задаёт границу округления: ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД. Для группировки «по дням без времени» всегда используется ДЕНЬ.

Если нужно сразу получить строковое представление в запросе, применяется ПРЕДСТАВЛЕНИЕ() — но она возвращает полное представление со временем, поэтому для чистой даты надёжнее выбрать значение через НАЧАЛОПЕРИОДА, а форматировать уже при выводе результата.

В условии ГДЕ отбор «за конкретный день» корректно писать через период, а не через равенство:

ГДЕ

Документ.Дата МЕЖДУ &НачалоДня И &КонецДня

где параметры задаются как НачалоДня(НужнаяДата) и КонецДня(НужнаяДата). Сравнение Документ.Дата = &Дата с «обрезанной» датой пропустит все документы, созданные после полуночи.

Типичные ошибки
01
Сравнение дат оператором «=» без НачалоДня: документы одного дня с разным временем считаются разными, отборы и поиски «не находят» данные.
02
Использование Формат() и сравнение строк: строки «01.02.2026» и «02.01.2026» сортируются по алфавиту, а не по хронологии.
03
Отбор в запросе Дата = &Дата вместо МЕЖДУ НачалоДня И КонецДня: выбираются только документы ровно в 00:00:00.
04
Преобразование даты в строку для хранения: теряется тип, ломаются сортировка, сравнения и работа запросов.

Дата без времени в СКД и печатных формах

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

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

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

Область.Параметры.ДатаДокумента = Формат(Шапка.Дата, "ДЛФ=D");

Для полей ввода на управляемых формах формат отображения настраивается в свойстве «Формат» элемента формы или в свойстве «Формат редактирования» реквизита в конфигураторе — тогда время не показывается и не вводится пользователем.

Порядок действий для поля формы
  1. 1
    Откройте форму в конфигураторе и выберите поле с датой.
  2. 2
    В палитре свойств найдите «Формат» (или «ФорматРедактирования»).
  3. 3
    Укажите ДЛФ=D и сохраните форму.
  4. 4
    Проверьте в режиме предприятия: поле показывает только дату, время не отображается.

Как проверить результат и избежать подводных камней

После внедрения любого из способов проверьте три вещи. Первое — тип значения: если дальше идут сравнения или запросы, значение должно оставаться типа «Дата» (проверяется ТипЗнч(Значение) = Тип("Дата")). Второе — отображение: выведите значение и убедитесь, что времени нет. Третье — граничный случай: проверьте документ с временем 23:59:59, он должен попадать в правильный день.

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

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

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

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

Тип значения после обработки
Норма

ТипЗнч возвращает «Дата», сравнения и запросы работают

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

Значение стало строкой — сортировка и сравнения ломаются

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

Видно только дату, например 15.03.2026

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

Отображается хвост 0:00:00 — забыли применить Формат

Отбор документов за день
Норма

Документ с временем 14:32 попадает в выборку

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

Выбираются только документы ровно в 00:00:00 — отбор через равенство

Группировка по дням в отчёте
Норма

Одна строка на каждый день

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

Несколько строк на один день — группировка по дате со временем

Часто задаваемые вопросы

Как вывести дату в формате «15 марта 2026 г.» без времени?

Используйте Формат(Дата, "ДЛФ=DD") — длинный локальный формат даты. Если нужен свой шаблон, подойдёт ДФ со строкой формата, например ДФ='дд ММММ гггг'. Склонение месяца и окончание «г.» зависят от региональных настроек информационной базы.

Почему НачалоДня() при выводе всё равно показывает 0:00:00?

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

Как сравнить две даты без учёта времени?

Сравнивайте НачалоДня(Дата1) = НачалоДня(Дата2). Прямое сравнение Дата1 = Дата2 учитывает время до секунды, поэтому две даты одного дня с разным временем окажутся неравны. В запросе аналог — сравнение НАЧАЛОПЕРИОДА(Поле, ДЕНЬ) с параметром.

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

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

Чем отличается ТекущаяДата() от ТекущаяДатаСеанса()?

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

Можно ли в СКД убрать время без изменения запроса?

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

Итог

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

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