Работа с датами — одна из ежедневных задач при кастомизации и разработке в системе «1С:Предприятие 8». Несмотря на кажущуюся простоту, операция прибавления времени имеет важные синтаксические особенности в зависимости от того, где именно пишется код: во встроенном языке платформы, в запросе или в схеме компоновки данных (СКД).
В данном руководстве подробно разобраны все рабочие способы прибавления и вычитания дней из даты с примерами.
Более подробно про тип Дата рассказано в статье по ссылке.
Особенности хранения даты в «1С:Предприятие»
Для корректного написания кода важно понимать внутреннее устройство платформы. В 1С тип данных Дата всегда хранит значение с точностью до секунды (дата + время) [1.1]. Физически это число секунд, прошедших с 00:00:00 1 января 0001 года.
Из этого вытекает главное правило для работы во встроенном языке: любые арифметические действия с датами производятся в секундах.
Прибавить к дате день - при помощи встроенного языка 1С
Изменение даты в 1С происходит путем добавления или вычитания нужного количества секунд.
Как известно, в сутках 24 часа, т.е. 24*60*60, итого 86400 секунд.
Поэтому способ первый - мы прибавляем 86400 секунд столько раз, сколько суток нам нужно добавить к дате.
//Добавим 1 день ДатаИсходная = ТекущаяДата(); ДатаНовая = ДатаИсходная + 86400;
Второй способ - взять конец суток для нужной даты и прибавить 1 секунду. В этом случае мы автоматически перейдем в следующие сутки
//Добавим 1 день ДатаИсходная = ТекущаяДата(); ДатаНовая = КонецДня(ДатаИсходная) + 1;
Добавление даты к литералу тоже не сильно сложнее:
// В качестве примера возьмем последний день зимы 2026 года ИсходнаяДата = Дата("20260228000000"); // 28 февраля 2026 г., 00:00:00 // Прибавляем ровно 1 сутки (86 400 секунд) НоваяДата = ИсходнаяДата + 86400; // Результат: 01.03.2026 00:00:00 (платформа автоматически перейдет на март) Сообщить("Было: " + ИсходнаяДата); Сообщить("Стало: " + НоваяДата);
Обратите внимание: 2026 год не является високосным. Платформа самостоятельно учитывает календарный механизм, поэтому прибавление дня к 28 февраля сразу вернет 1 марта 2026 года без дополнительных проверок со стороны программиста.
Прибавление произвольного количества дней:
Если необходимо прибавить N дней, количество дней предварительно умножается на число секунд в сутках:
КоличествоДней = 5; // Смещение на 5 дней ИсходнаяДата = Дата("20260704120000"); // 4 июля 2026 г. НоваяДата = ИсходнаяДата + (КоличествоДней * 86400); // Получим 9 июля 2026 г.
Как вычесть 1 день:
Для вычитания используется аналогичная логика, но со знаком «минус»:
ВчерашнийДень = ТекущаяДата() - 86400;
Использование функции ДОБАВИТЬКДАТЕ в запросах 1С
В языке запросов 1С прямые математические операции с датами (например, Период + 86400) не поддерживаются на уровне СУБД. Для изменения дат внутри запроса используется встроенная функция ДОБАВИТЬКДАТЕ.
Синтаксис:
ДОБАВИТЬКДАТЕ(<ИсходнаяДата>, <ТипУвеличения>, <Величина>)
ТипУвеличения — единица времени, на которую изменяется дата. Допустимые значения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД.
Величина — целое число. Для прибавления передается положительное число, для вычитания — отрицательное.
Пример запроса:
Пример получения заказов клиентов за 2026 год с расчетом планируемой даты отгрузки (дата заказа + 1 день):
ВЫБРАТЬ
ЗаказКлиента.Ссылка КАК Документ,
ЗаказКлиента.Дата КАК ДатаОформления,
ДОБАВИТЬКДАТЕ(ЗаказКлиента.Дата, ДЕНЬ, 1) КАК ПланируемаяДатаОтгрузки
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Дата МЕЖДУ ДАТАВРЕМЯ(2026, 1, 1) И ДАТАВРЕМЯ(2026, 12, 31, 23, 59, 59)
Изменение дат в Системе компоновки данных (СКД)
При настройке отчетов в СКД часто требуется автоматически сдвигать границы периодов (например, увеличивать конечную дату на один день, чтобы в выборку попали документы за весь последний день периода).
В выражениях параметров или вычисляемых полей СКД применяется функция, схожая с функцией запроса, но имеющая другое написание типа интервала.
Синтаксис функции в СКД:
ДобавитьКДате(<Дата>, <"ТипИнтервала">, <Величина>)
Важное отличие: В СКД тип интервала обязательно передается как строковое значение в кавычках (например, "День", "Месяц", "Год").
Пример использования в параметрах СКД:
Чтобы сместить границу параметра КонецПериода вперед на один день, в поле «Выражение» вкладки «Параметры» указывается:
ДобавитьКДате(&КонецПериода, "День", 1)
Распространенные ошибки разработчиков
Сложение даты с числом внутри запроса. Попытка написать Дата + 86400 в тексте запроса приведет к ошибке компиляции. В запросах допустима только функция ДОБАВИТЬКДАТЕ.
Игнорирование времени при прибавлении дня. Если прибавить 86 400 секунд к значению 04.07.2026 14:20:00, результатом станет 05.07.2026 14:20:00. Если требуется получить начало следующего дня без привязки ко времени, результат необходимо обработать функцией НачалоДня():
СледующийДень = НачалоДня(ИсходнаяДата + 86400); // Получим 05.07.2026 00:00:00
Резюме
Во встроенном языке прибавляйте секунды напрямую: Дата + 86400.
В текстах запросов используйте конструкцию: ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, 1).
В СКД указывайте тип интервала строкой: ДобавитьКДате(Дата, "День", 1).
Чувствуете, что застряли в основах 1С?
Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.
