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

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

Как добавить время к дате в 1С

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

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

Для этого не нужны внешние обработки: встроенный язык 1С умеет складывать дату с числом, а штатные функции Дата() и ДобавитьКДате() позволяют собрать или сместить значение без ручных вычислений. Главное — понимать, в каких единицах платформа считает время, иначе легко получить сдвиг на несколько дней вместо пары часов.

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

Как 1С хранит дату и время

Тип «Дата» в 1С всегда содержит и календарную дату, и время суток. Разделить их нельзя — можно только отобразить часть значения через форматную строку, например Формат(МояДата, "ДЛФ=D") покажет только дату. Внутри значение останется полным, с часами, минутами и секундами.

Ключевой факт для вычислений: единица измерения при арифметике с датами — секунда. Выражение Дата1 - Дата2 возвращает число секунд между значениями, а Дата + Число сдвигает дату на указанное количество секунд вперёд. Никаких «дней» или «часов» в операторе сложения не предусмотрено.

Прибавление секунд, минут и часов оператором сложения

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

ИсходнаяДата = Дата(2026, 3, 12, 10, 0, 0);

НоваяДата = ИсходнаяДата + 45; // +45 секунд → 12.03.2026 10:00:45

НоваяДата = ИсходнаяДата + 15 * 60; // +15 минут → 12.03.2026 10:15:00

НоваяДата = ИсходнаяДата + 3 * 3600; // +3 часа → 12.03.2026 13:00:00

НоваяДата = ИсходнаяДата + 86400; // +1 сутки → 13.03.2026 10:00:00

Для удобства заведите переменные-множители: СекундВМинуте = 60, СекундВЧасе = 3600, СекундВСутках = 86400. Тогда выражение ДатаДокумента + 2 * СекундВЧасе читается однозначно и не требует комментариев при сопровождении кода.

Вычитание работает симметрично: Дата - 30 * 60 вернёт время на полчаса раньше. Это удобно для расчёта дедлайнов, например «за час до начала события».

Функция ДобавитьКДате: смещение на дни, месяцы и годы

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

НоваяДата = ДобавитьКДате(ИсходнаяДата, "Месяц", 1);      // +1 месяц

НоваяДата = ДобавитьКДате(ИсходнаяДата, "День", 10); // +10 дней

НоваяДата = ДобавитьКДате(ИсходнаяДата, "Час", -2); // -2 часа

НоваяДата = ДобавитьКДате(ИсходнаяДата, "Минута", 30); // +30 минут

НоваяДата = ДобавитьКДате(ИсходнаяДата, "Квартал", 1); // +1 квартал

Параметр «ТипИнтервала» принимает значения: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год. Количество может быть отрицательным — тогда дата смещается назад. Функция корректно обрабатывает переход через конец месяца: прибавление месяца к 31 января даст последний день февраля, а не несуществующее 31 февраля.

Сложение или ДобавитьКДате

Дата + число секунд

Подходит для точных смещений в пределах суток: часы, минуты, секунды. Просто и наглядно, но для месяцев и лет неприменимо.

ДобавитьКДате()

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

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

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

ДатаБезВремени = НачалоДня(ДатаДокумента);

НоваяДата = Дата(Год(ДатаБезВремени), Месяц(ДатаБезВремени), День(ДатаБезВремени), 14, 30, 0);

// Результат: тот же день, но 14:30:00

Альтернатива без сборки по компонентам — прибавить секунды к началу дня: НачалоДня(ДатаДокумента) + 14 3600 + 30 60. Оба подхода дают одинаковый результат, выбирайте тот, который понятнее в контексте вашего кода.

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

Порядок действий при добавлении времени
  1. 1
    Определите, что нужно: сместить время (часы/минуты) или календарный период (дни/месяцы).
  2. 2
    Проверьте исходную дату на заполненность через ЗначениеЗаполнено().
  3. 3
    Для часов и минут прибавьте секунды: Дата + Часы <em> 3600 + Минуты </em> 60.
  4. 4
    Для дней, месяцев и лет используйте ДобавитьКДате() с нужным типом интервала.
  5. 5
    Проверьте результат через Сообщить() или отладчик, выведя полный формат даты со временем.

