Top.Mail.Ru

Как в 1С прибавить к дате 1 день: подробная инструкция для разработчиков

Работа с датами — одна из ежедневных задач при кастомизации и разработке в системе «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)

Распространенные ошибки разработчиков

  1. Сложение даты с числом внутри запроса. Попытка написать Дата + 86400 в тексте запроса приведет к ошибке компиляции. В запросах допустима только функция ДОБАВИТЬКДАТЕ.

  2. Игнорирование времени при прибавлении дня. Если прибавить 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. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *