Как рассчитать количество отработанных часов ?

1. Terabaytus 13.09.21 17:32 Сейчас в теме
Добрый день, не могу сообразить нужно рассчитать количество отработанного времени сотрудника до минут как правило работники начинают смену днём, а заканчивают ночью следующего числа как это учесть в расчётах накидал функцию
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РАЗНОСТЬДАТ(ВремяНачалаРаботы.ВремяНачалаРаботы, ВремяОкончанияРаботы.ВремяОкончанияРаботы, СЕКУНДА) КАК Время
		|ИЗ
		|	РегистрСведений.ВремяНачалаРаботы КАК ВремяНачала,
		|	РегистрСведений.ВремяОкончанияРаботы КАК ВремяОкончанияРаботы
		|ГДЕ 
		|    ВремяНачалаРаботы.Дата = &Дата
		|И 
		|    ВремяОкончанияРаботы.Дата = &Дата";

		Запрос.УстановитьПараметр("Дата", Формат(ТекущаяДата(), "ДЛФ=Д"));

	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		ЧасовВСЕГО = Выборка.Время/3600;
		
	КонецЦикла;
	
	Возврат ЧасовВСЕГО;
Показать

, но она возвращает только часы не всё время и не учитывает дату следующего дня ?
По теме из базы знаний
Найденные решения
2. Lenten 25 13.09.21 17:46 Сейчас в теме
1)Формат(ТекущаяДата(), "ДЛФ=Д") - это строка. у вас в регистре даты - строки?

обычно просто ТекущаяДата()

2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)

     |    ВремяНачалаРаботы.Дата >= &ДатаНачала
        |И 
        |    ВремяОкончанияРаботы.Дата <= &ДатаОкончания";


 Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
 Запрос.УстановитьПараметр("ДатаОкончания", ТекущаяДата() + 24*60*60);

3) поищите в типовой базе это. думаю все эти вопросы уже решены
Terabaytus; +1 Ответить
3. Lenten 25 13.09.21 17:51 Сейчас в теме
но она возвращает только часы

ЧасовВСЕГО = Выборка.Время/3600

МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60
Terabaytus; +1 Ответить
8. Lenten 25 14.09.21 09:28 Сейчас в теме
(5)
о текущедате с полями Дата в РС не дел


еще смотрите чтоб тип сравнения был не = а > или <

иначе запрос будет искать дату 14 09 2021 9:28. т.е слишком точно.
Terabaytus; +1 Ответить
10. Lenten 25 14.09.21 10:03 Сейчас в теме
(9)

МинутВсего = (Выборка.Время- Окр(ЧасовВСЕГО * 3600,0))/60

попробуйте с округлением
Terabaytus; +1 Ответить
11. spacecraft 14.09.21 10:23 Сейчас в теме
(9)
ЧасовВСЕГО = Цел(Выборка.Время/3600);
МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60;
Terabaytus; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Lenten 25 13.09.21 17:46 Сейчас в теме
1)Формат(ТекущаяДата(), "ДЛФ=Д") - это строка. у вас в регистре даты - строки?

обычно просто ТекущаяДата()

2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)

     |    ВремяНачалаРаботы.Дата >= &ДатаНачала
        |И 
        |    ВремяОкончанияРаботы.Дата <= &ДатаОкончания";


 Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
 Запрос.УстановитьПараметр("ДатаОкончания", ТекущаяДата() + 24*60*60);

3) поищите в типовой базе это. думаю все эти вопросы уже решены
Terabaytus; +1 Ответить
4. Terabaytus 13.09.21 18:14 Сейчас в теме
(2)
Формат(ТекущаяДата(), "ДЛФ=Д") - это строка. у вас в регистре даты - строки?
да
5. Terabaytus 13.09.21 18:48 Сейчас в теме
(2)Понять не могу почему по текущедате с полями Дата в РС не делает выборку ?
6. nomad_irk 72 13.09.21 20:25 Сейчас в теме
(5)Может в поле "Дата" все же значение типа Дата, а не строка?
8. Lenten 25 14.09.21 09:28 Сейчас в теме
(5)
о текущедате с полями Дата в РС не дел


еще смотрите чтоб тип сравнения был не = а > или <

иначе запрос будет искать дату 14 09 2021 9:28. т.е слишком точно.
Terabaytus; +1 Ответить
3. Lenten 25 13.09.21 17:51 Сейчас в теме
но она возвращает только часы

ЧасовВСЕГО = Выборка.Время/3600

МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60
Terabaytus; +1 Ответить
9. Terabaytus 14.09.21 09:55 Сейчас в теме
(3)
ЧасовВСЕГО = Выборка.Время/3600

МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60
с минутами какая то ерунда получается если человек отработал с 8. 00 до 17.00 результат выдаёт 9 часов понятно 1 час на обед, а если он отработал 17: 50 то минуты выдаёт -0,000000000000000000000000013333333333333333333333333333 по моему должно быть 9:50 минут
10. Lenten 25 14.09.21 10:03 Сейчас в теме
(9)

МинутВсего = (Выборка.Время- Окр(ЧасовВСЕГО * 3600,0))/60

попробуйте с округлением
Terabaytus; +1 Ответить
11. spacecraft 14.09.21 10:23 Сейчас в теме
(9)
ЧасовВСЕГО = Цел(Выборка.Время/3600);
МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60;
Terabaytus; +1 Ответить
7. puzo50 14.09.21 07:15 Сейчас в теме
(5) наверно потому что у вас нет такого, чтобы дата начала была сегодня и дата окончания была сегодня
ну и вы понимаете, конечно, что у вас в запросе нет привязки к сотруднику.
то есть если сто человек работает, то будет 100 дат начала и 100 дат конца и результат будет 100*100 = 10 000 строк
Terabaytus; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот