Получить разность дат (месяцев, дней) в ЗУП 3
Споткнулся на простом вопросе - как получить количество полных месяцев и дней между двумя датами
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) КАК Месяцев";
работает некорректно
например разницу между 30.08.15 и 29.01.18 система возвращает равную 29 месяцам. Хотя полных тут 28.
ПолучитьРазностьДат или что-то подобное не нашел в общих модулях.
По-старинке
Пока Дата1 < Дата2
Добавитьмесяц...труляля
?
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) КАК Месяцев";
работает некорректно
например разницу между 30.08.15 и 29.01.18 система возвращает равную 29 месяцам. Хотя полных тут 28.
ПолучитьРазностьДат или что-то подобное не нашел в общих модулях.
По-старинке
Пока Дата1 < Дата2
Добавитьмесяц...труляля
?
По теме из базы знаний
- Унифицированная форма Т-2 с фото сотрудника. (печатная форма для типовой конфигурации ЗУП 2.5)
- Алгоритмы и выгрузка ИБ с решениями для экзамена Специалист ЗУП 3.0.
- ЗУП 3.0 Специалист. Билет 4.
- Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
- Механизм представлений в типовых конфигурациях 1С: Зарплата и управление персоналом, редакция 3.1
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ВЫБРАТЬ
РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) -
ВЫБОР
КОГДА ДЕНЬ(&НачалоПериода) > ДЕНЬ(&КонецПериода)
И НЕ(ДЕНЬ(&НачалоПериода) = ДЕНЬ(КОНЕЦПЕРИОДА(&НачалоПериода, МЕСЯЦ))
И ДЕНЬ(&КонецПериода) = ДЕНЬ(КОНЕЦПЕРИОДА(&КонецПериода, МЕСЯЦ)))
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК Месяцев
ПоказатьЛогика следующая:
Если ЧислоМесяца из ДатыНачала > ЧислоМесяца из ДатыКонца тогда месяц неполный, и нужно отнять 1.
Однако, не стоит забывать, что в месяце может быть 28-31 день, а значит необходимо проверять не являются ли оба дня концом месяца. Например между 31.01.18 и 28.02.18 всё-таки полный месяц и отнимать 1 не следует.
Как-то так получилось, вроде работает.
(3) как ни странно, но да.
Именно так я понял потребность автора темы, исходя из приведенного примера. Возможно неправильно, но и четкого определения "Полный месяц" не приведено.
Спросите у рядового пользователя "прошел ли месяц между 30 января и 28 февраля?", а потом "прошел ли месяц между 31 января и 28 февраля?".
Поэтому я и привел помимо кода описание того, как он работает, чтобы каждый мог оценить подходит он под его конкретные нужды или нет.
Именно так я понял потребность автора темы, исходя из приведенного примера. Возможно неправильно, но и четкого определения "Полный месяц" не приведено.
Спросите у рядового пользователя "прошел ли месяц между 30 января и 28 февраля?", а потом "прошел ли месяц между 31 января и 28 февраля?".
Поэтому я и привел помимо кода описание того, как он работает, чтобы каждый мог оценить подходит он под его конкретные нужды или нет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот