Разработка и Конфигурация · 10 мин
Как вывести только дату без времени в 1С
Как в 1С получить дату без времени: функции НачалоДня, Формат, настройка типа реквизита, запросы и макеты. Разбор типичных ошибок и готовые примеры кода.
В 1С тип «Дата» всегда содержит и дату, и время с точностью до секунды. Даже если пользователь видит на форме только «12.05.2026», внутри значения хранится и время — чаще всего 00:00:00 или текущий момент. Из-за этого при выводе в отчёт, печатную форму или строку сообщения время «вылезает» там, где оно не нужно.
Задача «убрать время» решается несколькими способами: правильной настройкой состава даты в метаданных, функцией НачалоДня(), функцией Формат() с параметром «ДЛФ», а также средствами языка запросов. Выбор зависит от того, где именно нужно избавиться от времени — в данных, на форме или только при выводе.
Ниже разобраны все рабочие варианты с примерами кода, условиями выбора и типичными ошибками, которые приводят к лишним записям в регистрах и неверным сравнениям дат.
Как 1С хранит дату и почему время появляется само
Тип «Дата» в платформе 1С — это единое значение, включающее календарную дату и время суток. Разделить их «физически» нельзя: любая переменная типа «Дата» содержит обе части. Максимум, что можно сделать, — обнулить время (привести его к 00:00:00) или не выводить его при преобразовании в строку.
Функция ТекущаяДата() возвращает дату вместе с текущим временем сеанса. Если записать её результат в реквизит и потом вывести, пользователь увидит, например, «12.05.2026 14:37:22». Именно это чаще всего становится причиной вопроса «как убрать время».
Даже если реквизит настроен как «только дата», при программном присвоении значения с временем платформа отсекает время автоматически. Но в запросах, параметрах виртуальных таблиц и сравнениях неучтённое время способно давать неожиданные результаты — об этом ниже.
Способ 1. Настроить состав даты в свойствах реквизита
Самый правильный вариант, если время не нужно вообще, — задать состав даты на уровне конфигурации. Откройте свойства реквизита (документа, справочника, регистра) и в поле «Состав даты» выберите значение «Дата». После этого платформа сама будет отсекать время при записи, а на форме поле ввода не будет предлагать ввод часов и минут.
Такой подход работает для реквизитов объектов, измерений и ресурсов регистров, колонок табличных частей и реквизитов форм. Это единственный способ гарантировать, что время не попадёт в базу данных даже из внешних обработок и обмена.
Важный нюанс: изменение состава даты существующего реквизита, в котором уже есть данные с временем, требует реструктуризации. Платформа при обновлении конфигурации отсечёт время у существующих записей, и эта операция необратима. Перед изменением сделайте резервную копию информационной базы.
Способ 2. Обнулить время функцией НачалоДня()
Если тип реквизита менять нельзя (например, это стандартный реквизит типовой конфигурации), время обнуляют программно. Функция НачалоДня(Дата) возвращает ту же дату, но с временем 00:00:00.
ДатаДокумента = НачалоДня(ТекущаяДата());
// Результат: 12.05.2026 0:00:00
Обратная функция — КонецДня(Дата) — возвращает время 23:59:59. Пара этих функций стандартно используется для построения интервалов: отбор «за день» корректно задавать как период от НачалоДня(Дата) до КонецДня(Дата), а не сравнивать даты напрямую.
Присваивайте обнулённое значение до записи объекта, а не после. Если записать документ с временем, а потом менять реквизит, понадобится повторная запись — лишняя транзакция и риск срабатывания подписок на события.
ДатаБезВремени = НачалоДня(ТекущаяДата());
Сообщить(ДатаБезВремени); // 12.05.2026 0:00:00Способ 3. Вывести дату без времени через Формат()
Когда время должно храниться, но не должно отображаться — в печатной форме, сообщении пользователю, наименовании файла — используют функцию Формат() с параметром «ДЛФ» (локальный формат даты).
СтрокаДаты = Формат(ДатаДокумента, "ДЛФ=D");
// Результат: 12.05.2026
СтрокаДлинная = Формат(ДатаДокумента, "ДЛФ=DD");
// Результат: 12 мая 2026 г.
Основные варианты параметра: ДЛФ=D — короткая дата (дд.мм.гггг), ДЛФ=DD — длинная дата с названием месяца, ДЛФ=DT — дата со временем. Полный форматный строковый синтаксис позволяет задать и произвольный шаблон, например Формат(Дата, "ДФ=dd.MM.yyyy").
Помните: Формат() возвращает строку, а не дату. Такое значение нельзя сравнивать как дату, использовать в отборах запроса или сортировать хронологически — строки «01.02.2026» и «31.01.2026» отсортируются по алфавиту, а не по времени.
Сравнение способов
Когда время не нужно в принципе. Ограничение: требует изменения конфигурации и реструктуризации данных.
Когда тип менять нельзя, но время в значении мешает. Ограничение: обнуляет время только в момент присвоения.
Когда нужно только красиво вывести. Ограничение: результат — строка, непригодная для сравнений и отборов.
Когда отбор идёт запросом. Ограничение: работает только внутри запроса, не меняет данные.
Способ 4. Получить дату без времени в запросе
В языке запросов для отсечения времени служит функция НАЧАЛОПЕРИОДА(Дата, ДЕНЬ). Она возвращает начало дня для переданной даты — аналог НачалоДня() во встроенном языке.
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ) КАК День,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, ДЕНЬ)
Для отбора записей за конкретный день не сравнивайте период равенством с датой без времени — записи с временем 10:00 не попадут в условие Период = &Дата, где &Дата имеет время 00:00:00. Правильно использовать диапазон: Период МЕЖДУ &НачалоДня И &КонецДня или условие Период >= &Начало И Период < &СледующийДень.
В отчётах на СКД дату без времени выводят либо через вычисляемое поле с НАЧАЛОПЕРИОДА, либо настройкой формата поля на закладке «Наборы данных» — там можно указать форматную строку ДЛФ=D для конкретного поля, не меняя запрос.
Вывод даты без времени в печатных формах и макетах
При заполнении параметров табличного документа значение типа «Дата» по умолчанию выводится со временем, если оно не нулевое. Чтобы в печатной форме была только дата, форматируйте значение перед выводом:
Область.Параметры.ДатаОтгрузки = Формат(Док.ДатаОтгрузки, "ДЛФ=D");
Альтернатива — задать формат прямо в макете. В свойствах ячейки макета (или параметра) есть поле «Формат», куда вписывается та же строка ДЛФ=D. Тогда при выводе параметра платформа сама применит формат, и в коде форматирование не потребуется.
Для полей ввода на управляемой форме действует похожий механизм: в свойствах поля задайте «Формат редактирования» — и пользователь увидит только дату, даже если в связанном реквизите хранится время.
- 1Определите, где теряется время: в макете, в коде заполнения параметров или в самом реквизите
- 2Если время не нужно нигде — задайте состав даты «Дата» в свойствах реквизита
- 3Если время нужно в данных, но не на печати — добавьте Формат(Дата, "ДЛФ=D") при заполнении параметров
- 4Альтернатива: пропишите формат ДЛФ=D в свойствах ячейки макета
- 5Сформируйте печатную форму и проверьте, что время не отображается
Типичные ошибки и как их проверить
Самая частая ошибка — сравнение дат равенством, когда у одного значения есть время, а у другого нет. Условие Док.Дата = НачалоДня(ТекущаяДата()) не сработает для документа, созданного в 09:15. Сравнивайте через НачалоДня() обеих сторон или через диапазон.
Вторая ошибка — использование Формат() для последующей логики. Строка «12.05.2026» не участвует в сравнениях дат и в запросах как параметр типа «Дата» без обратного преобразования, которое платформа не делает автоматически.
Третья группа проблем — регистры сведений с периодичностью «в пределах дня» и «в пределах секунды». Если записи создаются с текущим временем, а потом ищутся по дате без времени, отбор ничего не найдёт. Здесь помогает либо запись через НачалоДня(), либо отбор по диапазону.
Как проверить результат
Время равно 0:00:00
Время отлично от нуля — проверьте состав даты и код присвоения
Отображается только дата в нужном формате
Видны часы и минуты — формат не применён
Попадают все записи с 00:00:00 до 23:59:59
Попадают только записи с нулевым временем — условие построено равенством
FAQ
Почему НачалоДня() не помогает — время всё равно выводится?
Скорее всего, функция применена не к тому значению или после вывода. НачалоДня() возвращает новое значение, а не меняет исходную переменную: нужно присвоить результат обратно, например Дата = НачалоДня(Дата). Также проверьте, что форматируется именно обнулённое значение.
Как вывести дату в формате «12 мая 2026» без года?
Используйте произвольную форматную строку: Формат(Дата, "ДФ='d MMMM'"). Параметр ДФ позволяет собрать шаблон из компонентов дня, месяца и года в любом сочетании.
Можно ли убрать время у даты документа?
Стандартный реквизит «Дата» документа всегда содержит время — оно участвует в позиционировании документа на оси времени и в проведении. Убрать время у него нельзя, можно только форматировать при выводе. Если нужна «чистая» дата, добавьте собственный реквизит с составом даты «Дата».
Чем ТекущаяДата() отличается от ТекущаяДатаСеанса() в этой задаче?
Обе возвращают дату со временем, но ТекущаяДатаСеанса() учитывает часовой пояс сеанса, а ТекущаяДата() — время клиентского компьютера. Для обнуления времени разницы нет: обе оборачиваются в НачалоДня(). Для серверной логики предпочтительнее ТекущаяДатаСеанса().
Как в СКД сгруппировать продажи по дням без времени?
Добавьте в запрос набора данных поле НАЧАЛОПЕРИОДА(Период, ДЕНЬ) и группируйте по нему. Либо используйте стандартные поля-периоды «ПериодДень», которые СКД создаёт автоматически для дат — они уже содержат дату без времени.
Что важно запомнить
Дата в 1С всегда содержит время — его можно только обнулить или скрыть. Для хранения без времени задайте состав даты «Дата» в метаданных, для обнуления значения используйте НачалоДня(), для вывода — Формат() с ДЛФ=D, в запросах — НАЧАЛОПЕРИОДА(Период, ДЕНЬ). Никогда не сравнивайте даты равенством без учёта времени.