Имя: Пароль:
1C
 
Как проверить кратность числа?
0 dmino
 
04.08.10
12:11
Собственно в теме... Вообще проблема такая, необходимо из задаваемой даты вычесть дату документа и сосчитать сколько между ними дней, недель, месяцев или лет...
1 IronDemon
 
04.08.10
12:13
Дата1-Дата2=количество секунд
2 John83
 
04.08.10
12:13
вроде так ДЕНЬ НЕДЕЛЯ МЕСЯЦ
3 aka AMIGO
 
04.08.10
12:13
вычти одно из другого и подели результат на количество секунд в сутках
4 IronDemon
 
04.08.10
12:13
Дальше сам догадаешься?
5 Ненавижу 1С
 
гуру
04.08.10
12:14
чему равна единица измерения месяц в более мелких единицах времени?
6 aka AMIGO
 
04.08.10
12:15
(5) в наносекундах?
7 Ненавижу 1С
 
гуру
04.08.10
12:16
(6) можно просто в секундах, секунда это базовая вроде бы единица измерения времени
8 dmino
 
04.08.10
12:16
(5) вот и я о том же ) в месяце разное количество дней!
вот что пока имею

СрокДней = (ДатаОкончанияДействия - ЭтотОбъект.Дата)/60/60/24;
   
   Если СрокДней < 7 Тогда
       СрокДействия = СрокДней; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.День;
   ИначеЕсли СрокДней>7 и "ДЕЛИТЬСЯ НАЦЕЛО НА 7" Тогда
       СрокДействия = СрокДней; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Неделя;
       
   КонецЕсли;
9 Stepa86
 
04.08.10
12:17
РАЗНОСТЬДАТ поюзать предлагаю
10 Rie
 
04.08.10
12:18
(8) Сначала найди разницу в месяцах (получи годы и месяцы дат, из неё определи, сколько месяцев там будет).
А потом "хвостик" распиши по неделям, дням, часам, минутам и т.д.
11 butterbean
 
04.08.10
12:18
(8) интересное условие "ДЕЛИТЬСЯ НАЦЕЛО НА 7"
12 Ненавижу 1С
 
гуру
04.08.10
12:27
(11) это псевдокод
13 dmino
 
04.08.10
12:36
(11) это мысли по поводу реализации :) если нацело, то есть недели.... А функцию разность дат почему то найти не могу...
14 butterbean
 
04.08.10
12:37
(13) она в запросе
15 Kashemir
 
04.08.10
12:54
(11) интересное условие "ДЕЛИТЬСЯ НАЦЕЛО НА 7"
=

Если СрокДней % 7 = 0 Тогда
16 Kashemir
 
04.08.10
12:59
ВЫБРАТЬ
   РАЗНОСТЬДАТ(&ОтДаты, &ДоДаты, ДЕНЬ) КАК Дней,
   РАЗНОСТЬДАТ(&ОтДаты, &ДоДаты, МЕСЯЦ) КАК Месяцев,
   РАЗНОСТЬДАТ(&ОтДаты, &ДоДаты, КВАРТАЛ) КАК Кварталов,
   РАЗНОСТЬДАТ(&ОтДаты, &ДоДаты, ГОД) КАК Лет
17 dmino
 
04.08.10
13:01
РАЗНОСТЬДАТ врет ))) если задать даты от 04/08/2010 до 01/09/2010 Говорит что месяц ) так что не подходит...
(15) Спасибо то что нужно! )
18 Kashemir
 
04.08.10
13:02
(17) Почему врет ... 09 месяц - 08 месяц = 1
19 dmino
 
04.08.10
13:06
Ну он ведь не полный...
20 Kashemir
 
04.08.10
13:06
А что такое полный месяц ? 28 дней ? 29 ? 30 ? 31 ?
21 dmino
 
04.08.10
13:07
Полный месяц это 4.09 - 4.08...
22 Rie
 
04.08.10
13:12
(21) У тебя есть Год1 и Год2 - годы дат, есть Месяц1 и Месяц2 - месяцы дат, есть День1 и День2 - дни месяца дат.
ЧислоМесяцевМежду = (Год2-Год1)*12+(Месяц2-Месяц1)-?(День2<День1,1,0);
23 dmino
 
