Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не понятное с РАЗНОСТЬДАТ()
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Доброго времени суток! есть запрос который высчитывает разность даст между датами:
ВЫБРАТЬ
    ПростойВагонаСрезПоследних.НомерВагона,
    ПростойВагонаСрезПоследних.ПрибытияВагона,
    ПростойВагонаСрезПоследних.ВозвратПВст
ПОМЕСТИТЬ ВТ_РСПростой
ИЗ
    РегистрСведений.ПростойВагона.СрезПоследних(&Период, ) КАК ПростойВагонаСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_РСПростой.НомерВагона,
    ВТ_РСПростой.ПрибытияВагона,
    ВТ_РСПростой.ВозвратПВстКраматорск КАК СдачаНаСтКраматорск,
    ВЫБОР
        КОГДА ВТ_РСПростой.ПрибытияВагона <> ДАТАВРЕМЯ(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
Вот функция которая разбивает секунды на время
Функция ПолучитьВремя(Секунды)  Экспорт;
    Часов=Цел(Секунды/3600);
    СекОстМин= Секунды%3600;    
    Минут=Цел(СекОстМин/60);
    Сек=СекОстМин%60;
    
    Попытка
        Если Число(Часов)<10 Тогда
            Часов="0"+СокрЛП(Часов);
        Иначе
            Часов=СокрЛП(Часов);
        КонецЕсли;
        
        Если Число(Минут)<10 Тогда
            Минут="0"+СокрЛП(Минут);    
        Иначе
            Минут=СокрЛП(Минут);
        КонецЕсли;
        
        Если Число(Сек)<10 Тогда
            Сек="0"+СокрЛП(Сек);    
        Иначе
            Сек=СокрЛП(Сек);
        КонецЕсли;
        
        Время = Часов + ":" + Минут + ":" + Сек;
        Возврат  Время;
    Исключение
     Сообщить(ИнформацияОбОшибке().Описание,СтатусСообщения.Важное);
    Возврат Неопределено;    
    КонецПопытки;
КонецФункции
TipsyKID
необходимо зарегистрироваться для просмотра ссылки
Цитата
Третий параметр содержит единицу измерения, в которой необходимо получить результат функции. В качестве третьего параметра можно использовать следующие значения: Секунда, Минута, Час, День, Месяц, Квартал, Год. При расчете результата функция игнорирует единицы измерения, которые меньше, чем указанная в данном параметре единица.

Например, если в качестве третьего параметра указать Час, то при расчете результата будут игнорироваться минуты и секунды, присутствующие в первых двух параметрах. Если же в третьем параметре указать Месяц, то игнорироваться будут дни, часы, минуты и секунды.
kosalex
Цитата(TipsyKID @ 02.09.15, 13:44) необходимо зарегистрироваться для просмотра ссылки
необходимо зарегистрироваться для просмотра ссылки



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

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

13 часов 27 числа минус 15 часов 24 числа = 70 часов разницы.
kosalex
Цитата(Petre @ 02.09.15, 13:52) необходимо зарегистрироваться для просмотра ссылки
13 часов 27 числа минус 15 часов 24 числа = 70 часов разницы.

Первая колонка с датой и временем это ПРИБЫТИЕ, а вторая это ОТПРАВКА, нужно от времени ОТПРАКА отнять время ПРИБЫТИЯ, получить часы простоя.

Часы считаю РАЗНОСТЬДАТ(ПРИБЫТИЕ,ОТПРАВКА,ЧАС)
Рядом с колонкой часов расположена колонка которая высчитывается вот так РАЗНОСТЬДАТ(ПРИБЫТИЕ,ОТПРАВКА,СЕКУНДА), а потом эти секунды передаются в функцию которая написана выше.

Цитата(Petre @ 02.09.15, 13:52) необходимо зарегистрироваться для просмотра ссылки
13 часов 27 числа минус 15 часов 24 числа = 70 часов разницы.


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


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


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


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

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

необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.