|   |   | 
| 
 | как можно получить разность 2х дат? | ☑ | ||
|---|---|---|---|---|
| 0
    
        LivingStar 07.02.12✎ 08:05 | 
        есть 2 даты:
  Формат(Рез.ДатаЗаказа, "ДФ=dd.MM.yyyy") Формат(Рез.ДатаППВход, "ДФ=dd.MM.yyyy") как между ними получить разность в днях? Формат(Рез.ДатаЗаказа, "ДФ=dd.MM.yyyy") - Формат(Рез.ДатаППВход, "ДФ=dd.MM.yyyy") = ? | |||
| 1
    
        ZanderZ 07.02.12✎ 08:06 | 
        (Дата1 - Дата2) /86400     | |||
| 2
    
        napagokc 07.02.12✎ 08:09 | 
        тут уже стописяттыщраз этот вопрос обмусоливался так-то     | |||
| 3
    
        vde69 07.02.12✎ 08:11 | 
        запросом и там РазностьДат()     | |||
| 4
    
        DrShad 07.02.12✎ 08:11 | 
        если прямо в запросе то ты не поверишь РазностьДат()     | |||
| 5
    
        DrShad 07.02.12✎ 08:12 | 
        ТС уже почти 7 лет на форуме, а до сих пор ни справку ни СП не осилил :)     | |||
| 6
    
        D_Pavel 07.02.12✎ 08:13 | 
        Функция РазностьДат(Дата1,Дата2,вхТип="День") Экспорт
  Запрос=Новый Запрос(" | SELECT РазностьДат(&Дата1,&Дата2,"+вхТип+") AS ВозвращаемаяДата |"); Запрос.УстановитьПараметр("Дата1",Дата1); Запрос.УстановитьПараметр("Дата2",Дата2); Выб=Запрос.Выполнить().Выбрать(); Выб.Следующий(); Возврат -Выб.ВозвращаемаяДата; КонецФункции | |||
| 7
    
        LivingStar 07.02.12✎ 08:13 | 
        (1) спасибо!     | |||
| 8
    
        LivingStar 07.02.12✎ 08:14 | 
        (6) спасибо!     | |||
| 9
    
        Luhtas 07.02.12✎ 08:14 | 
        (6) ООо-оо! Супер способ!     | |||
| 10
    
        D_Pavel 07.02.12✎ 08:15 | 
        всегда рад помочь     | |||
| 11
    
        SeraFim 07.02.12✎ 08:15 | 
        (6) мсье знает толк в извращениях...     | |||
| 12
    
        D_Pavel 07.02.12✎ 08:18 | 
        (11) Ты щас хрень написал, показывая свою глупость. Потому что это не извращение, а способ который используют опытные одинесники.     | |||
| 13
    
        ZanderZ 07.02.12✎ 08:20 | 
        (12) видимо сильно опытные раз для того что бы узнать разность дать поднимают объект запрос и подтягивают сервер - особенно в тонком клиенте актуально...     | |||
| 14
    
        DrShad 07.02.12✎ 08:20 | 
        (12) а я то и не знал!     | |||
| 15
    
        DrShad 07.02.12✎ 08:21 | 
        (12) чем то что в (6) лучше чем то что в (1)     | |||
| 16
    
        D_Pavel 07.02.12✎ 08:22 | 
        (13) И в чем твоя проблема? У меня всё работает.     | |||
| 17
    
        ZanderZ 07.02.12✎ 08:22 | 
        (16) молодец!     | |||
| 18
    
        Повелитель 07.02.12✎ 08:23 | 
        (12) 
  У вас в конторе платят за результат или за количество исходного текста? Это бы многое объяснило )) | |||
| 19
    
        andrewks 07.02.12✎ 08:23 | 
        эй, хватит спорить, горячие финские парни!     | |||
| 20
    
        D_Pavel 07.02.12✎ 08:24 | 
        (15) Это вопрос? Ничем не лучше, кроме того что в (1) возвращает не целое число. Можно использовать любой вариант, какой больше нравится. Я, например, (1) очень часто использую.     | |||
