|
БСП (или ERP) как посчитать количество часов за период с учетом времени? | ☑ | ||
---|---|---|---|---|
0
pvase
28.01.20
✎
13:08
|
Здравствуйте. Надо посчитать количество рабочих часов и минут (ну или секунд, а потом разделить на 60 и 3600) по пятидневке 8-часовому рабочему дню, например между такими периодами 24.01.2020 16:45:38 и 28.01.2020 10:28:35 в типовой конфигуапрции ERP, а лучше в БСП. Подскажите как такое реализовать или может где подсмотреть как уже реализовано. Спасибо.
|
|||
1
Волшебник
модератор
28.01.20
✎
13:10
|
Посчитай первый день, потом полные дни и последний день периода.
|
|||
2
pvase
28.01.20
✎
13:22
|
(1) Спасибо. Я пытаюсь понять какие объекты использовать. Есть такой объект как "Календарь" в БСП, но что-то не могу понять как его использовать, но в ERP есть еще "ГрафикиРаботыСотрудников" он вроде больше подойлет, но опять же не пойму как по нему посчитать количество рабочиъ часов за период.
|
|||
3
polosov
28.01.20
✎
13:37
|
Функция ОпределитьДату(ДатаНач, ЧислоДней, ПроизводственныйКалендарь)
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("ЧислоДней", ЧислоДней); Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь); Если ЧислоДней > 0 Тогда Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + " | РегламентированныйПроизводственныйКалендарь.Дата |ИЗ | РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь |ГДЕ РегламентированныйПроизводственныйКалендарь.ПроизводственныйКалендарь = &ПроизводственныйКалендарь | И РегламентированныйПроизводственныйКалендарь.Дата > &ДатаНач | И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень | ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень) |"; Иначе ЧислоДней = -ЧислоДней; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + " | РегламентированныйПроизводственныйКалендарь.Дата |ИЗ | РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь |ГДЕ РегламентированныйПроизводственныйКалендарь.ПроизводственныйКалендарь = &ПроизводственныйКалендарь | И РегламентированныйПроизводственныйКалендарь.Дата < &ДатаНач | И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень | ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень) |УПОРЯДОЧИТЬ ПО | Дата УБЫВ |"; КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() = ЧислоДней Тогда Пока Выборка.Следующий() Цикл ТекДата = Выборка.Дата; КонецЦикла; Возврат ТекДата; КонецЕсли; Возврат Неопределено; КонецФункции |
|||
4
polosov
28.01.20
✎
13:38
|
Переделай по себя
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |