Есть запрос, который получает график платежей (рис.1) .

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

```1c
    ВЫБОР
    КОГДА Итог_Вт.СпособОплаты = &СпособОплатыДоНачалаОП
    ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Итог_Вт.ПериодЗатрат.ПериодЗатрат, МЕСЯЦ, -1), ДЕНЬ, &СрокОплаты - 1)
    ИНАЧЕ ВЫБОР
    КОГДА Итог_Вт.СпособОплаты = &СпособОплатыСНачалаОП
    ТОГДА ДОБАВИТЬКДАТЕ(Итог_Вт.ПериодЗатрат.ПериодЗатрат, ДЕНЬ, &СрокОплаты - 1)
    ИНАЧЕ ВЫБОР
    КОГДА Итог_Вт.СпособОплаты = &СпособОплатыПослеНачалаОП
    ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Итог_Вт.ПериодЗатрат.ПериодЗатрат, МЕСЯЦ, 1), ДЕНЬ, &СрокОплаты - 1)
    КОНЕЦ
    КОНЕЦ
    КОНЕЦ
```

Данный механизм работает, но в случае, если указать число 30 или 31, то, соответственно, проблемы с февралем, и вместо, например, 29.02.2018 формируется дата 02.03.2018.

Вот как избежать такой момент в запросе?
---
я же написал тебе
 ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ПериодЗатрат, МЕСЯЦ, 1), ДЕНЬ, - 1);

Если у тебя в периоде 1 февраля, то она добавит месяц - получит 1 марта, потом отнимет 1 день, получит 29, или 28 февраля, смотря какой високосный или нет год.

т.е. не с количеством дней нужно заморачиваться, сколько прибавлять...а наоборот, отнимать 1 день, от первого числа следующего месяца.
А с календарем, система сама разберется
---
а в чем проблема то? В феврале 28 дней вы поставили 30. Значит и оплата должна быть через 30 дней, а не 30 числа, а это 02.03.2018.
---
Так а мне нужно получить 29.02.2018 в таком случае. Оплата не каждые 30 дней, а каждого 30го числа каждого месяца.
---
тогда делай, добавить к дате месяц, а потом добавить к дате -1 день. Получишь всегда последний день, месяца, независимо от количества дней в нем
---
30 числа? Так в феврале нет 30 числа, в запрос тогда затычку ставьте, если февраль, то 28, а не 30.
---
вопрос то методологический.
Если вы указываете срок оплаты 31 день, то она как должна считать ? 31 это обозначает сутки, или календарный месяц ? Что это вообще за параметр , откуда он берется ? Период затрат - я так понимаю, всегда первое число месяца так ?
С апрелем такая же проблема будет, там 30 дней, а у вас указано 31..получим 1 мая.
---
Да, действительно. Здесь будут проблемы и с 31м числом. Суть в том, что оплата должна быть, например, каждого 31 числа каждого месяца Тогда получается, с месяцами, где 30 дней, например, взять апрель, при сроке оплаты - 31, дата оплаты 30.04.2018.

И вот как это в запросе написать..
---
я же написал тебе
 ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ПериодЗатрат, МЕСЯЦ, 1), ДЕНЬ, - 1);

Если у тебя в периоде 1 февраля, то она добавит месяц - получит 1 марта, потом отнимет 1 день, получит 29, или 28 февраля, смотря какой високосный или нет год.

т.е. не с количеством дней нужно заморачиваться, сколько прибавлять...а наоборот, отнимать 1 день, от первого числа следующего месяца.
А с календарем, система сама разберется
---
видите как вопрос кардинально поменялся?
50% решения это правильно поставленный вопрос!
1С умеет работать с месяцами и не важно сколько там дней.
Рекомендую также справку чаще читать там про такое пишут. Если подумать для чего!
---
```1c
    ВЫБРАТЬ
    КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ) КАК КонецСледующегоМесяца
```