Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

БСП (или ERP) как посчитать количество часов за период с учетом времени?

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.