Как посчитать количество месяцев между датами 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. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!