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

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

Как убрать время в дате в 1С 8

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

В 1С 8 тип «Дата» по умолчанию хранит и дату, и время с точностью до секунды. Это удобно для документов, но мешает, когда нужно сравнивать даты, группировать данные по дням или выводить значение без часов и минут. В результате разработчики и пользователи регулярно сталкиваются с задачей «обрезать» время.

Универсального решения нет: способ зависит от того, где именно нужно убрать время — в коде, в запросе, в реквизите объекта или только при выводе на экран. Важно понимать разницу между изменением самого значения и изменением его представления: в первом случае данные меняются, во втором — только отображение.

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

Как убрать время в коде с помощью НачалоДня

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

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

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

Такой подход нужен, когда даты сравниваются: без приведения к началу дня сравнение «15.03.2026 14:32» и «15.03.2026 09:10» даст «не равно», хотя календарный день один. Это частая причина «пропавших» документов в отборах за день.

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

bsl
ДатаБезВремени = НачалоДня(ТекущаяДата());
Сообщить(ДатаБезВремени); // 15.03.2026 00:00:00

Как скрыть время только при выводе через Формат

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

СтрокаДаты = Формат(ТекущаяДата(); "ДЛФ=D"); // "15.03.2026"

СтрокаДаты = Формат(ТекущаяДата(); "ДФ=dd.MM.yyyy"); // "15.03.2026"

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

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

Как убрать время в запросе 1С

В языке запросов для приведения даты к началу дня используется функция НАЧАЛОПЕРИОДА с указанием периода «ДЕНЬ». Она работает аналогично НачалоДня в коде.

ВЫБРАТЬ

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

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

ИЗ

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

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

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

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

Для отбора по конкретному дню в запросе передавайте два параметра — начало и конец дня — и используйте условие МЕЖДУ. Сравнение «Период = &Дата» сработает только для записей ровно в 00:00:00.

Отбор документов за один день
  1. 1
    Вычислите ДатаНачала = НачалоДня(НужнаяДата)
  2. 2
    Вычислите ДатаКонца = КонецДня(НужнаяДата)
  3. 3
    Передайте оба значения в запрос как параметры
  4. 4
    В условии запроса используйте: Период МЕЖДУ &ДатаНачала И &ДатаКонца
  5. 5
    Проверьте, что в выборку попали документы за весь день, включая вечерние

Как настроить реквизит, чтобы время не хранилось вовсе

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

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

Уже введённые значения со временем при смене состава даты не перезаписываются автоматически корректно во всех сценариях — существующие данные стоит проверить и при необходимости обработать: пройтись по записям и присвоить НачалоДня(Значение).

Сравнение способов: что выбрать в вашей ситуации

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

СпособЧто делаетКогда применятьОграничение
НачалоДня()Меняет значение даты на 00:00:00Сравнения, отборы, расчёты в кодеТолько в коде, не в запросе
Формат()Формирует строку без времениВывод на экран, печать, сообщенияРезультат — строка, не дата
НАЧАЛОПЕРИОДАПриводит дату к началу дня в запросеГруппировки и отборы в запросахТолько внутри запроса
Состав даты реквизитаУбирает время на уровне храненияРеквизиты, где время не нужно по смыслуТребует изменения конфигурации
Маршрут решения

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

Нужно сравнить две даты по календарному дню в кодеСравнивайте НачалоДня(Дата1) = НачалоДня(Дата2)
Время мешает только в отчёте или на формеЗадайте форматную строку ДЛФ=D у поля или используйте Формат()
Отчёт группируется по каждой секунде вместо днейПримените НАЧАЛОПЕРИОДА(Период, ДЕНЬ) в запросе
Время в реквизите не нужно никогдаУстановите состав даты реквизита в значение «Дата» в конфигураторе

Типичные ошибки при работе с датой и временем

Самая распространённая ошибка — сравнение дат оператором «=» без предварительного приведения. Документ, проведённый в 14:30, никогда не будет равен дате отбора 00:00:00, и отчёт молча теряет данные.

Вторая ошибка — использование Формат() для последующей логики. Строка «15.03.2026» сортируется как текст, поэтому «02.03.2026» окажется «больше» по алфавиту при другой маске, а сравнение с типом «Дата» даст ложь или ошибку.

Третья группа проблем — границы периода. Отбор «с даты по дату», где конец задан как НачалоДня, отсекает все документы последнего дня после полуночи. Правильный конец периода — КонецДня или начало следующего дня с условием «меньше».

Типичные ошибки
01
Сравнение дат без НачалоДня — документы за день не попадают в отбор
02
Использование результата Формат() как даты — ошибки типов и неверная сортировка
03
Конец периода = НачалоДня(ДатаОкончания) — теряются документы последнего дня
04
Смена состава даты реквизита без резервной копии — безвозвратная потеря данных о времени
05
Ожидание, что НачалоДня изменит исходную переменную — функция возвращает новое значение, его нужно присвоить

Как проверить, что время убрано корректно

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

Для отборов проверяйте граничные случаи: документ в 00:00:01 и документ в 23:59:59 одного дня должны попадать в одну группу или один отбор. Для реквизита с составом «Дата» достаточно открыть форму ввода — поле времени должно отсутствовать.

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

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

Значение после НачалоДня
Норма

Выводится дата с временем 00:00:00

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

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

Отбор за день в запросе
Норма

Попадают документы с 00:00:00 по 23:59:59

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

Вечерние документы отсутствуют в выборке

Поле ввода реквизита
Норма

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

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

Поле времени доступно — состав даты не изменён

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

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

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

Несколько строк на один день с разным временем

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

Чем НачалоДня отличается от Формат с ДЛФ=D?

НачалоДня возвращает значение типа «Дата» с нулевым временем — его можно сравнивать, сортировать и передавать в запросы. Формат с ДЛФ=D возвращает строку, пригодную только для отображения. Для логики используйте НачалоДня, для показа пользователю — Формат.

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

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

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

Почти всегда причина в том, что параметр отбора содержит время 00:00:00, а документы проведены в другое время. Сравнение на равенство не срабатывает. Используйте диапазон от НачалоДня до КонецДня либо приводите обе стороны сравнения к началу дня.

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

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

Что произойдёт с данными при смене состава даты реквизита?

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

Итог

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

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