| 21
    
        DrShad 07.02.12✎ 08:25 | 
        (16) можно и на 1000 строк расписать и тоже будет работать     | |||
| 22
    
        D_Pavel 07.02.12✎ 08:25 | 
        (18) Текста там где нужно получается не так уж и много:
  Результат = РазностьДат(Дата1,Дата2); | |||
| 23
    
        DrShad 07.02.12✎ 08:26 | 
        (22) тебе в (13) уже расписали что при этом происходит     | |||
| 24
    
        Повелитель 07.02.12✎ 08:26 | 
        (22) Не ну красивый метод, я не спорю, просто необычный     | |||
| 25
    
        D_Pavel 07.02.12✎ 08:27 | 
        (18) благо сейчас терабайтные винчестеры позволяют записать несколько лишних байт без заметного вреда.     | |||
| 26
    
        D_Pavel 07.02.12✎ 08:28 | 
        (23) Ага, расписали, сам вижу что ничего плохого. К чему ты это?     | |||
| 27
    
        andrewks 07.02.12✎ 08:29 | 
        (20) "кроме того что в (1) возвращает не целое число" сфигаль?     | |||
| 28
    
        SeraFim 07.02.12✎ 08:30 | 
        (12) вообще, всё зависит от контекста. Если нужно единоразово вычислить, то лучше (1) (с небольшим изменениев в виде НачалоДня())
  Если нужно обработать большие объемы, то РазностьДат(&Дата1,&Дата2,День) нужно писать непосредственно в запросе. А так - посмотрел бы я на тебя, если б ты крутил (6) в запросе. Так что смысла от данной функции не вижу. | |||
| 29
    
        D_Pavel 07.02.12✎ 08:30 | 
        (27) бывает.     | |||
| 30
    
        SeraFim 07.02.12✎ 08:31 | 
        (27) зависит от того, что в датах. Если там "Дата и Время", то вполне может     | |||
| 31
    
        andrewks 07.02.12✎ 08:32 | 
        (29)(30) пример?     | |||
| 32
    
        ASU_Diamond 07.02.12✎ 08:32 | 
        а внимательно вопрос читали?
  интересно как ТС собирается получить разность строк в днях? | |||
| 33
    
        D_Pavel 07.02.12✎ 08:33 | 
        (28) >>А так - посмотрел бы я на тебя, если б ты крутил (6) в запросе. 
  Она и так в запросе крутится. Там такая функция изначально есть, "с завода". | |||
| 34
    
        SeraFim 07.02.12✎ 08:34 | 
        (33) пардон, опечатался.
  (28) читать так: "посмотрел бы я на тебя, если б ты крутил (6) в цикле." | |||
| 35
    
        D_Pavel 07.02.12✎ 08:35 | 
        (32) Там просто нужно отменить перевод в строку, и работать с датами.     | |||
| 36
    
        D_Pavel 07.02.12✎ 08:36 | 
        (34) Я бы так не делал. В циклах обычно разбирается результат запроса, а в запросе функция РазностьДат и так есть.     | |||
| 37
    
        andrewks 07.02.12✎ 08:39 | 
        +(31)ну что, пример будет?     | |||
| 38
    
        SeraFim 07.02.12✎ 08:40 | 
        (37) пожалуйста:
  Дата1 = '2012-02-04 09:39:41'; Дата2 = '2012-02-02 00:00:00'; Сообщить((Дата1 - Дата2)/86400); //2,40255787037037037037037037 Сообщить((НачалоДня(Дата1) - НачалоДня(Дата2))/86400); //2 | |||
| 39
    
        D_Pavel 07.02.12✎ 08:40 | 
        (21) Это просто другой способ, довольно коротко написанный, а не увеличенный по размеру первый способ.     | |||
| 40
    
        LivingStar 07.02.12✎ 08:41 | 
        а вот интересный момент!!!
  Дата1= 19.10.2011 0:00:00 Дата2= 17.10.2011 23:59:59 в резкльтате получается: (Дата1 - Дата2)/86400 = 1,000011574074074074074074074 в этом случае просто брать целую часть? или просто брать её всегда???! | |||
| 41
    
        andrewks 07.02.12✎ 08:43 | 
        (38) а, так вы про _результат_ в днях? 
  а я-то думал... :))) ну, функции округления ещё никто не отменял | |||
| 42
    
        LivingStar 07.02.12✎ 08:43 | 
        (40+)  на начало дня то есть нужно брать просто     | |||
| 43
    
        andrewks 07.02.12✎ 08:48 | 
        (42) как тебе надо, так и бери. мы же не знаем твоей задачи. иногда и в дробных днях считать надо     | |||
| 44
    
        LivingStar 07.02.12✎ 09:08 | 
        кажется в этом методе есть проблема (Дата1 - Дата2) /86400
  к примеру Дата1= 31.10.2011 0:00:00 Дата2= 28.10.2011 0:00:00 то результат будет 3, а нужно вообще ничего а почему то у меня РазностьДат() вообще процедура или функция с указанным именем не определена | |||
| 45
    
        LivingStar 07.02.12✎ 09:09 | 
        (44+) или с этим методом все правильно, он просто возвратил положительное значение (Дата1 - Дата2) /86400     | |||
| 46
    
        andrewks 07.02.12✎ 09:18 | 
        (44) "то результат будет 3, а нужно вообще ничего" О_о     | |||
| 47
    
        Aprobator 07.02.12✎ 09:26 | 
        до чего же некоторые люди не любят признавать свою неправоту.     | |||
| 48
    
        Ненавижу 1С гуру 07.02.12✎ 09:27 | 
        (44) почему Ничего? и кстати, "Ничего" такого нет в 1С еще пока, вот есть Неопределено и NULL     | |||
| 49
    
        andrewks 07.02.12✎ 09:28 | 
        (48) да, Nothing очень нам не хватает...     | |||
| 50
    
        zelebobi4 07.02.12✎ 09:29 | 
        (44) А почему "ничего"??     | |||
| 51
    
        LivingStar 07.02.12✎ 09:34 | 
        (44) да просто мне нужно было в этом случае ничего не выводить в печатную форму
  метод правильно работает!!!! возвратил положительное число! Скажите а почему у меня не работает функция РазностьДат() ? | |||
| 52
    
        LivingStar 07.02.12✎ 09:34 | 
        (51) то (50)     | |||
| 53
    
        Новиков 07.02.12✎ 09:52 | 
        ...Велосипеды...велосипеды...
  ОбщегоНазначения.РазобратьРазностьДат - ЗУП БухгалтерскийУчет.РазностьДатВДнях - БП ...и так далее и так далее и так далее... | |||
| 54
    
        vmv 07.02.12✎ 09:59 | 
        53. чушь, там только в днях - это просто, ты попробуй со временем также делать, причем не разово, а например использовать механизм для постороения периодических технологических периодов.
  В производстве технологические периоды физической продолжительностью более суток, например смена начало 8:00 текущего дня и 8:00 часов следующего дня используется часто. Причем в этом технологическом периоде нужно снимать показания с приборов: по графику каждый час, каждые полчаса, каждые 10 минут. И таких графиков может быть произвольное количество. Параметры согласно графику пишуться в регистр сведений на датуиввремя снятия показаний так что ваща буха маягко говоря сосет в этой задаче | |||
| 55
    
        Stim 07.02.12✎ 10:00 | 
        (1) неверно. правильнее писать
  (Дата1 - Дата2) /(60*60*24) | |||
| 56
    
        Новиков 07.02.12✎ 10:04 | 
        (54)  читаю в (0): как можно получить разность 2х дат?. 
  Привожу примеры. Ты пишешь: "там только в днях " Вопрос к тебе. Читаем вопрос темы в (1)? как между ними (датами) получить разность в днях?. Ты пишешь: там только в днях". Ты в сознании? Причем тут кто у кого сосет? Ты читать умеешь? Или 22 см не вмещается в ширинке? | |||