Работа с датой и временем в запросах

В языке запросов 1С арифметика с датами ограничена: складывать дату с числом напрямую нельзя. Для смещения используется функция ДОБАВИТЬКДАТЕ(Дата, ТипИнтервала, Количество) — синтаксис аналогичен встроенному языку.

ВЫБРАТЬ

ДОБАВИТЬКДАТЕ(Заказ.Дата, ЧАС, 3) КАК СрокОтгрузки

ИЗ

Документ.ЗаказПокупателя КАК Заказ

Для сравнения дат без учёта времени в запросе применяйте НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) и КОНЕЦПЕРИОДА(Дата, ДЕНЬ). Это стандартный приём для отборов «за день»: условие Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) захватывает все документы суток независимо от времени.

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

Самая частая ошибка — прибавление часов как будто это дни или наоборот. Выражение Дата + 2 добавляет две секунды, а не два дня; для двух дней нужно Дата + 2 86400 или ДобавитьКДате(Дата, "День", 2). Обратная ошибка — Дата + 2 60 60 24 * 30 для «месяца» — даёт смещение на 30 суток, что не совпадает с календарным месяцем.

Вторая группа проблем связана с отображением: разработчик прибавляет время, но в поле формы его не видно, потому что у элемента задан формат только даты. Проверяйте значение через отладчик или Сообщить(Формат(Дата, "ДЛФ=DT")), а не по внешнему виду поля.

Типичные ошибки
01
Прибавление дней как секунд без пересчёта: Дата + 5 даёт +5 секунд, а не +5 дней.
02
Эмуляция месяца через 30 суток: итоговая дата расходится с календарной, особенно в феврале.
03
Сравнение дат без НачалоДня(): документы одного дня с разным временем считаются разными.
04
Судить о результате по полю формы с форматом 'только дата' — время там просто не отображается.
05
Забыть проверить исходную дату на пустоту: вычисления с 01.01.0001 проходят без ошибок, но дают мусор.
Контрольные точки

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

Значение в отладчике
Норма

Дата и время соответствуют ожидаемому смещению

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

Время 0:00:00 или смещение в других единицах

Переход через границу суток
Норма

23:00 + 2 часа даёт 1:00 следующего дня

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

Дата не изменилась или день сброшен

Переход через конец месяца
Норма

31.01 + 1 месяц даёт последний день февраля

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

Несуществующая дата или сдвиг на март

FAQ

Итог

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

Время в 1С добавляется секундами: Дата + Часы * 3600. Календарные периоды смещайте функцией ДобавитьКДате(), дату из компонентов собирайте функцией Дата(), а время обнуляйте через НачалоДня(). Всегда проверяйте результат в полном формате даты.

Как добавить к дате 1 час в 1С?

Прибавьте 3600 секунд: НоваяДата = ИсходнаяДата + 3600 или используйте ДобавитьКДате(ИсходнаяДата, "Час", 1). Оба варианта корректно переносят значение через границу суток.

Как прибавить к дате несколько дней?

Используйте ДобавитьКДате(Дата, "День", 7) для семи дней. Можно и через секунды — Дата + 7 * 86400, — но вариант с функцией читается понятнее и исключает ошибку в пересчёте.

Как убрать время из даты в 1С?

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

Как получить текущее время без даты?

Отдельного типа «время» в 1С нет. Можно вычислить количество секунд с начала дня: ТекущаяДата() - НачалоДня(ТекущаяДата()) — или отформатировать дату строкой Формат(ТекущаяДата(), "ДФ=ЧЧ:мм:сс").

Почему ДобавитьКДате с месяцем даёт неожиданный результат?

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

Можно ли складывать даты в запросе 1С?

Напрямую сложить дату с числом в запросе нельзя. Используйте функцию запроса ДОБАВИТЬКДАТЕ(Дата, ЧАС, 3) с типами интервалов СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ и другими.