Получить разность дат (месяцев, дней) в ЗУП 3

1. ABit 05.06.18 21:13 Сейчас в теме
Споткнулся на простом вопросе - как получить количество полных месяцев и дней между двумя датами
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) КАК Месяцев";

работает некорректно
например разницу между 30.08.15 и 29.01.18 система возвращает равную 29 месяцам. Хотя полных тут 28.
ПолучитьРазностьДат или что-то подобное не нашел в общих модулях.
По-старинке
Пока Дата1 < Дата2
Добавитьмесяц...труляля
?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. madonov 257 06.06.18 02:47 Сейчас в теме
ВЫБРАТЬ
	РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) - 
	ВЫБОР
		КОГДА ДЕНЬ(&НачалоПериода) > ДЕНЬ(&КонецПериода)
				И НЕ(ДЕНЬ(&НачалоПериода) = ДЕНЬ(КОНЕЦПЕРИОДА(&НачалоПериода, МЕСЯЦ))
						И ДЕНЬ(&КонецПериода) = ДЕНЬ(КОНЕЦПЕРИОДА(&КонецПериода, МЕСЯЦ)))
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Месяцев
Показать


Логика следующая:
Если ЧислоМесяца из ДатыНачала > ЧислоМесяца из ДатыКонца тогда месяц неполный, и нужно отнять 1.
Однако, не стоит забывать, что в месяце может быть 28-31 день, а значит необходимо проверять не являются ли оба дня концом месяца. Например между 31.01.18 и 28.02.18 всё-таки полный месяц и отнимать 1 не следует.

Как-то так получилось, вроде работает.
3. SlavaKron 06.06.18 14:39 Сейчас в теме
(2) Вы считаете, что между 29.01.2018 и 28.02.2018 нет полного месяца?
По вашему запросу:
между 29.01.2018 и 28.02.2018 - 0 месяцев
между 30.01.2018 и 28.02.2018 - 0 месяцев
между 31.01.2018 и 28.02.2018 - 1 месяц
Разница в днях больше, а в месяцах меньше.
5. madonov 257 07.06.18 03:33 Сейчас в теме
(3) как ни странно, но да.

Именно так я понял потребность автора темы, исходя из приведенного примера. Возможно неправильно, но и четкого определения "Полный месяц" не приведено.

Спросите у рядового пользователя "прошел ли месяц между 30 января и 28 февраля?", а потом "прошел ли месяц между 31 января и 28 февраля?".

Поэтому я и привел помимо кода описание того, как он работает, чтобы каждый мог оценить подходит он под его конкретные нужды или нет.
4. RustRR 06.06.18 15:05 Сейчас в теме
К слову, при расчете стажа в годах, месяцах и днях используется правило:
За полный месяц принимаются каждые 30 дней.
За год принимаются 12 месяцев.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот