Разработка и Конфигурация · 9 мин
Как прибавить день к дате в 1С
Как прибавить день к дате в 1С: функция ДобавитьКДате, простое сложение с секундами, работа с запросами. Примеры кода, типичные ошибки и проверка результата.
Задача прибавить день к дате в 1С возникает постоянно: при расчёте сроков оплаты, дат отгрузки, периодов действия договоров и в обработках документов. Встроенный язык 1С не имеет отдельной функции «ПрибавитьДень», но задача решается несколькими штатными способами — через функцию ДобавитьКДате() и через обычное арифметическое сложение с секундами.
Выбор способа зависит от контекста: пишете вы код в модуле, формируете запрос или работаете с датой на форме. У каждого варианта есть особенности, связанные с типом данных «Дата», составом даты (дата и время или только дата) и поведением при переходе через границу месяца и года.
Ниже разобраны рабочие примеры кода, отличия между подходами, типичные ошибки новичков и способы проверить, что результат получился именно таким, как ожидалось.
Как устроен тип «Дата» в 1С и почему это важно
Тип «Дата» в 1С хранит значение с точностью до секунды. Даже если вы видите на форме только «12.03.2026», внутри значения присутствует время — по умолчанию 00:00:00. Именно поэтому арифметика с датами работает через секунды: прибавление числа к дате означает прибавление этого числа секунд.
Из этого следует главное практическое правило: чтобы прибавить один день, нужно прибавить 86400 секунд (24 × 60 × 60). Если прибавить просто единицу, дата сдвинется на одну секунду, а не на сутки — одна из самых частых ошибок начинающих разработчиков.
Второй важный момент — состав даты. Если исходное значение содержит время, например 12.03.2026 14:30:00, то после прибавления дня время сохранится: получится 13.03.2026 14:30:00. Если нужна дата без времени, её предварительно обрезают функцией НачалоДня().
Способ 1: функция ДобавитьКДате
Штатная функция ДобавитьКДате() — самый читаемый и безопасный способ. Она принимает три параметра: исходную дату, тип увеличения (строка) и величину смещения. Для прибавления одного дня код выглядит так:
НоваяДата = ДобавитьКДате(ИсходнаяДата; "ДЕНЬ"; 1);
Тип увеличения можно указывать по-разному: "ДЕНЬ" и "ДНИ" работают одинаково. Аналогично доступны "СЕКУНДА", "МИНУТА", "ЧАС", "МЕСЯЦ", "КВАРТАЛ", "ГОД", "НЕДЕЛЯ". Это удобно, когда логика должна сдвигать дату на разные интервалы в зависимости от настройки — тип интервала можно передать параметром.
Функция корректно обрабатывает переходы через границы: ДобавитьКДате от 31.01.2026 на один день вернёт 01.02.2026, а от 31.12.2026 — 01.01.2026. Високосные годы также учитываются автоматически.
Чтобы вычесть день, передайте отрицательное значение:
ПредыдущийДень = ДобавитьКДате(ИсходнаяДата; "ДЕНЬ"; -1);
- 1Определите переменную с исходной датой (тип «Дата»)
- 2Вызовите ДобавитьКДате(ИсходнаяДата; "ДЕНЬ"; 1)
- 3Сохраните результат в новую переменную или реквизит
- 4Выведите результат через Сообщить() или в отладчике для проверки
Способ 2: сложение даты с числом секунд
Второй вариант — прямая арифметика. Поскольку дата в 1С измеряется в секундах, допустимо такое выражение:
НоваяДата = ИсходнаяДата + 86400; // 86400 секунд = 1 сутки
Чтобы код читался понятнее, часто записывают множители явно:
НоваяДата = ИсходнаяДата + 24 60 60;
Результат идентичен ДобавитьКДате: платформа сама выполняет пересчёт через границы месяцев и лет. Этот способ короче и часто встречается в типовых конфигурациях, особенно в циклах по дням:
ТекДата = НачалоПериода;
Пока ТекДата <= КонецПериода Цикл
// обработка дня
ТекДата = ТекДата + 86400;
КонецЦикла;
Ограничение способа — он работает только с секундными интервалами. Прибавить «месяц» сложением нельзя, потому что месяцы имеют разную длину; для месяцев и лет используйте ДобавитьКДате.
Сравнение способов
Подходит для любых интервалов (день, месяц, год), код самодокументируем. Чуть длиннее запись.
Короткая запись, удобно в циклах по дням. Работает только с секундными интервалами, требует комментария для читаемости.
Единственный вариант внутри текста запроса. Сдвиг выполняется на стороне СУБД без выборки данных в код.
Как прибавить день в запросе 1С
В языке запросов арифметика с секундами недоступна — там используется собственная функция ДОБАВИТЬКДАТЕ. Синтаксис похож на встроенную функцию, но тип интервала указывается без кавычек:
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(Заказ.ДатаОтгрузки, ДЕНЬ, 1) КАК ДатаОтгрузкиПлюсДень
ИЗ
Документ.ЗаказПокупателя КАК Заказ
Допустимые типы интервала в запросе: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД. Третьим параметром можно передать параметр запроса, что удобно для настраиваемых отчётов:
ДОБАВИТЬКДАТЕ(Заказ.Дата, ДЕНЬ, &КоличествоДней)
Обратите внимание: в запросе нельзя смешивать синтаксисы. Запись ДОБАВИТЬКДАТЕ(Поле, "ДЕНЬ", 1) с кавычками вызовет ошибку, потому что в языке запросов тип интервала — ключевое слово, а не строка.
Прибавление дня с учётом времени и границ дня
Если исходная дата содержит время, результат сохранит его. Это не всегда желательно: например, при расчёте срока «следующий календарный день» ожидают дату с нулевым временем. Тогда сначала отбрасывают время:
НоваяДата = НачалоДня(ИсходнаяДата) + 86400;
Обратная ситуация — нужен конец следующего дня для включения документов в период. Здесь помогает функция КонецДня(), которая возвращает 23:59:59:
ГраницаПериода = КонецДня(ИсходнаяДата + 86400);
Для сравнений дат без учёта времени в запросах используйте функции НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА. Это надёжнее, чем сравнение «больше или равно» с датой, содержащей произвольное время, — документ, проведённый в 14:00, не попадёт в условие Дата <= Дата(2026,3,12), потому что у литерала время 00:00:00.
Типичные ошибки и как их проверить
Первая ошибка — прибавление единицы вместо 86400. Выражение Дата + 1 синтаксически корректно и не вызовет ошибки, но сдвинет дату на одну секунду. Внешне дата выглядит той же, и ошибка обнаруживается только при детальной проверке.
Вторая ошибка — работа со строкой вместо даты. Если значение пришло из файла или формы как строка «12.03.2026», сначала преобразуйте его функцией Дата(), иначе сложение приведёт к ошибке преобразования типов.
Третья ошибка — попытка прибавить день к пустой дате (01.01.0001). Технически это сработает, но результат 02.01.0001 почти наверняка не имеет смысла для учёта. Проверяйте заполненность через ЗначениеЗаполнено() перед вычислениями.
Проверить результат проще всего в отладчике: поставьте точку останова после вычисления и посмотрите значение в табло. Быстрая альтернатива — вывод через Сообщить(НоваяДата) или вычисление выражения в консоли кода на управляемых формах.
Как проверить результат
Дата сдвинута ровно на сутки, время соответствует ожиданию
Сдвиг на секунду или время обнулено неожиданно
Получено 01.02 того же года
Дата осталась в январе или сброшен год
Тип «Дата»
Тип «Строка» — сложение даст ошибку или неверный результат
FAQ
Как отнять день от даты в 1С?
Используйте ДобавитьКДате(Дата; "ДЕНЬ"; -1) или вычитание секунд: Дата - 86400. В запросе — ДОБАВИТЬКДАТЕ(Поле, ДЕНЬ, -1). Оба варианта корректно переходят через границу месяца назад.
Как прибавить день к текущей дате?
Возьмите текущую дату сеанса функцией ТекущаяДатаСеанса() и прибавьте день: ДобавитьКДате(ТекущаяДатаСеанса(); "ДЕНЬ"; 1). Использовать ТекущаяДата() на сервере не рекомендуется — она вернёт время клиентского компьютера, а не сервера.
Можно ли прибавить только рабочие дни, пропуская выходные?
Штатной функции для рабочих дней нет. Нужен цикл с проверкой дня недели через ДеньНедели() или обращение к производственному календарю (регистр сведений в типовых конфигурациях). Простое сложение дней учтёт все календарные дни, включая выходные.
Почему после прибавления дня время в дате изменилось?
Оно не должно меняться: ДобавитьКДате и сложение с 86400 сохраняют время. Если время обнулилось, вероятно, где-то в коде применяется НачалоДня() или значение проходит через реквизит с составом даты «Дата» (без времени). Проверьте свойства реквизита в конфигураторе.
Как прибавить день к дате, введённой пользователем на форме?
Если реквизит формы имеет тип «Дата», работайте с ним напрямую: НоваяДата = ДобавитьКДате(РеквизитДата; "ДЕНЬ"; 1). Если значение введено строкой, сначала преобразуйте его через Дата() и проверьте корректность ввода, иначе получите ошибку исполнения.
Чем отличается сдвиг на день от сдвига на 24 часа?
В 1С разницы нет: и ДобавитьКДате с типом ДЕНЬ, и сложение с 86400 секундами дают одинаковый результат, поскольку платформа не учитывает переходы на летнее время — внутреннее время едино для всей базы.
Что важно запомнить
День прибавляется функцией ДобавитьКДате(Дата; "ДЕНЬ"; 1) в коде, ДОБАВИТЬКДАТЕ(Поле, ДЕНЬ, 1) в запросе или сложением Дата + 86400. Помните, что арифметика идёт в секундах, а дата всегда содержит время — при сравнениях приводите значения к началу или концу дня.