Имя: Пароль:
1C
 
Как вычислить разность дат в днях?
0 svchernova
 
19.03.10
16:54
Есть ли функция вычисления разности дат в днях, аналогичная РазностьДат в язык запросов?
1 asady
 
19.03.10
16:56
(0) есть.
2 ЦыфроГад
 
19.03.10
16:56
// Функции работы с разностью дат
// Получает разность календарных дат указанного вида. В случае ошибки возвращает -1
Функция ПолучитьРазностьДат(рНачДата,рКонДата,рВидРазности="ДЕНЬ") Экспорт
   Если не ЗначениеЗаполнено(рНачДата) или не ЗначениеЗаполнено(рКонДата) Тогда Возврат -1 КонецЕсли;
   Если рНачДата=рКонДата Тогда Возврат 0 КонецЕсли;
   строСтандПер="СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД";
   Если Найти(строСтандПер,рВидРазности)=0 Тогда рВидРазности="ДЕНЬ" КонецЕсли;
   тз="ВЫБРАТЬ РАЗНОСТЬДАТ(&НачДата,&КонДата,"+СокрЛП(рВидРазности)+")+1 КАК ПериодовВремени";
   з=Новый Запрос(тз);
   Если рВидРазности="СЕКУНДА" или рВидРазности="МИНУТА" или рВидРазности="ЧАС" Тогда
       // ставим, как есть, с учётом времени
       Если рНачДата>рКонДата Тогда // всё наоборот
           рПервая=рКонДата; рВторая=рНачДата; коэф=-1;
       Иначе
           рПервая=рНачДата; рВторая=рКонДата; коэф=1;
       КонецЕсли;      
   Иначе
       // ставим от начала дня
       Если рНачДата>рКонДата Тогда // всё наоборот
           рПервая=НачалоДня(рКонДата); рВторая=НачалоДня(рНачДата); коэф=-1;
       Иначе
           рПервая=НачалоДня(рНачДата); рВторая=НачалоДня(рКонДата); коэф=1;
       КонецЕсли;      
   КонецЕсли;
   
   Попытка
       з.УстановитьПараметр("НачДата",рПервая);
       з.УстановитьПараметр("КонДата",рВторая);
       рРезультат=з.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой).Получить(0).ПериодовВремени;
       Если ТипЗнч(рРезультат)<>Тип("Число") Тогда Возврат -1 Иначе Возврат коэф*рРезультат КонецЕсли;
   Исключение
       Возврат -1
   КонецПопытки;
КонецФункции
3 Волшебник
 
19.03.10
16:56
(КонецДня(Дата2)+1 - НачалоДня(Дата1)) / 86400
4 koreav
 
19.03.10
16:57
(2) да, серьезный подход
5 Волшебник
 
19.03.10
16:57
(2) Шедевр маразма.
6 ЦыфроГад
 
19.03.10
16:58
(5) универсальная функция которая возвращает разность в выбранном виде СЕКУНДА МИНУТА ЧАС ДЕНЬ НЕДЕЛЯ ДЕКАДА МЕСЯЦ КВАРТАЛ ГОД
7 butterbean
 
19.03.10
16:58
(6) в запрос загнать можно было и всё....
8 Ненавижу 1С
 
гуру
19.03.10
16:59
(НачалоДня(Дата2)-НачалоДня(Дата1))/86400
9 koreav
 
19.03.10
16:59
(6) индусский код
10 ЦыфроГад
 
19.03.10
17:00
(7) можно, но я когда то давно ее вставил в общие модули и не парюсь
11 Ненавижу 1С
 
гуру
19.03.10
17:00
(2) мало кода
12 aka AMIGO
 
19.03.10
17:01
но работает!! :))
13 svchernova
 
19.03.10
17:01
Всем спасибо :)))))))))))))
14 wPa
 
19.03.10
17:01
(3) Недопонял - на одну и ту же дату вернет 1 - разве нормально?
КонецДня - КонецДня / 86400
15 vde69
 
19.03.10
17:02
а почему никто не спросил как считать как считать неполный день?
16 wPa
 
19.03.10
17:03
(15) 1:10 ) с понедельника по пятницу
17 Ненавижу 1С
 
гуру
19.03.10
17:04
(15) код в (8) аналогичен РазностьДат(Дата1,Дата2,ДЕНЬ) в запросе, как просил автор
18 svchernova
 
19.03.10
17:05
Спасибо :)
19 Ненавижу 1С
 
гуру
19.03.10
17:06
(3) что-то ты не то написал
20 NewNick
 
19.03.10
17:28
(19) логика в (3) видимо в ответе на вопрос - сколько дней товар пролежал на складе если он прибыл в дата1 и убыл в дата2. тады формула в (3) верна )
21 Ненавижу 1С
 
гуру
19.03.10
17:30
(20) ого, какая телепатия
22 svchernova
 
19.03.10
17:31
(2) Код не работет в случае, если Дата1 = 19,03,2010 и Дата2=27,02,2011
23 73
 
19.03.10
17:34
(22) Выбрала самый короткий путь?
24 svchernova
 
19.03.10
17:35
да
25 Нуралиев
 
19.03.10
17:35
(2) Молодой человек, не хотите ли поработать у нас в фирме постановщиком задач? Как раз освободилось место, зарплата достойная.
26 ЦыфроГад
 
19.03.10
17:44
(25) А Вы правда тот самый Нуралиев?
27 Нуралиев
 
19.03.10
17:52
Конечно правда. Иногда переодеваюсь простым одинэсником и хожу по Багда... то есть, тьфу, по форумам.
28 ЦыфроГад
 
19.03.10
17:54
(22) важно что в качестве даты вы передаете дату, а не строку с датой
29 Morphius
 
19.03.10
17:58
30 ЦыфроГад
 
19.03.10
17:58
(27) ну тогда большое спасибо за приглашение, но у меня сейчас большой проект по переводу компании с 7.7 на 8.1
31 Нуралиев
 
19.03.10
18:03
(30) Ну что ж, это Ваш выбор. А впрочем, жаль, очень конструктивно мыслите.
32 AndreYAN
 
19.03.10
18:04
(2) Хорошая функция :), чуток доделать и супер!
33 Hans
 
19.03.10
18:11
(0) Есть такая функция в типовой конфигурации ЗиУП в каком то общем модуле.
34 Ненавижу 1С
 
гуру
22.03.10
06:45
жжете
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.