Разработка и Конфигурация · 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, НачалоМесяца, КонецМесяца, НачалоНедели и другие. Для отбора документов за конкретный день корректная пара — от НачалоДня до КонецДня, а не просто равенство дате.
ДатаБезВремени = НачалоДня(ТекущаяДата());
Сообщить(ДатаБезВремени); // 15.03.2026 00:00:00Как скрыть время только при выводе через Формат
Если значение хранить с временем допустимо, а время мешает только визуально, менять данные не нужно — достаточно отформатировать строку. Для этого служит функция Формат() с форматной строкой.
СтрокаДаты = Формат(ТекущаяДата(); "ДЛФ=D"); // "15.03.2026"
СтрокаДаты = Формат(ТекущаяДата(); "ДФ=dd.MM.yyyy"); // "15.03.2026"
Параметр ДЛФ=D задаёт локальный формат даты без времени, ДФ — произвольный шаблон. Важно: результат функции Формат — это строка, а не дата. Сравнивать её как дату, сортировать или использовать в запросах как параметр типа «Дата» нельзя.
Тот же принцип работает в табличных полях и отчётах: у колонки с датой можно задать форматную строку в свойствах, и время перестанет отображаться без какого-либо кода.
Как убрать время в запросе 1С
В языке запросов для приведения даты к началу дня используется функция НАЧАЛОПЕРИОДА с указанием периода «ДЕНЬ». Она работает аналогично НачалоДня в коде.
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ) КАК День,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ)
Это стандартный приём для группировки оборотов по дням: без НАЧАЛОПЕРИОДА каждая секунда образует отдельную строку группировки, и отчёт «по дням» фактически разваливается на тысячи строк.
Для отбора по конкретному дню в запросе передавайте два параметра — начало и конец дня — и используйте условие МЕЖДУ. Сравнение «Период = &Дата» сработает только для записей ровно в 00:00:00.
- 1Вычислите ДатаНачала = НачалоДня(НужнаяДата)
- 2Вычислите ДатаКонца = КонецДня(НужнаяДата)
- 3Передайте оба значения в запрос как параметры
- 4В условии запроса используйте: Период МЕЖДУ &ДатаНачала И &ДатаКонца
- 5Проверьте, что в выборку попали документы за весь день, включая вечерние
Как настроить реквизит, чтобы время не хранилось вовсе
Если время в реквизите не нужно по смыслу (дата рождения, дата договора, дата поставки), правильнее настроить тип на уровне конфигурации. В свойствах реквизита у типа «Дата» есть параметр «Состав даты» с вариантами: «Дата», «Время», «Дата и время».
Выберите «Дата» — и платформа будет хранить и отображать значение без времени. Пользователь в поле ввода физически не сможет ввести часы и минуты, а в запросах и сравнениях не потребуется никаких дополнительных приведений.
Уже введённые значения со временем при смене состава даты не перезаписываются автоматически корректно во всех сценариях — существующие данные стоит проверить и при необходимости обработать: пройтись по записям и присвоить НачалоДня(Значение).
Сравнение способов: что выбрать в вашей ситуации
Выбор зависит от того, где возникает проблема: в логике расчётов, в отображении или в структуре данных. Один и тот же визуальный результат достигается разными средствами с разными последствиями.
| Способ | Что делает | Когда применять | Ограничение |
|---|---|---|---|
| НачалоДня() | Меняет значение даты на 00:00:00 | Сравнения, отборы, расчёты в коде | Только в коде, не в запросе |
| Формат() | Формирует строку без времени | Вывод на экран, печать, сообщения | Результат — строка, не дата |
| НАЧАЛОПЕРИОДА | Приводит дату к началу дня в запросе | Группировки и отборы в запросах | Только внутри запроса |
| Состав даты реквизита | Убирает время на уровне хранения | Реквизиты, где время не нужно по смыслу | Требует изменения конфигурации |
Как выбрать действие
Типичные ошибки при работе с датой и временем
Самая распространённая ошибка — сравнение дат оператором «=» без предварительного приведения. Документ, проведённый в 14:30, никогда не будет равен дате отбора 00:00:00, и отчёт молча теряет данные.
Вторая ошибка — использование Формат() для последующей логики. Строка «15.03.2026» сортируется как текст, поэтому «02.03.2026» окажется «больше» по алфавиту при другой маске, а сравнение с типом «Дата» даст ложь или ошибку.
Третья группа проблем — границы периода. Отбор «с даты по дату», где конец задан как НачалоДня, отсекает все документы последнего дня после полуночи. Правильный конец периода — КонецДня или начало следующего дня с условием «меньше».
Как проверить, что время убрано корректно
Простейшая проверка — вывести значение через Сообщить() без форматирования: платформа покажет дату полностью, и будет видно, стоит ли время 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, а для постоянного хранения без времени — состав даты «Дата» у реквизита. Отборы за день всегда стройте диапазоном от начала до конца дня.