Имя: Пароль:
1C
 
ДобавитьМесяц(ДобавитьМесяц(Дата(2008,01,31),1),-1)
0 Serzhio
 
01.08.08
17:25
У вас что получается? Или просто нужно поставить последний релиз? (у меня 8.1.9.57)
1 butterbean
 
01.08.08
17:26
у меня 8.1.10.50
29.01.2008 0:00:00
2 Serzhio
 
01.08.08
17:29
Это известный баг и я отстал от жизни????
3 NiXeR
 
01.08.08
17:30
А что именно не устраивает? Все логично.
Сначало происходит добавление месяца к 2008.01.31. Т.к. 2008.02.31 нет, дата становится последним числом месяца 2008.02.29.
Второе действие убирает месяц 2008.02.29 - 1 месяц = 2008.01.29
4 1C-Nick
 
01.08.08
17:31
Дело в том что в 2008 году в феврале 29 дней, результат вложенной функции будет 29.02.08 отняв месяц получите 29.01.08
Если надо чтобы был последний день месяца, тогда

КонецМесяца(ДобавитьМесяц(ДобавитьМесяц(Дата(2008,01,31),1),-1))
5 Serzhio
 
01.08.08
17:32
Нда? А я думал если из последней даты месяца мы вычитаем месяц то получаем последнюю дату предыдущего месяца. Для этого и функция. И как оно определяет сколько дней в каком случае прибавлять???
6 1C-Nick
 
01.08.08
17:37
Определяется числом
грубо говря Дата(год, Месяц, Число) - добавить месяц - Дата(Год, Месяц + Дельта, Число) но с проверкой на число
7 Serzhio
 
01.08.08
17:42
ДобавитьМесяц(Дата(2008,04,30),-1)=30 марта
8 Serzhio
 
01.08.08
17:42
т.е. оно тупо отнимает 31 день????
9 Serzhio
 
01.08.08
17:52
Прикол, а я ее оказывается много лет не так понимал.

Когда мы 31 января говорим: "Событие наступит через месяц" - мы имеем в виду 29 февраля, а когда мы 29 февраля говорим: "Событие было месяц назад" - мы имеем в виду 29 января.
10 1C-Nick
 
01.08.08
17:57
Я же говорю, если надо четко конец месяца то уже вручную контроллируй
Например

Если КонецДня(ТекДата) = КонецМесяца(ТекДата) Тогда
  //используем КонецМесяца
  КонецМесяца(ДобавитьМесяц(ДобавитьМесяц(Дата(2008,01,31),1),-1))
Иначе
  //как обычно
  ДобавитьМесяц(ДобавитьМесяц(Дата(2008,01,31),1),-1)
КонецЕсли;

правда наверное надо контроль делать чисел 28 - 31 ...
11 hhhh
 
01.08.08
18:00
(9) сам не знаешь, чего хочешь
12 Serzhio
 
01.08.08
18:07
(11) нет в (9) я написал как оно работает. А я раньше думал что если из последней даты месяца мы вычитаем месяц то получаем последнюю дату предыдущего месяца.
13 hhhh
 
01.08.08
18:14
(12) а если из предпоследней вычесть, то получится предпоследняя?
14 RustamZz
 
01.08.08
20:41
(12)

29->31
28->30
.
.
.
1->3
Закон Брукера: Даже маленькая практика стоит большой теории.