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

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

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

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

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

Чаще всего проблема возникает при сравнении дат: условие ДатаДокумента = '20260115' не срабатывает, потому что у документа время, например, 14:32:07, а у литерала — 00:00:00. Ниже разобраны рабочие приёмы для встроенного языка, языка запросов и пользовательских настроек, а также типичные ошибки, из-за которых отборы «теряют» документы.

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

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

Из этого следуют два практических вывода. Первый: «сделать дату без времени» означает привести время к полуночи, а не удалить его. Второй: любые сравнения дат на равенство небезопасны, если время сторон различается. Именно поэтому опытные разработчики всегда нормализуют даты через НачалоДня() перед сравнением или используют интервальные условия.

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

Обнуление времени через НачалоДня во встроенном языке

Основной способ получить дату без времени в коде — функция НачалоДня(). Она принимает значение типа «Дата» и возвращает начало соответствующего календарного дня, то есть время 00:00:00.

bsl
ДатаДокумента = ТекущаяДатаСеанса();
ДатаБезВремени = НачалоДня(ДатаДокумента);
// Результат, например: 15.01.2026 0:00:00

// Типовое сравнение без учёта времени:
Если НачалоДня(Док.Дата) = НачалоДня(ТекущаяДатаСеанса()) Тогда
	// документ сегодняшний
КонецЕсли;

Для обратной границы интервала используйте КонецДня() — она возвращает 23:59:59. Пара «НачалоДня/КонецДня» — стандартный способ построить условие «за один день» без риска потерять документы, проведённые в последнюю секунду.

Учтите: НачалоДня() возвращает новое значение и не меняет исходную переменную. Результат нужно присвоить. Также функция работает только со значением типа «Дата»; если передать строку, возникнет ошибка преобразования.

Порядок действий в коде
  1. 1
    Получите исходное значение даты (реквизит, параметр, ТекущаяДатаСеанса)
  2. 2
    Примените НачалоДня(Дата) и сохраните результат в переменную
  3. 3
    Для верхней границы периода используйте КонецДня(Дата)
  4. 4
    Проверьте результат выводом через Сообщить() или в отладчике
  5. 5
    Убедитесь, что сравнение дат идёт между нормализованными значениями

Вывод даты без времени через форматирование

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

bsl
СтрокаДаты = Формат(ТекущаяДатаСеанса(), "ДЛФ=D");   // "15.01.2026"
СтрокаДаты = Формат(ТекущаяДатаСеанса(), "ДЛФ=DD");  // "15 января 2026 г."
СтрокаДаты = Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy"); // явный шаблон

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

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

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

В языке запросов есть собственные средства работы с периодами. Чтобы сравнить дату документа с конкретным днём без учёта времени, используйте функцию НАЧАЛОПЕРИОДА или интервальное условие МЕЖДУ.

bsl
// Вариант 1: приведение к началу дня
ВЫБРАТЬ Реализация.Ссылка
ИЗ Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ НАЧАЛОПЕРИОДА(Реализация.Дата, ДЕНЬ) = &Дата

// Вариант 2: интервал за день (обычно предпочтительнее)
ГДЕ Реализация.Дата МЕЖДУ &НачалоДня И &КонецДня

Интервальный вариант предпочтительнее с точки зрения производительности: условие МЕЖДУ позволяет СУБД использовать индекс по полю «Дата», а оборачивание поля в функцию НАЧАЛОПЕРИОДА обычно отключает индексный поиск. На больших таблицах разница заметна.

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

Способы получить дату без времени

НачалоДня() в коде

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

Формат() с ДЛФ/ДФ

Только для отображения и строк. Не подходит для сравнений и отборов

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

Простое условие по дню, но может отключать индекс на больших таблицах

МЕЖДУ НачалоДня И КонецДня

Оптимально для запросов: сохраняет индексный поиск. Требует двух параметров

Состав даты = «Дата» в метаданных

Платформа сама обнуляет время при записи. Менять состав даты у существующего реквизита следует осторожно — это реструктуризация данных

Настройка состава даты у реквизитов и документов

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

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

В пользовательском режиме время у полей даты скрывается настройкой формы: для элемента формы можно задать формат редактирования без времени. Это влияет только на ввод и отображение — хранимое значение по-прежнему содержит время.

Типичные ошибки и как их проверить

Самая частая ошибка — сравнение дат на равенство без нормализации. Условие Док.Дата = '20260115' пропустит все документы, проведённые после полуночи. Второе место занимает построение верхней границы периода как НачалоДня(ДатаОкончания) — при этом теряется весь последний день периода, кроме полуночи.

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

Проверить результат просто: выведите значение через Сообщить(ДатаБезВремени) — платформа покажет дату в полном формате, и вы увидите время 0:00:00. В отладчике значение типа «Дата» также отображается со временем, что позволяет сразу заметить ненормализованные значения.

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

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

Вывод значения после НачалоДня
Норма

Время равно 0:00:00

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

Время отлично от полуночи — функция не применена или результат не присвоен

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

В выборку попадают документы с любым временем дня

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

Попадают только документы ровно в 00:00:00 — сравнение на равенство без нормализации

Запрос на большой таблице
Норма

Время выполнения стабильное, план запроса использует индекс

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

Запрос замедлился после добавления НАЧАЛОПЕРИОДА на поле

FAQ

Можно ли полностью удалить время из типа «Дата»?

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

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

НачалоДня возвращает 00:00:00 указанной даты, КонецДня — 23:59:59. Для отбора документов за один день используйте пару: от НачалоДня(Дата) до КонецДня(Дата), тогда в выборку попадут все документы дня независимо от времени.

Почему отбор по дате не находит документы?

Скорее всего, сравнение идёт на точное равенство с датой-литералом, у которой время 00:00:00, а у документов время ненулевое. Замените условие на МЕЖДУ НачалоДня И КонецДня или сравнивайте НачалоДня(ДатаДокумента) с нужным днём.

Как вывести дату без времени в печатной форме?

Используйте Формат(Дата, "ДЛФ=D") для короткого формата или Формат(Дата, "ДФ=dd.MM.yyyy") для фиксированного шаблона. Второй вариант надёжнее, если форма должна выглядеть одинаково у всех пользователей независимо от региональных настроек.

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

Изменение вызывает реструктуризацию таблиц и может обнулить время в существующих записях. Делайте это только после резервного копирования и проверки на копии базы, а для документов такое изменение лучше не применять вовсе — оно может нарушить проведение и последовательности.

Что быстрее в запросе: НАЧАЛОПЕРИОДА или МЕЖДУ?

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

Итог

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

Дата в 1С всегда содержит время. Для логики используйте НачалоДня/КонецДня, для вывода — Формат с ДЛФ или ДФ, в запросах — МЕЖДУ с границами дня. Состав даты у реквизитов меняйте только после резервной копии, а у документов — не меняйте вовсе.