БСП (или 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
Переделай по себя
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший