Как в 1С 8.3 прибавить месяц, день, неделю и т.д.

Рассмотрим разные способы добавления различных периодов дат в 1С 8.3 — от месяца, до секунды.

Простой и «топорный» метод

НашаДата = '2020.01.12';

// Прибавляем месяц с расчетом секнду
ДеньВСекундах = 60*60*24; 
КоличествоДнейЯнварь = 31;
СледующийМесяц = НашаДата + ДеньВСекундах * КоличествоДнейЯнварь; 
Сообщить(СледующийМесяц); // '2020.02.12'
//Добавляем к дате день
СледующийДень = НашаДата + 24*60*60 ;
Сообщить(СледующийДень); // '2020.01.13'

Метод хорошо отрабатывает при добавлении дня. Что касается месяца, в таком способе нам придётся контролировать количество дней в прибавляемом месяце, учитывая количество дней в следующем, ещё високосный год. Получается совсем сложно и громоздко.

Таким образом для операций с месяцами во встроенном языке 1С, как стандарт, существует две функции это ДобавитьМесяц() и в языке запросов ДОБАВИТЬКДАТЕ(). Рассмотрим подробно работу с каждой из них.

Функция ДобавитьМесяц()

Синтаксис:

ДобавитьМесяц(<Дата>, <ЧислоМесяцев>)

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

Где параметр <Дата> это «наша дата», <ЧислоМесяцев> количество добавляемых месяцев (цифра).

Если следует отнимать месяцы, то количество месяцев необходимо указывать со знаком минус.

Пример:

НашаДата = '2020.03.31';
СледующийМесяц = ДобавитьМесяц(НашаДата, 1);

Результат:

Функция ДОБАВИТЬКДАТЕ() — в запросах 1С

Синтаксис:

ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>)

Где параметры <Дата> это «наша дата», <Тип> это единица измерения временного интервала (ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, НЕДЕЛЯ, ДЕКАДА, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА), а в параметре <Количество> указывается число прибавляемых временных интервалов.

Если необходимо отнять временной интервал параметр <Количество> необходимо задавать со знаком минус.

Пример:

&НаКлиенте
Процедура ПрибавитьМесяц(Команда)
ПрибавитьМесяцНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПрибавитьМесяцНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|          ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 3, 30), МЕСЯЦ, 1) КАК СледующийМесяц";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Дата = ВыборкаДетальныеЗаписи.СледующийМесяц;
КонецЦикла;

Сообщить(Дата);

КонецПроцедуры

Результат:

Примечание — возможны ошибки

Если стоит задача отнять или прибавить к дате несколько месяцев. Используя данные функции, не стоит отнимать или прибавлять месяца последовательно, так как это приведёт к неверному результату.  Допустим необходимо к дате 31 января 2020г. прибавить 2 месяца.

Неправильно:

НашаДата = '2020.01.31';
Пока Месяц(НашаДата) < 3 Цикл
НашаДата = ДобавитьМесяц(НашаДата, 1);
КонецЦикла;
Сообщить(НашаДата);

Результат:

Правильно:

НашаДата = '2020.01.31';
СледующийМесяц = ДобавитьМесяц(НашаДата, 2);
Сообщить(СледующийМесяц);

Результат: