"релиз 285, последний<br>//******************************************************************************<br>// глСуммаСреднегоЗаработка(Сотрудник,НачалоСобытия,ТаблицаДанныхОСреднем) <br>//<br>// Параметры:<br>// СписокПараметров - список значений содержащий данные необходимые для расчета суммы среднего заработка<br>//<br>// Возвращаемое значение:<br>// Число - размер заработка<br>//<br>// Описание:<br>//<br>Функция глСуммаСреднегоЗаработка(Сотрудник,НачалоСобытия,ТаблицаДанныхОСреднемПарам,РасчетныйПериод) Экспорт<br> <br> Перем ТаблицаДанныхОСреднем; <br> <br> ТаблицаДанныхОСреднемПарам.Выгрузить(ТаблицаДанныхОСреднем);<br><br> // определим под какой из порядков попала оплата:<br> ПорядокРасчетаСреднегоЗаработка = глПолучитьПорядокРасчетаСреднегоЗаработка(НачалоСобытия);<br> <br> СуммаСреднегоЗаработка = 0;<br> Если ТаблицаДанныхОСреднем.КоличествоСтрок() > 0 Тогда<br> СписокМесяцев = СоздатьОбъект("СписокЗначений");<br> ВсегоРазмерЗаработка = 0;<br> ВсегоДнейОтработано = 0;<br> ВсегоФактОтработано = 0;<br> РазмерГодовойПремии = 0;<br> РазмерПрочихПремий = 0;<br> РазмерГодовойПремииПропорцион = 0;<br> РазмерПрочихПремийПропорцион = 0;<br> ТаблицаДанныхОСреднем.Свернуть("ВидСтроки,Месяц","РазмерРаспределения,ДнейОтработано,ОтработаноФактически");<br> ТаблицаДанныхОСреднем.ВыбратьСтроки();<br> Пока ТаблицаДанныхОСреднем.ПолучитьСтроку() = 1 Цикл<br> ВидСтроки = ТаблицаДанныхОСреднем.ВидСтроки;<br> Если (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.Заработок) или (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.НадбавкаЗаКвалификационныйРазряд)<br> или (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ЗаработокНеИндексируемый) Тогда<br> ВсегоРазмерЗаработка = ВсегоРазмерЗаработка + ТаблицаДанныхОСреднем.РазмерРаспределения;<br> Если ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.Заработок Тогда<br> ВсегоДнейОтработано = ВсегоДнейОтработано + ТаблицаДанныхОСреднем.ДнейОтработано;<br> ВсегоФактОтработано = ВсегоФактОтработано + ТаблицаДанныхОСреднем.ОтработаноФактически;<br> ДатаМесяца = глДатаПоСтроке(ТаблицаДанныхОСреднем.Месяц);<br> Если СписокМесяцев.НайтиЗначение(ДатаМесяца) = 0 Тогда<br> СписокМесяцев.ДобавитьЗначение(ДатаМесяца);<br> КонецЕсли;<br> КонецЕсли;<br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияГодовая Тогда // начислено по итогам работы за 12 месяцев<br> РазмерГодовойПремии = РазмерГодовойПремии + ТаблицаДанныхОСреднем.РазмерРаспределения<br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияЕдиновременная Тогда // премии по итогам работы за несколько месяцев<br> КоличествоМесяцевПремии = СокрЛП(СтрЗаменить(НРег(ТаблицаДанныхОСреднем.Месяц),"за",""""));<br> КоличествоМесяцевПремии = Макс(Число(КоличествоМесяцевПремии),1);<br> РазмерПрочихПремий = РазмерПрочихПремий + ?(КоличествоМесяцевПремии > РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения / КоличествоМесяцевПремии * РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения)<br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияГодоваяПропорциональная Тогда<br> РазмерГодовойПремииПропорцион = РазмерГодовойПремииПропорцион + ТаблицаДанныхОСреднем.РазмерРаспределения <br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияЕдиновременнаяПропорциональная Тогда // премии по итогам работы за несколько месяцев<br> КоличествоМесяцевПремии = СокрЛП(СтрЗаменить(НРег(ТаблицаДанныхОСреднем.Месяц),"за",""""));<br> КоличествоМесяцевПремии = Макс(Число(КоличествоМесяцевПремии),1);<br> РазмерПрочихПремийПропорцион = РазмерПрочихПремийПропорцион + ?(КоличествоМесяцевПремии > РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения / КоличествоМесяцевПремии * РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения)<br> КонецЕсли;<br> КонецЦикла;<br> <br> Если ВсегоДнейОтработано > 0 тогда<br> МесяцевРасчетногоПериода = СписокМесяцев.РазмерСписка();<br> Режим = ?(глГрафикСуммированногоУчета(Сотрудник,НачалоСобытия) = 0,"Дней","Часов");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Итоговые данные о заработке:", 0, 1);<br> глСообщениеТрассировки(глСообщенияТрассировки, "в расчетный период включено " + МесяцевРасчетногоПериода + " " + глФормаМножественногоЧисла("месяц","месяца","месяцев",МесяцевРасчетногоПериода), 0, 1);<br> глСообщениеТрассировки(глСообщенияТрассировки, "за расчетный период отработано по графику " + ВсегоДнейОтработано + " " + НРег(Режим), 0, 0);<br> глСообщениеТрассировки(глСообщенияТрассировки, "за расчетный период отработано фактически " + ВсегоФактОтработано + " " + НРег(Режим), 0, 0);<br> глСообщениеТрассировки(глСообщенияТрассировки, "за расчетный период отработано " + ВсегоДнейОтработано + " " + НРег(Режим), 0, 0);<br> глСообщениеТрассировки(глСообщенияТрассировки, "основной заработок составил _П01", 0, 0, ВсегоРазмерЗаработка, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "премии по итогам года составили _П01", 0, 0, РазмерГодовойПремии , "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "премии пропорциональные по итогам года составили _П01", 0, 0, РазмерГодовойПремииПропорцион, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "сумма месячных частей прочих премий составила _П01", 0, 0, РазмерПрочихПремий , "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "сумма месячных частей прочих пропорциональных премий составила _П01", 0,-1, РазмерПрочихПремийПропорцион, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Норма отработанного времени (" + НРег(Режим) + ") составила:", 0, 0);<br> Если РазмерПрочихПремий + РазмерГодовойПремии + РазмерГодовойПремииПропорцион + РазмерПрочихПремийПропорцион = 0 Тогда<br> ПриведеннаяСуммаПремий = 0<br> Иначе<br> ВсегоНормаДней = 0;<br> СписокМесяцев.Сортировать();<br> Для Сч = 1 По МесяцевРасчетногоПериода Цикл<br> ДатаМесяца = СписокМесяцев.ПолучитьЗначение(Сч);<br> НормаДнейЧасов = глНормаДнейЧасовЗаПериод(Сотрудник,НачМесяца(ДатаМесяца),КонМесяца(ДатаМесяца),Режим);<br> ВсегоНормаДней = ВсегоНормаДней + НормаДнейЧасов; <br> глСообщениеТрассировки(глСообщенияТрассировки, "за _П01: "+НормаДнейЧасов, 0, ?(Сч = 1,1,?(Сч = МесяцевРасчетногоПериода,-1,0)), ДатаМесяца, "ДММММГГГГ");<br> КонецЦикла;<br> Если МесяцевРасчетногоПериода = 1 Тогда<br> глСообщениеТрассировки(глСообщенияТрассировки, """", 0, -1);<br> КонецЕсли;<br> Если ВсегоНормаДней = 0 Тогда<br> Если глРежимТрассировки = 1 Тогда<br> глСообщениеТрассировки(глСообщенияТрассировки, "Заполните рабочий календарь сотрудника за месяцы, предшествующие событию!", 1, 1);<br> Иначе<br> глДобавитьСообщение(глОбработчикСообщений, "Заполните рабочий календарь сотрудника за месяцы, предшествующие событию!", Сотрудник, , );<br> КонецЕсли;<br> ПриведеннаяСуммаПремий = 0;<br> Иначе<br> ДоляОтработанногоВремени = Мин(ВсегоДнейОтработано / ВсегоНормаДней,1);<br> // если старый порядок, то пропорциональные премии все равно приводим к отработанному времени<br> ПриведеннаяСуммаПремий = ДоляОтработанногоВремени * (РазмерПрочихПремий + ?(ПорядокРасчетаСреднегоЗаработка > 0,0,РазмерПрочихПремийПропорцион) <br> + РасчетныйПериод * (РазмерГодовойПремии + ?(ПорядокРасчетаСреднегоЗаработка > 0,0,РазмерГодовойПремииПропорцион)) / 12) ;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Доля отработанного времени за расчетный период составила: _П01", 0, 0, ДоляОтработанногоВремени, "Ч25.20");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма премий, приведенных к отработанному времени составила: _П01", 0, 0, ПриведеннаяСуммаПремий, "Ч15.2");<br> КонецЕсли;<br> Если ПорядокРасчетаСреднегоЗаработка > 0 Тогда // добавим пропорциональные премии как есть (у них уже учтены отработанные дни)<br> ПропорцПремии = РазмерПрочихПремийПропорцион + РасчетныйПериод * РазмерГодовойПремииПропорцион / 12 ;<br> ПриведеннаяСуммаПремий = ПриведеннаяСуммаПремий + ПропорцПремии;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма учитываемых за расчетный период пропорциональных премий составила: _П01", 0, 0, ПропорцПремии, "Ч15.2");<br> КонецЕсли;<br> КонецЕсли;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Общая сумма учитываемых за расчетный период премий составила: _П01", 0, -1, ПриведеннаяСуммаПремий, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Делимое для получения среднедневного заработка: _П01", 0, 0, ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий, "Ч15.2");<br> Если (ВсегоФактОтработано > 0) и (ПорядокРасчетаСреднегоЗаработка > 0) Тогда<br> СуммаСреднегоЗаработка = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоФактОтработано;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма заработка приводится к фактически отработанным дням(часам): _П01", 0, 0, ВсегоФактОтработано, "Ч15.2");<br> ИначеЕсли ВсегоДнейОтработано > 0 тогда<br> СуммаСреднегоЗаработка = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоДнейОтработано; <br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма заработка приводится к количеству дней(часов) по графику: _П01", 0, 0, ВсегоДнейОтработано, "Ч15.2");<br> Иначе<br> СуммаСреднегоЗаработка = 0;<br> КонецЕсли; <br> Иначе<br> глСообщениеТрассировки(глСообщенияТрассировки, "За расчетный период не отработано ни одного дня!", 0, 0);<br> КонецЕсли;<br> КонецЕсли;<br> <br> Возврат СуммаСреднегоЗаработка;<br>КонецФункции // глСуммаСреднегоЗаработка<br><br>//******************************************************************************<br>// глСуммаСреднегоЗаработкаОтпуска(Сотрудник,НачалоСобытия,ТипРасчетаОтпуска,ТипРасчетаДополнительногоОтпуска,ТаблицаДанныхОСреднем) <br>//<br>// Параметры:<br>// <br>//<br>// Возвращаемое значение:<br>// Список значений содержащий суммы среднего заработка (их будет две в случае дополнительного отпуска)<br>//<br>// Описание:<br>//<br>Функция глСуммаСреднегоЗаработкаОтпуска(Сотрудник,НачалоСобытия,ТипРасчетаОтпуска,ТипРасчетаДополнительногоОтпуска,ТаблицаДанныхОСреднемПарам,РасчетныйПериод,ИспользоватьСреднеЧасовойЗаработок=0) Экспорт<br> <br> Перем ТаблицаДанныхОСреднем;<br><br> ТаблицаДанныхОСреднемПарам.Выгрузить(ТаблицаДанныхОСреднем);<br> <br> // определим под какой из порядков попал отпуск:<br> ПорядокРасчетаСреднегоЗаработка = глПолучитьПорядокРасчетаСреднегоЗаработка(НачалоСобытия);<br> <br> СуммаСреднегоЗаработка = 0;<br> СуммаСреднегоЗаработкаДополнительного = 0;<br> Если ТаблицаДанныхОСреднем.КоличествоСтрок() > 0 Тогда<br> СписокМесяцев = СоздатьОбъект("СписокЗначений");<br> ВсегоРазмерЗаработка = 0;<br> ВсегоДнейОтработано = 0;<br> ВсегоФактОтработано = 0;<br> ВсегоДнейОтпуска = 0;<br> ВсегоДнейДополнительного = 0;<br> ВсегоДнейПоШестидневке = 0;<br> ВсегоКалендарныхДней = 0;<br> РазмерГодовойПремии = 0;<br> РазмерПрочихПремий = 0;<br> РазмерГодовойПремииПропорцион = 0;<br> РазмерПрочихПремийПропорцион = 0;<br> ТаблицаДанныхОСреднем.Свернуть("ВидСтроки,Месяц","РазмерРаспределения,ДнейОтработано,ОтработаноФактически,ДнейОтработаноПоШестидневке,ДнейОтработаноКалендарных");<br> ТаблицаДанныхОСреднем.ВыбратьСтроки();<br> Пока ТаблицаДанныхОСреднем.ПолучитьСтроку() = 1 Цикл<br> ВидСтроки = ТаблицаДанныхОСреднем.ВидСтроки;<br> Если (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.Заработок) или (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.НадбавкаЗаКвалификационныйРазряд)<br> или (ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ЗаработокНеИндексируемый) Тогда<br> ВсегоРазмерЗаработка = ВсегоРазмерЗаработка + ТаблицаДанныхОСреднем.РазмерРаспределения;<br> Если ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.Заработок Тогда<br> ВсегоДнейОтработано = ВсегоДнейОтработано + ТаблицаДанныхОСреднем.ДнейОтработано;<br> ВсегоФактОтработано = ВсегоФактОтработано + ТаблицаДанныхОСреднем.ОтработаноФактически;<br> ВсегоДнейПоШестидневке = ВсегоДнейПоШестидневке + ТаблицаДанныхОСреднем.ДнейОтработаноПоШестидневке;<br> ВсегоКалендарныхДней = ВсегоКалендарныхДней + ТаблицаДанныхОСреднем.ДнейОтработаноКалендарных;<br> ВсегоДнейОтпуска = ВсегоДнейОтпуска + ?(ТипРасчетаОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке,ТаблицаДанныхОСреднем.ДнейОтработаноПоШестидневке,ТаблицаДанныхОСреднем.ДнейОтработаноКалендарных);<br> ВсегоДнейДополнительного = ВсегоДнейДополнительного + ?(ТипРасчетаДополнительногоОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке,ТаблицаДанныхОСреднем.ДнейОтработаноПоШестидневке,ТаблицаДанныхОСреднем.ДнейОтработаноКалендарных);<br> ДатаМесяца = глДатаПоСтроке(ТаблицаДанныхОСреднем.Месяц);<br> Если СписокМесяцев.НайтиЗначение(ДатаМесяца) = 0 Тогда<br> СписокМесяцев.ДобавитьЗначение(ДатаМесяца);<br> КонецЕсли;<br> КонецЕсли;<br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияГодовая Тогда // начислено по итогам работы за 12 месяцев<br> РазмерГодовойПремии = РазмерГодовойПремии + ТаблицаДанныхОСреднем.РазмерРаспределения <br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияЕдиновременная Тогда // премии по итогам работы за несколько месяцев<br> КоличествоМесяцевПремии = СокрЛП(СтрЗаменить(НРег(ТаблицаДанныхОСреднем.Месяц),"за",""""));<br> КоличествоМесяцевПремии = Макс(Число(КоличествоМесяцевПремии),1);<br> РазмерПрочихПремий = РазмерПрочихПремий + ?(КоличествоМесяцевПремии > РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения / КоличествоМесяцевПремии * РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения)<br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияГодоваяПропорциональная Тогда<br> РазмерГодовойПремииПропорцион = РазмерГодовойПремииПропорцион + ТаблицаДанныхОСреднем.РазмерРаспределения <br> ИначеЕсли ВидСтроки = Перечисление.ВидСтрокиСреднегоЗаработка.ПремияЕдиновременнаяПропорциональная Тогда // премии по итогам работы за несколько месяцев<br> КоличествоМесяцевПремии = СокрЛП(СтрЗаменить(НРег(ТаблицаДанныхОСреднем.Месяц),"за",""""));<br> КоличествоМесяцевПремии = Макс(Число(КоличествоМесяцевПремии),1);<br> РазмерПрочихПремийПропорцион = РазмерПрочихПремийПропорцион + ?(КоличествоМесяцевПремии > РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения / КоличествоМесяцевПремии * РасчетныйПериод,ТаблицаДанныхОСреднем.РазмерРаспределения)<br> КонецЕсли;<br> КонецЦикла;<br> <br> Если (ВсегоДнейОтработано > 0) или (ВсегоДнейОтпуска > 0) или (ВсегоДнейДополнительного > 0) тогда<br> МесяцевРасчетногоПериода = СписокМесяцев.РазмерСписка();<br> СуммированноеВремя = глГрафикСуммированногоУчета(Сотрудник,НачалоСобытия);<br> СуммированноеВремя = ?( ИспользоватьСреднеЧасовойЗаработок =1,СуммированноеВремя,0);<br> Режим = ?(СуммированноеВремя = 0,"Дней","Часов");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Итоговые данные о заработке:", 0, 1);<br> глСообщениеТрассировки(глСообщенияТрассировки, "в расчетный период включено " + МесяцевРасчетногоПериода + " " + глФормаМножественногоЧисла("месяц","месяца","месяцев",МесяцевРасчетногоПериода), 0, 1);<br> глСообщениеТрассировки(глСообщенияТрассировки, "за расчетный период отработано по графику " + ВсегоДнейОтработано + " " + НРег(Режим), 0, 0);<br> глСообщениеТрассировки(глСообщенияТрассировки, "за расчетный период отработано фактически " + ВсегоФактОтработано + " " + НРег(Режим), 0, 0);<br> Если СуммированноеВремя = 0 Тогда<br> глСообщениеТрассировки(глСообщенияТрассировки, "по календарю шестидневной недели на отработанное время приходится " + ВсегоДнейПоШестидневке + " " + НРег(Режим), 0, 0);<br> глСообщениеТрассировки(глСообщенияТрассировки, "календарных "+НРег(Режим)+" на отработанное время приходится " + ВсегоКалендарныхДней, 0, 0);<br> КонецЕсли;<br> глСообщениеТрассировки(глСообщенияТрассировки, "основной заработок составил _П01", 0, 0, ВсегоРазмерЗаработка, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "премии по итогам года составили _П01", 0, 0, РазмерГодовойПремии , "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "премии пропорциональные по итогам года составили _П01", 0, 0, РазмерГодовойПремииПропорцион, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "сумма месячных частей прочих премий составила _П01", 0, 0, РазмерПрочихПремий , "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "сумма месячных частей прочих пропорциональных премий составила _П01", 0, -1, РазмерПрочихПремийПропорцион, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Норма отработанного времени (" + НРег(Режим) + ") составила:", 0, 0);<br> <br> Если РазмерПрочихПремий + РазмерГодовойПремии + РазмерГодовойПремииПропорцион + РазмерПрочихПремийПропорцион = 0 Тогда<br> ПриведеннаяСуммаПремий = 0<br> Иначе<br> ВсегоНормаДней = 0;<br> Для Сч = 1 По МесяцевРасчетногоПериода Цикл<br> ДатаМесяца = СписокМесяцев.ПолучитьЗначение(Сч);<br> НормаДнейЧасов = глНормаДнейЧасовЗаПериод(Сотрудник,НачМесяца(ДатаМесяца),КонМесяца(ДатаМесяца),Режим);<br> ВсегоНормаДней = ВсегоНормаДней + НормаДнейЧасов; <br> глСообщениеТрассировки(глСообщенияТрассировки, "за _П01: "+НормаДнейЧасов, 0, ?(Сч = 1,1,?(Сч = МесяцевРасчетногоПериода,-1,0)), ДатаМесяца, "ДММММГГГГ");<br> КонецЦикла;<br> Если МесяцевРасчетногоПериода = 1 Тогда<br> глСообщениеТрассировки(глСообщенияТрассировки, """", 0, -1);<br> КонецЕсли;<br> Если ВсегоНормаДней = 0 Тогда<br> Если глРежимТрассировки = 1 Тогда<br> глСообщениеТрассировки(глСообщенияТрассировки, "Заполните рабочий календарь сотрудника за месяцы, предшествующие отпуску!", 1, 1);<br> Иначе<br> глДобавитьСообщение(глОбработчикСообщений, "Заполните рабочий календарь сотрудника за месяцы, предшествующие отпуску!", Сотрудник, , );<br> КонецЕсли;<br> ПриведеннаяСуммаПремий = 0;<br> Иначе <br> ДоляОтработанногоВремени = Мин(ВсегоДнейОтработано / ВсегоНормаДней,1); <br> // если старый порядок, то пропорциональные премии все равно приводим к отработанному времени<br> ПриведеннаяСуммаПремий = ДоляОтработанногоВремени * (РазмерПрочихПремий+?(ПорядокРасчетаСреднегоЗаработка > 0,0,РазмерПрочихПремийПропорцион) + <br> РасчетныйПериод * (РазмерГодовойПремии + ?(ПорядокРасчетаСреднегоЗаработка > 0,0,РазмерГодовойПремииПропорцион))/ 12) ;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Доля отработанного времени за расчетный период составила: _П01", 0, 0, ДоляОтработанногоВремени, "Ч25.20");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма премий, приведенных к отработанному времени составила: _П01", 0, 0, ПриведеннаяСуммаПремий, "Ч15.2");<br> КонецЕсли;<br> Если ПорядокРасчетаСреднегоЗаработка > 0 Тогда // добавим пропорциональные премии как есть (у них уже учтены отработанные дни)<br> ПропорцПремии = РазмерПрочихПремийПропорцион + РасчетныйПериод * РазмерГодовойПремииПропорцион / 12 ;<br> ПриведеннаяСуммаПремий = ПриведеннаяСуммаПремий + ПропорцПремии;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма учитываемых за расчетный период пропорциональных премий составила: _П01", 0, 0, ПропорцПремии, "Ч15.2");<br> КонецЕсли;<br> КонецЕсли;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Общая сумма учитываемых за расчетный период премий составила: _П01", 0, -1, ПриведеннаяСуммаПремий, "Ч15.2");<br> глСообщениеТрассировки(глСообщенияТрассировки, "Делимое для получения среднедневного заработка: _П01", 0, 0, ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий, "Ч15.2");<br> <br> Если СуммированноеВремя = 0 Тогда <br> Если ВсегоДнейОтпуска > 0 тогда<br> СуммаСреднегоЗаработка = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоДнейОтпуска;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма заработка приводится к количеству дней: _П01", 0, 0, ВсегоДнейОтпуска, "Ч15.2");<br> Иначе<br> СуммаСреднегоЗаработка = 0;<br> КонецЕсли;<br> Если ВсегоДнейДополнительного > 0 тогда<br> СуммаСреднегоЗаработкаДополнительного = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоДнейДополнительного;<br> КонецЕсли; <br> Иначе<br> Если (ВсегоФактОтработано > 0) и (ПорядокРасчетаСреднегоЗаработка > 0) Тогда<br> СуммаСреднегоЗаработка = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоФактОтработано;<br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма заработка приводится к фактически отработанным дням: _П01", 0, 0, ВсегоФактОтработано, "Ч15.2");<br> ИначеЕсли ВсегоДнейОтработано > 0 тогда<br> СуммаСреднегоЗаработка = (ВсегоРазмерЗаработка + ПриведеннаяСуммаПремий) / ВсегоДнейОтработано; <br> глСообщениеТрассировки(глСообщенияТрассировки, "Сумма заработка приводится к количеству дней по графику: _П01", 0, 0, ВсегоДнейОтработано, "Ч15.2");<br> Иначе<br> СуммаСреднегоЗаработка = 0;<br> КонецЕсли; <br> СуммаСреднегоЗаработкаДополнительного = СуммаСреднегоЗаработка;<br> КонецЕсли;<br> <br> Иначе<br> глСообщениеТрассировки(глСообщенияТрассировки, "За расчетный период не отработано ни одного дня!", 0, 0);<br> КонецЕсли;<br> КонецЕсли;<br> <br> СписокСумм = СоздатьОбъект("СписокЗначений");<br> СписокСумм.ДобавитьЗначение(СуммаСреднегоЗаработка, "СуммаСреднегоЗаработка");<br> СписокСумм.ДобавитьЗначение(СуммаСреднегоЗаработкаДополнительного, "СуммаСреднегоЗаработкаДополнительного");<br> Возврат СписокСумм;<br>КонецФункции // глСуммаСреднегоЗаработкаОтпуска<br><br>//******************************************************************************<br>...<br>//******************************************************************************<br><br>//******************************************************************************<br>// ПолучитьКоличествоДнейОтпускаПосле060108()<br>//<br>// Параметры: <br>//<br>// Возвращаемое значение:<br>// Количество дней отпуска<br>//<br>// Описание:<br>// В функцию всегда передаются даты одного месяца<br>// МассивДней[] содержит субботы и воскресенья, помеченные 1 как входящие в отрезок, чтобы их не учитывать как пропуски<br>Функция ПолучитьКоличествоДнейОтпускаПосле060108(МассивДней[], ДатаНачала, ДатаОкончания, КалендарьОтпуска, ГрафикРаботы,НачалоРП)<br> <br> День = 0;<br> ДнейДляОтп = 0;<br> КалендарныхДнейОтработано = 0;<br> КалендарныхДнейВМесяце = ДатаОкончания - ДатаНачала +1;<br> РасчетПоШестидневке = ?(КалендарьОтпуска = Календари.Шестидневка,1,0);<br><br> ИндНачала = НомерДняПериода(НачалоРП,ДатаНачала);<br> ИндОкончания = НомерДняПериода(НачалоРП,ДатаОкончания);<br> инд = ИндНачала - 1;<br> Пока инд < ИндОкончания Цикл<br> инд = инд + 1;<br> День = МассивДней[инд]; <br> Если День = "Х" тогда<br> Продолжить;<br> КонецЕсли;<br> <br> Если РасчетПоШестидневке = 0 Тогда<br> //считаем календариные дни приходящиеся на период работы, затем посчитаем дни отпуска, <br> КалендарныхДнейОтработано = КалендарныхДнейОтработано + День;<br> Иначе <br> //для шестидневки надо получить дни по календарю, это и будут дни отпуска<br> ДатаДня = ДатаНачала + (инд - ИндНачала); <br> ДатаНачалаОтрезка = ДатаДня;<br> ЕстьОтрезок = 0;<br> Пока (День <> 0) и (инд + 1 <= ИндОкончания) Цикл<br> ЕстьОтрезок = 1;<br> инд = инд + 1;<br> День = МассивДней[инд];<br> ДатаДня = ДатаНачала + (инд - ИндНачала);<br> КонецЦикла; <br> Если (День <> 0) и (инд + 1 > ИндОкончания) Тогда<br> ЕстьОтрезок = 1;<br> КонецЕсли;<br> ДатаОкончанияОтрезка = ?(День <> 0, ДатаДня, ДатаДня-1);<br> Если ЕстьОтрезок = 1 тогда<br> НадоПересчитать = ?((ДатаНачалаОтрезка = ДатаНачала) и (ДатаОкончанияОтрезка = ДатаОкончания),0,1);<br> Если НадоПересчитать = 1 тогда<br> ДнейДляОтп = ДнейДляОтп + КалендарьОтпуска.Дней(ДатаНачалаОтрезка, ДатаОкончанияОтрезка);<br> Иначе<br> ДнейДляОтп = КалендарьОтпуска.Дней(ДатаНачалаОтрезка, ДатаОкончанияОтрезка);<br> КонецЕсли; <br> КонецЕсли;<br> КонецЕсли;<br> <br> КонецЦикла;<br> <br> Если РасчетПоШестидневке = 0 Тогда<br> //для расчета по календарным дням<br> Если КалендарныхДнейОтработано = КалендарныхДнейВМесяце Тогда<br> ДнейДляОтп = 29.4;<br> ИначеЕсли КалендарныхДнейОтработано >0 Тогда<br> ДнейДляОтп = Окр(29.4 / КалендарныхДнейВМесяце * КалендарныхДнейОтработано,2);<br> КонецЕсли; <br> КонецЕсли; <br> <br> Возврат ДнейДляОтп;<br> <br>КонецФункции // ПолучитьКоличествоДнейОтпускаПосле060108<br><br>//******************************************************************************"