04.08.10
13:30
Нужно выделить только целое... В общем если вдруг кому-нибудь пригодиться такой бред))) вот
   
СрокДней = (ДатаОкончанияДействия - НачалоДня(ЭтотОбъект.Дата))/60/60/24;
   
   Если Год(ДатаОкончанияДействия)<>Год(ЭтотОбъект.Дата) Тогда
       //Если месяц и день совпали - то раное количество лет
       Если Месяц(ЭтотОбъект.Дата)=Месяц(ДатаОкончанияДействия) и День(ЭтотОбъект.Дата)=День(ДатаОкончанияДействия) Тогда
           СрокДействия = Год(ДатаОкончанияДействия)-Год(ЭтотОбъект.Дата);
           ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Год;
       //Если совпал только день - то ровное количество месяцев>12    
       Иначе
           Если Месяц(ЭтотОбъект.Дата)<>Месяц(ДатаОкончанияДействия) и День(ЭтотОбъект.Дата)=День(ДатаОкончанияДействия) Тогда
               СрокДействия = Месяц(ДатаОкончанияДействия)-Месяц(ЭтотОбъект.Дата)+12;
               ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Месяц;
           //Если День не равен проверяем кратность 7, если да то недель, > 12 месяце
           ИначеЕсли СрокДней % 7 = 0 Тогда
               СрокДействия = СрокДней / 7; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Неделя;
           //Если и тут нет, то дни...
           Иначе
               СрокДействия = СрокДней; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.День;
           КонецЕсли//Конец проверки кратности на месяц
       КонецЕсли//Конец проверки кратности на год
   //Если год тот же    
   Иначе
       //Если совпал только день - то равное количество месяцев<12
       Если Месяц(ЭтотОбъект.Дата)<>Месяц(ДатаОкончанияДействия) и День(ЭтотОбъект.Дата)=День(ДатаОкончанияДействия) Тогда
           СрокДействия = Месяц(ДатаОкончанияДействия)-Месяц(ЭтотОбъект.Дата);
           ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Месяц;
       //Если День не равен проверяем кратность 7, если да то недель < 12 месяце    
       ИначеЕсли СрокДней % 7 = 0 Тогда
           СрокДействия = СрокДней / 7; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.Неделя;
       //Если и тут нет, то дни...    
       Иначе
           СрокДействия = СрокДней; ЕдиницаИзмеренияСрокаДействия = Перечисления.ЕдиницыИзмеренияСрокаДействия.День;
       КонецЕсли;
   КонецЕсли;


Только ОБЯЗАТЕЛЬНО проверить везде ли при вычислении я поставил начало дня )
24 Kashemir
 
04.08.10
13:52
(21) С таким подходом 31.08 - 30.09 для тебя будет не полным месяцем
25 dmino
 
04.08.10
13:58
:(((( мляяяяяяяяя
26 ASU_Diamond
 
04.08.10
14:02
количество месяцев:
КолвоМесяцев=0;
Пока ДобавитьМесяц(НачДата,КолвоМесяцев)<=Кондата Цикл
   КолвоМесяцев=КолвоМесяцев+1;
КонецЦикла;
27 ASU_Diamond
 
04.08.10
14:04
Пока ДобавитьМесяц(НачДата,КолвоМесяцев+1)<=Кондата Цикл
28 dmino
 
04.08.10
14:09
(26) спасибо, и + условие...

КолвоМесяцев=0;
Пока ДобавитьМесяц(НачДата,КолвоМесяцев)=Кондата Цикл
   КолвоМесяцев=КолвоМесяцев+1;
   Если НачДата>КонДата Тогда Прервать; КонецЕсли;
КонецЦикла;

Как то так, чтобы узнать ровное ли количество месяцев... А вообще слишком уж заморочено получилось
29 ASU_Diamond
 
04.08.10
14:11
(28)
Пока ДобавитьМесяц(НачДата,КолвоМесяцев)=Кондата Цикл
не верно, ибо зайдет только тогда когда начДата=КонДата