Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Как посчитать количество месяцев между датами 1С

Функция РАЗНОСТЬДАТ() в запросе

Рассчитать количество месяцев между датами в системе 1с проще всего в запросе, здесь разработчику доступна  замечательная функция РАЗНОСТЬДАТ(). Функция рассчитывает календарную разницу между датами в заданной единице измерения.

Синтаксис функции:

РАЗНОСТЬДАТ (<ДатаНачала>, <ДатаКонца>, <Тип>)

Где параметр <Тип> это единица  измерения,  в которой необходимо получить результат функции (Год, Квартал, Месяц, День, Час, Минута, Секунда).

Рассмотрим

Пример №1

"ВЫБРАТЬ
|РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2020, 1, 1), ДАТАВРЕМЯ(2020, 2, 1), МЕСЯЦ) КАК РазностьМесяцев"

Результат: «1»

Пример №2

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Возможно, передавать дату в выражения <ДатаНачала>, <ДатаКонца> в виде параметров.

"ВЫБРАТЬ
|РАЗНОСТЬДАТ(&ДатаНачала, &ДатаКонца, МЕСЯЦ) КАК РазностьМесяцев ";
Запрос.УстановитьПараметр("ДатаКонца", '2019.01.01');
Запрос.УстановитьПараметр("ДатаНачала", '2020.02.01');

Результат: «13»

Необходимо понимать, что  функция игнорирует все временные единицы измерения, которые меньше чем единица, заданная в параметре <Тип>.

Примеры способов расчёта в коде

Для решения таких задач в модулях программы 1С, нет специальной функции, и в какой-то степени приходится изобретать «велосипед».

Пример №1

С использование функций Год(), Месяц():

Функция РазностьДатМесяц(ДатаНачала,ДатаКонца)

МесяцНачала = Месяц(ДатаНачала);
МесяцКонца = Месяц(ДатаКонца);
ЛетМеждуДатами = Год(ДатаКонца) - Год(ДатаНачала);
РезультатВМесяцах = ЛетМеждуДатами * 12 - МесяцНачала + МесяцКонца;
Возврат РезультатВМесяцах;

КонецФункции

Пример№2

Интересный пример расчёта количества месяцев с помощью рекурсии с  использование функции НачалоМесяца().

Функция РазностьДатМесяцРекурсия(ДатаНачала,ДатаКонца)

Если НачалоМесяца(ДатаНачала) >= НачалоМесяца(ДатаКонца) Тогда
Результат = 0;
Иначе
Результат = 1 + РазностьДатМесяцРекурсия(ДатаНачала,НачалоМесяца(ДатаКонца)-1);
КонецЕсли;

Возврат Результат;

КонецФункции

Возможные ошибки

Для расчётов временных промежутков между датами следует не путать местами начальную и конечную даты,  в противном случае можно получить результат со знаком минус.

Пример:

"ВЫБРАТЬ
|РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2020, 2, 1), ДАТАВРЕМЯ(2020, 1, 1), МЕСЯЦ) КАК РазностьМесяцев"

Результат: « -1 »

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Добавить комментарий:

Ваш адрес email не будет опубликован.