Имя: Пароль:
1C
1С v8
как проставить дату окончания если есть дата начала и количество месяцев??
0 Рауф
 
02.06.14
13:28
есть поле Дата начала и поле количество месяцев нужно чтоб дата окончания проставлялась автоматом в зависимости от количество месяцев.
объясните как это сделать?? за ранние спасибо.
1 Enders
 
02.06.14
13:28
Сложением?
2 Maxus43
 
02.06.14
13:28
добавитьмесяц
3 f_vadim
 
02.06.14
13:35
ДобавитьМесяц отстойная функция. Если дата попадает на конец месяца - пляшет всё куда зря.
4 Maxus43
 
02.06.14
13:39
(3) что?
Если 31 янаваря добавить 1 месяц - то будет 28 февраля, всё правильно
5 f_vadim
 
02.06.14
13:40
(4) а если к 28 февраля прибавить месяц, какое число в марте будет?
6 Maxus43
 
02.06.14
13:43
(5) 28 конечно
7 fisher
 
02.06.14
13:44
(5) Нормально она работает. Понятно и предсказуемо. И есть случаи, когда именно так и требуется. Хочешь приведение к концу месяца - делай его явно.
8 Maxus43
 
02.06.14
13:44
юзай связку с КонецМесяца, если требуется
9 Ислам
 
02.06.14
13:47
(3) да, функция полное отстой. Но пока ничего лучше не придумали, придется пользоваться "ДобавитьМесяц".
10 Ислам
 
02.06.14
13:49
Можно сделать свою функцию, с дополнительным параметром - какой месяц нужно прибавить.
Например:
к "28 февраля" прибавить месяц "март" = "31 марта".
к "28 февраля" прибавить месяц "февраль" = "28 марта".

Хахахаха ))))))
11 f_vadim
 
02.06.14
13:50
(7) Насчёт предсказуемо, я б поспорил. Мне недавно пришлось разгребать код, где программер предположил, что раз конец месяца, значит он будет всегда.

Обвязку - да, приходится рисовать.
12 Maxus43
 
02.06.14
13:51
(11) ну если тот програмер не знает как работает функция - это проблема програмера, а не функции
13 f_vadim
 
02.06.14
13:51
(12) заметь, как она работает - в СП не написано.
14 Maxus43
 
02.06.14
13:53
(13) это настолько очевидно, что даже Кэп отдыхает...
15 Segate
 
02.06.14
13:56
(4) чет нифига не логично, если мы прибавляем календарный месяц, то с 28 февраля + месяц должно быть 30 марта, а если мы прибавляем месяц по количеству дней, то тогда вариант с 31 января и 28 февраля - не логично. я не понимаю логику этой процедуры ))
16 Kassius
 
02.06.14
13:56
На (0) уже ответили ...
А зря, отправить ТС обратно в школу.
"за ранние спасибо."
17 Molinor
 
02.06.14
13:57
Всё логично. Прибавляем именно месяц, а если в получившемся месяце нет такого числа, то отматываем обратно пока не найдём имеющееся число.
18 fisher
 
02.06.14
13:57
(14) Достаточно чуть-чуть включить мозг.

25 февраля - 25 марта
26 февраля - 26 марта
27 февраля - 27 марта
28 февраля - 31 марта

Неужели так логичнее?
19 fisher
 
02.06.14
13:59
Тьфу, (18) было к (15)
20 Segate
 
02.06.14
14:02
(18) ну а 23 января - 23 февраля
24 января - 24 февраля
...
29 января -28 февраля
30 января -28 февраля
31 января -28 февраля


этот агоритм просто в разы логичнее - да?
21 f_vadim
 
02.06.14
14:02
(18) мне чего-то ни так, ни так не нравится.

Кривость, по-моему в том, что +1, а потом -1 и в исходную дату мы не попадаем.
22 fisher
 
02.06.14
14:05
(20) Конечно. Ты передаешь 31 января и просишь добавить календарный месяц. Т.е. требуешь, чтобы дата была февральская. ЕДИНСТВЕННЫЙ нормальный способ это обеспечить для 31 января - выдать 28 февраля.
23 Infsams654
 
02.06.14
14:05
(19) см. табло ДобавитьМесяц(Дата(2012, 2, 29), 1) = 29.03.2012 0:00:00

т.е. из последнего дня предыдущего месяца у которого число дней меньше, чем в следующем без приведения к концу месяца не получить
24 f_vadim
 
02.06.14
14:06
(22) ок, если мы считаем каледарными месяцами, конец месяца должен попадать на конец месяца или нет?
25 fisher
 
02.06.14
14:18
(24) Речь о том, что "конец месяца" - величина плавающая.
А мы ведем речь об алгоритме добавления календарного месяца к дате. В этом случае неизбежно возникает дилемма.
А теперь подумай. Что будет проще. Воткнуть где надо КонецМесяца(), добить когда нужно дней до конца месяца, или анализировать "разрывы" и учитывать возможные "скачки"?
26 f_vadim
 
02.06.14
14:24
(25) ты тоже прав.
хорошо бы параметр добавить - притягивать к концу месяца или нет.
27 fisher
 
02.06.14
14:31
(26) Есть специальная функция, притягивающая к концу месяца.
Зачем путаницу наводить?
28 Segate
 
02.06.14
14:37
(27) да эта функция могла бы с тем же успехом работать по алгоритму текущая дата+Количество дней в следующем месяце. и ее алгоритм не был бы менее кривым ) Так что путаница тут и так есть, а параметр наоборот внятность вносит.
29 Gogger
 
02.06.14
14:38
1. Количество месяцев можно добавить функцией ДобавитьМесяц (Дата, Количество);
2. Поскольку существует ситуация с февралем, желательно для него написать исключение по собственному алгоритму.
3. Для исключения можно выделить из даты день функцией ДеньМесяца(Дата), количество месяцев прибавлять к начальной дате месяца НачалоМесяца(Дата) потом прибавлять нужное количество дней функцией ДобавитьДень(Дата, Количество).
30 Maxus43
 
02.06.14
14:41
(29) исключения для всех месяцев у которых 31 день, а следующий месяц 30 дней.

Лучше всем просто запомнить как она работает, а для особо одарённых - записать в блокнотик