| 57
    
        vmv 07.02.12✎ 10:08 | 
        (56) дата в себе несет и время с физической точки зрения, рассмотрение ее только в днях - упрощение для тьоток     | |||
| 58
    
        vmv 07.02.12✎ 10:10 | 
        да вечно в типовых понапихают кастрированые методы, ведь получить полную разность дат со временем вполне реально, не скажу как - сами думайте)     | |||
| 59
    
        LivingStar 21.02.12✎ 10:46 | 
        то что в (55) выдавало не тот результат, не зная как это применить, или вывести правильнее, использовал функцию типовой конфигурации УПП: 
  ОбщегоНазначения.РазобратьРазностьДат(НачалоДня(Рез.СрокПлатежа), НачалоДня(ОтборДатаКон), Лет, Месяцев, Дней); выдала она корректный результат.... | |||
| 60
    
        Ненавижу 1С гуру 21.02.12✎ 10:56 | 
        (59) не прошло и месяца     | |||
| 61
    
        LivingStar 21.02.12✎ 11:01 | 
        (60) блин раз выдала второй раз не выдает уже ((((     | |||
| 62
    
        Ненавижу 1С гуру 21.02.12✎ 11:02 | 
        (61) гыгы     | |||
| 63
    
        НЕА123 21.02.12✎ 11:02 | 
        (61)
  это Ненавижу 1С сглазил. | |||
| 64
    
        LivingStar 21.02.12✎ 11:03 | 
        31.01.2011
  31.12.2011 ОбщегоНазначения.РазобратьРазностьДат(НачалоДня(Рез.СрокПлатежа), НачалоДня(ОтборДатаКон), Лет, Месяцев, Дней); Дней = 0 (((( (НачалоДня(Рез.СрокПлатежа) - НачалоДня(ОтборДатаКон)) /(60*60*24) показывает -334 | |||
| 65
    
        LivingStar 21.02.12✎ 11:03 | 
        или что то я не то делаю?     | |||
| 66
    
        LivingStar 21.02.12✎ 11:04 | 
        да не все верно 
  нужно расчитать просрочку платеда вторая дата больше первой !!! | |||
| 67
    
        НЕА123 21.02.12✎ 11:04 | 
        (61)
  вообще-то что ты хотел? сейчас Масленица, вот "блин" и, как положено, получился. | |||
| 68
    
        LivingStar 21.02.12✎ 11:05 | 
        ой, посмотрел код процедуры, тама передавать нужно их видимо в обратном порядке     | |||
| 69
    
        LivingStar 21.02.12✎ 11:08 | 
        вообще нужно вроде передавать именно в том в котором передаю....     | |||
| 70
    
        Aprobator 21.02.12✎ 11:09 | 
        (65) ты просто не тем занимаешься.     | |||
| 71
    
        Reset 21.02.12✎ 11:10 | 
        Хоспаде...     | |||
| 72
    
        LivingStar 21.02.12✎ 11:16 | 
        (70) в смысле чего не тем???     | |||
| 73
    
        hhhh 21.02.12✎ 11:42 | 
        (72) ну если отнять 31.01.2011 - 31.12.2011 должно получиться -334. Я проверил. Правильно у тебя считает. Непонятно, почему переживаешь.     | |||
| 74
    
        LivingStar 21.02.12✎ 11:43 | 
        (73) ясно типовая функция просто не считает такие даты, а эта считает...     | |||
| 75
    
        Fish гуру 21.02.12✎ 11:46 | 
        (74) Типовая тоже считает, если код посмотреть :))))     | |||
| 76
    
        LivingStar 21.02.12✎ 11:50 | 
        (75) она вообще пропускает это так как первая дата меньше второй, процедура не выполняется, а если поменять даты то теряется суть     | |||
| 77
    
        Fish гуру 21.02.12✎ 11:52 | 
        (76) Суть чего поменяется? Если ты из меньшего числа вычтешь бОльшее, то всегда получишь отрицательное число. Или ты математику в школе не учил? :)))     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |