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

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

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

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

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

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

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

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


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

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

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

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


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

иначе запрос будет искать дату 14 09 2021 9:28. т.е слишком точно.
Terabaytus; +1 Ответить
10. Lenten 24 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 24 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 57 13.09.21 20:25 Сейчас в теме
(5)Может в поле "Дата" все же значение типа Дата, а не строка?
8. Lenten 24 14.09.21 09:28 Сейчас в теме
(5)
о текущедате с полями Дата в РС не дел


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

иначе запрос будет искать дату 14 09 2021 9:28. т.е слишком точно.
Terabaytus; +1 Ответить
3. Lenten 24 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 24 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 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Новосибирск
зарплата от 90 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 100 000 руб. до 140 000 руб.
Полный день

Программист 1С
Хабаровск
зарплата от 130 000 руб. до 160 000 руб.
Полный день