Архив рубрики: 1С Зарплата и Управление Персоналом 3.0

1С Зарплата и Управление Персоналом 3.0

Функция расчет среднемесячного количества часов


// Часто при создании дополнительных расчетов необходимо в расчете это получить
&НаСервере
Функция СреднемесячноеКоличествоЧасов(Год) 
    
    Запрос = Новый Запрос;


    Запрос.УстановитьПараметр("Год",Год);
    Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
    Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);


    Запрос.Текст =
    "ВЫБРАТЬ
    | СУММА(ВЫБОР
    |   КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня =РабочийДень
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК ЧислоРабочихДней,
    | СУММА(ВЫБОР
    |   КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня =ПредпраздничныйДень
    |    ТОГДА 1
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК ЧислоПредпраздничныхДней
    |ИЗ
    | РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
    |ГДЕ
    | РегламентированныйПроизводственныйКалендарь.Год =Год";


    ВыборкаКалендаря = Запрос.Выполнить().Выбрать();
    Если ВыборкаКалендаря.Следующий() тогда
        ЧислоРабочихДнейВГоду = ?(ВыборкаКалендаря.ЧислоРабочихДней = NULL, 0, ВыборкаКалендаря.ЧислоРабочихДней); 
        ЧислоПредпраздничныхДнейВГоду = ?(ВыборкаКалендаря.ЧислоПредпраздничныхДней= NULL, 0, ВыборкаКалендаря.ЧислоПредпраздничныхДней);
    Иначе 
        ЧислоРабочихДнейВГоду = 0;
        ЧислоПредпраздничныхДнейВГоду = 0;
    КонецЕсли;
    
    СреднеМесячное = Окр((ЧислоРабочихДнейВГоду*8+ЧислоПредпраздничныхДнейВГоду*7)/12,2);


    Возврат СреднеМесячное;




КонецФункции