Имя: Пароль:
1C
 
Как из даты вычесть Год/Месяц/Дни
0 Asdef
 
26.10.09
07:03
Товарищи, поскажите примерный алоритм сабжа.

Пример: 26.10.2009 вычесть 1 г. 8 м. 15 д. равно= 12.02.2008

Нужно реализовать на 1С или VBA в Excel )
1 shadow_sw
 
26.10.09
07:04
берешь дату от которой надо отнять, потом 86400*кол-во отнимаемых дней=нужная дата
2 shadow_sw
 
26.10.09
07:04
(1) это про 1с
3 skunk
 
26.10.09
07:07
считаешь количество месяцев ... отнимаешь штатное функцией месяца... и далее отнимаешь количество оставшихся дней умноженное 86400
4 Stim
 
26.10.09
07:10
(0)посмотри в типовой Бухии расчет фактического срока использования ОС. Просветлись:)
5 Asdef
 
26.10.09
07:13
(1) (3) сорри, но не совсем понял, можно чуток поподробнее ?
и чего делать с февралем, у него ж и 28 и 29 дней может быть
6 Asdef
 
26.10.09
07:13
(4) а куда конкретно лезть? название процедуры?
7 Stim
 
26.10.09
07:16
(6) нету под рукой компа, я с телефона сижу. Ищи через форму элемента справочника ОС на закладке Амортизация
8 Rie
 
26.10.09
07:18
(5) ДобавитьМесяц учитывает эти нюансы.
9 Кураж
 
26.10.09
07:18
Налетели дятлы )
Гуру делают через "ВЫБРАТЬ РАЗНОСТЬДАТ(&Дата2,&Дата1,ДЕНЬ)"
10 Asdef
 
26.10.09
07:19
(7) не нашел ничего...
11 Asdef
 
26.10.09
07:20
короче, народ, код на икселе такой:

temp = Cells(2, 2)
td = CDate(temp)
vich = Cells(3, 2)
s = 0
tv = Mid(vich, 1, 2)
s = s + (Val(tv) * 365)
tv = Mid(vich, 4, 2)
s = s + (Val(tv) * 30)
tv = Mid(vich, 7, 2)
s = s + Val(tv)
temp1 = td - s
Cells(4, 2) = Format(temp1, "dd.mm.yyyy")

поправьте плиз, а то в итоге выводит 14.02.2008
12 Asdef
 
26.10.09
07:22
(9) на моем примере как код писать та юзая эту функцию?
13 reg-aleks
 
26.10.09
07:22
нафиг год... Вычти функцией:
ПолеченнаяДАта = ДобавитьМесяц(ТвояДАта,-12);
   - вычтет 12 месяцев из твоей даты.. затем из полученного вычти дни: ПолеченнаяДата = ПолеченнаяДАта - 60*24*24 * КоличествоДней!
14 Rie
 
26.10.09
07:24
(13) только 60*60*24
15 Asdef
 
26.10.09
07:25
(13)(14) 60*24(60)*24 - это что?

куда ваще 1 г. 8 м. 15 д. пихать то?
16 reg-aleks
 
26.10.09
07:25
(14) только 60*60*24 вычтет 1 день... а умножив на количество дней можно минусовать несколько дней
17 reg-aleks
 
26.10.09
07:25
(14) упс. :) невнимательно :)))) да.. 60*60*24
18 Rie
 
26.10.09
07:26
(11) В месяце не обязательно 30 дней, как было верно замечено ранее.
Почему ты не хочешь работать со значениями типа Date?
19 Невский Александр
 
26.10.09
07:27
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата,ДЕНЬ), ГОД, &Г), МЕСЯЦ, &М), ДЕНЬ, &Д) КАК РассчитаннаяДата
20 Asdef
 
26.10.09
07:28
(18) в 1С ?
21 reg-aleks
 
26.10.09
07:28
1 г. 8 м. 15 д.
КоличествоЛет = 1;
КоличествоМЕсяцев = 8;
КоличествоДней=15;

ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*КоличествоЛет*12+КоличествоМесяцев);

ТекущаяДата = ТекущаяДата-60*60*24*КоличествоДней
22 Rie
 
26.10.09
07:29
(20) В 1С есть ДобавитьМесяц.
В VBA есть DateAdd.
Выбирай, что больше нравится.
23 Rie
 
26.10.09
07:30
+(22) А значения типа Date - они и в 1С есть.
24 reg-aleks
 
26.10.09
07:33
Скобки забыл!

ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев));
25 Asdef
 
26.10.09
07:35
(24) {Форма.Форма(8)}: Преобразование значения к типу Дата не может быть выполнено
   ТекущаяДата = ДобавитьМесяц(ТЕкущаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев));
26 Asdef
 
26.10.09
07:36
(23) а в икселе где месяц добавлять?
27 Rie
 
26.10.09
07:36
(26) Там в параметрах DateAdd указывается, что добавляется - месяц, квартал и т.д.
28 Asdef
 
26.10.09
07:37
(27) а, попробую )
29 Rie
 
26.10.09
07:37
(25) ТекущаяДата - какое значение имела? Если строка - соответствовала ли представлению даты в 1С? Если нет - преобразуй.
30 Asdef
 
26.10.09
07:37
осталося с 1С разобраться
31 reg-aleks
 
26.10.09
07:37
(25) КоличествоЛет и КоличествоМесяцев у тебя Числовые??

ПОпробуй переименовать переменные.

ДатаКоторуюНадоПолучить = ДобавитьМесяц(ИсходнаяДата,(-1)*(КоличествоЛет*12+КоличествоМесяцев));
32 Asdef
 
26.10.09
07:39
(31) так, добавил, все пашет, но итог не верный: 11.02.2008 0:00:00
33 Asdef
 
26.10.09
07:40
... или верный, ваще-та я за основу брал данные другой программы

или же тут все дело в часах...
34 reg-aleks
 
26.10.09
07:41
(33) насколько разница?
35 reg-aleks
 
26.10.09
07:42
ИсходнаяДата = ИсходнаяДата-60*60*24*КоличествоДней
36 reg-aleks
 
26.10.09
07:43
т.е. ДатаКоторуюНадоПолучить = ДатаКоторуюНадоПолучить-60*60*24*КоличествоДней

p.s. Блин...пообедал и ваще засыпаю и невнимательный))
37 Asdef
 
26.10.09
07:43
(35) ладно, спасибо ;)