Версия для печати темы (https://pro1c.org.ua/index.php?s=0e3dc14f0e2726c1278e18e4adedd635&showtopic=24916)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не понятное с РАЗНОСТЬДАТ()

Автор: kosalex 02.09.15, 10:52

Доброго времени суток! есть запрос который высчитывает разность даст между датами:

ВЫБРАТЬ
    ПростойВагонаСрезПоследних.НомерВагона,
    ПростойВагонаСрезПоследних.ПрибытияВагона,
    ПростойВагонаСрезПоследних.ВозвратПВст
ПОМЕСТИТЬ ВТ_РСПростой
ИЗ
    РегистрСведений.ПростойВагона.СрезПоследних(&Период, ) КАК ПростойВагонаСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_РСПростой.НомерВагона,
    ВТ_РСПростой.ПрибытияВагона,
    ВТ_РСПростой.ВозвратПВстКраматорск КАК СдачаНаСтКраматорск,
    ВЫБОР
        КОГДА ВТ_РСПростой.ПрибытияВагона <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                И ВТ_РСПростой.ВозвратПВстКраматорск <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА РАЗНОСТЬДАТ(ВТ_РСПростой.ПрибытияВагона, ВТ_РСПростой.ВозвратПВст, ЧАС)
        ИНАЧЕ ВЫБОР
                КОГДА ВТ_РСПростой.ПрибытияВагона <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        И ВТ_РСПростой.ВозвратПВст= ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                    ТОГДА РАЗНОСТЬДАТ(ВТ_РСПростой.ПрибытияВагона, &Период, ЧАС)
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК ВсегоЧасовПростоя,
    ВЫБОР
        КОГДА ВТ_РСПростой.ПрибытияВагона <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                И ВТ_РСПростой.ВозвратПВст <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
            ТОГДА РАЗНОСТЬДАТ(ВТ_РСПростой.ПрибытияВагона, ВТ_РСПростой.ВозвратПВст, СЕКУНДА)
        ИНАЧЕ ВЫБОР
                КОГДА ВТ_РСПростой.ПрибытияВагона <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                        И ВТ_РСПростой.ВозвратПВст = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                    ТОГДА РАЗНОСТЬДАТ(ВТ_РСПростой.ПрибытияВагона, &Период, СЕКУНДА)
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК ВсегоСекундПростоя,
    "" КАК ВремяПростоя
ИЗ
    ВТ_РСПростой КАК ВТ_РСПростой


Вот что получаю в отчете:




В разных моментах по разному округляет, то в большую то в меньшую сторону. Как вообще работает эта РАЗНОСТЬДАТ()?

Автор: kosalex 02.09.15, 12:33

Вот функция которая разбивает секунды на время

Функция ПолучитьВремя(Секунды)  Экспорт;
    Часов=Цел(Секунды/3600);
    СекОстМин= Секунды%3600;    
    Минут=Цел(СекОстМин/60);
    Сек=СекОстМин%60;
    
    Попытка
        Если Число(Часов)<10 Тогда
            Часов="0"+СокрЛП(Часов);
        Иначе
            Часов=СокрЛП(Часов);
        КонецЕсли;
        
        Если Число(Минут)<10 Тогда
            Минут="0"+СокрЛП(Минут);    
        Иначе
            Минут=СокрЛП(Минут);
        КонецЕсли;
        
        Если Число(Сек)<10 Тогда
            Сек="0"+СокрЛП(Сек);    
        Иначе
            Сек=СокрЛП(Сек);
        КонецЕсли;
        
        Время = Часов + ":" + Минут + ":" + Сек;
        Возврат  Время;
    Исключение
     Сообщить(ИнформацияОбОшибке().Описание,СтатусСообщения.Важное);
    Возврат Неопределено;    
    КонецПопытки;
КонецФункции

Автор: TipsyKID 02.09.15, 12:44

http://pro1c.org.ua/redirect.php?http://Особенности%20функции%20языка%20запросов%20РАЗНОСТЬДАТ

Цитата
Третий параметр содержит единицу измерения, в которой необходимо получить результат функции. В качестве третьего параметра можно использовать следующие значения: Секунда, Минута, Час, День, Месяц, Квартал, Год. При расчете результата функция игнорирует единицы измерения, которые меньше, чем указанная в данном параметре единица.

Например, если в качестве третьего параметра указать Час, то при расчете результата будут игнорироваться минуты и секунды, присутствующие в первых двух параметрах. Если же в третьем параметре указать Месяц, то игнорироваться будут дни, часы, минуты и секунды.

Автор: kosalex 02.09.15, 12:49

Цитата(TipsyKID @ 02.09.15, 13:44) http://pro1c.org.ua/index.php?act=findpost&pid=102563



Посмотрите пожалуйста на скрин, на строку где часов 70, а рядом в колонке 69:30:00, по идеи(выше сказанной) должно быть 69 или как?

По ссылке не переходит!

Автор: Petre 02.09.15, 12:52

Цитата(kosalex @ 02.09.15, 13:49) *
Посмотрите пожалуйста на скрин, на строку где часов 70, а рядом в колонке 69:30:00, по идеи(выше сказанной) должно быть 69 или как?

13 часов 27 числа минус 15 часов 24 числа = 70 часов разницы.

Автор: kosalex 02.09.15, 13:04

Цитата(Petre @ 02.09.15, 13:52) http://pro1c.org.ua/index.php?act=findpost&pid=102566
13 часов 27 числа минус 15 часов 24 числа = 70 часов разницы.


вроде понял) получается часы с 24 по 27 число = 72, и 15часов - 13 часов = 2 часа, 72-2 = 70 часов.


А функция считает не только часы, она берет все )

Автор: TipsyKID 02.09.15, 13:44

Цитата
Посмотрите пожалуйста на скрин, на строку где часов 70, а рядом в колонке 69:30:00, по идеи(выше сказанной) должно быть 69 или как?


Господин не совсем понимает, что значит "будут игнорироваться минуты и секунды" или он не знает как отнимать числа ?

Автор: kosalex 02.09.15, 13:46

Цитата(TipsyKID @ 02.09.15, 14:44) *
Господин не совсем понимает, что значит "будут игнорироваться минуты и секунды" или он не знает как отнимать числа ?


пост выше говорит об этом?

Автор: andr_andrey 03.09.15, 8:13

Цитата(kosalex @ 02.09.15, 13:49) http://pro1c.org.ua/index.php?act=findpost&pid=102565

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua