Как рассчитать количество отработанных часов ?
Добрый день, не могу сообразить нужно рассчитать количество отработанного времени сотрудника до минут как правило работники начинают смену днём, а заканчивают ночью следующего числа как это учесть в расчётах накидал функцию
, но она возвращает только часы не всё время и не учитывает дату следующего дня ?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(ВремяНачалаРаботы.ВремяНачалаРаботы, ВремяОкончанияРаботы.ВремяОкончанияРаботы, СЕКУНДА) КАК Время
|ИЗ
| РегистрСведений.ВремяНачалаРаботы КАК ВремяНачала,
| РегистрСведений.ВремяОкончанияРаботы КАК ВремяОкончанияРаботы
|ГДЕ
| ВремяНачалаРаботы.Дата = &Дата
|И
| ВремяОкончанияРаботы.Дата = &Дата";
Запрос.УстановитьПараметр("Дата", Формат(ТекущаяДата(), "ДЛФ=Д"));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЧасовВСЕГО = Выборка.Время/3600;
КонецЦикла;
Возврат ЧасовВСЕГО;
Показать, но она возвращает только часы не всё время и не учитывает дату следующего дня ?
По теме из базы знаний
- Расчет сверхурочных часов для конфигурации "1С:Зарплата и Кадры 7.7"
- Расчет премии как процента от продаж магазина
- Как сдать экзамен 1С:Специалист по платформе?
- Тайны расчета удержания по исполнительным листам. ЗУП 3.1
- Ни в ЗУП ногой!? А мне нравится! Часть 1. Главные сложности решения, что отталкивает
Найденные решения
1)Формат(ТекущаяДата(), "ДЛФ=Д") - это строка. у вас в регистре даты - строки?
обычно просто ТекущаяДата()
2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)
3) поищите в типовой базе это. думаю все эти вопросы уже решены
обычно просто ТекущаяДата()
2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)
| ВремяНачалаРаботы.Дата >= &ДатаНачала
|И
| ВремяОкончанияРаботы.Дата <= &ДатаОкончания";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", ТекущаяДата() + 24*60*60);
3) поищите в типовой базе это. думаю все эти вопросы уже решены
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1)Формат(ТекущаяДата(), "ДЛФ=Д") - это строка. у вас в регистре даты - строки?
обычно просто ТекущаяДата()
2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)
3) поищите в типовой базе это. думаю все эти вопросы уже решены
обычно просто ТекущаяДата()
2) если надо анализировать 2 дня (сегодня начал, сегодня или завтра закончил)
| ВремяНачалаРаботы.Дата >= &ДатаНачала
|И
| ВремяОкончанияРаботы.Дата <= &ДатаОкончания";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", ТекущаяДата() + 24*60*60);
3) поищите в типовой базе это. думаю все эти вопросы уже решены
(3)
ЧасовВСЕГО = Выборка.Время/3600
МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60
с минутами какая то ерунда получается если человек отработал с 8. 00 до 17.00 результат выдаёт 9 часов понятно 1 час на обед, а если он отработал 17: 50 то минуты выдаёт -0,000000000000000000000000013333333333333333333333333333 по моему должно быть 9:50 минут
МинутВсего = (Выборка.Время- ЧасовВСЕГО * 3600)/60
(5) наверно потому что у вас нет такого, чтобы дата начала была сегодня и дата окончания была сегодня
ну и вы понимаете, конечно, что у вас в запросе нет привязки к сотруднику.
то есть если сто человек работает, то будет 100 дат начала и 100 дат конца и результат будет 100*100 = 10 000 строк
ну и вы понимаете, конечно, что у вас в запросе нет привязки к сотруднику.
то есть если сто человек работает, то будет 100 дат начала и 100 дат конца и результат будет 100*100 = 10 000 строк
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот