Как в 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С
Синтаксис:
Получите понятные самоучители по 1С бесплатно:
ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>)
Где параметры <Дата> это «наша дата», <Тип> это единица измерения временного интервала (ГОД, ПОЛУГОДИЕ, КВАРТАЛ, МЕСЯЦ, НЕДЕЛЯ, ДЕКАДА, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА), а в параметре <Количество> указывается число прибавляемых временных интервалов.
Если необходимо отнять временной интервал параметр <Количество> необходимо задавать со знаком минус.
Пример:
&НаКлиенте Процедура ПрибавитьМесяц(Команда) ПрибавитьМесяцНаСервере(); КонецПроцедуры &НаСервере Процедура ПрибавитьМесяцНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2020, 3, 30), МЕСЯЦ, 1) КАК СледующийМесяц"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Дата = ВыборкаДетальныеЗаписи.СледующийМесяц; КонецЦикла; Сообщить(Дата); КонецПроцедуры
Результат:
Примечание — возможны ошибки
Если стоит задача отнять или прибавить к дате несколько месяцев. Используя данные функции, не стоит отнимать или прибавлять месяца последовательно, так как это приведёт к неверному результату. Допустим необходимо к дате 31 января 2020г. прибавить 2 месяца.
Неправильно:
НашаДата = '2020.01.31'; Пока Месяц(НашаДата) < 3 Цикл НашаДата = ДобавитьМесяц(НашаДата, 1); КонецЦикла; Сообщить(НашаДата);
Результат:
Правильно:
НашаДата = '2020.01.31'; СледующийМесяц = ДобавитьМесяц(НашаДата, 2); Сообщить(СледующийМесяц);
Результат: