Главная страница

Предопределенная процедура. Предопределенная процедура


Скачать 41 Kb.
НазваниеПредопределенная процедура
Дата17.12.2020
Размер41 Kb.
Формат файлаdoc
Имя файлаПредопределенная процедура.doc
ТипДокументы
#161658

//******************************************************************************

// Предопределенная процедура

//

Процедура ПровестиРасчет()
// если запись исправлена или фиксирована, то ее не рассчитываем

Если (Исправлена=1) или (Фиксирована=1) Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "" + ?(Исправлена=1,"Результат записи исправлен вручную","Запись фиксирована") + ". Расчет не проводился.", , 1);

Возврат

КонецЕсли;

СтрокаПервыхЧасов = 0;

СтрокаОстальныхЧасов = 0;

Документ.ВыбратьСтроки();

Пока Документ.ПолучитьСтроку()=1 Цикл

Если (Документ.Сотрудник=Объект) и (Документ.ТипЧасов=Перечисление.ТипыЧасов.Сверхурочные15) Тогда

СтрокаПервыхЧасов = Документ.НомерСтроки

КонецЕсли;

Если (Документ.Сотрудник=Объект) и (Документ.ТипЧасов=Перечисление.ТипыЧасов.Сверхурочные20) Тогда

СтрокаОстальныхЧасов = Документ.НомерСтроки

КонецЕсли;

КонецЦикла;

Если (СтрокаПервыхЧасов = 0) и (СтрокаОстальныхЧасов = 0) Тогда

Если глРежимТрассировки = 1 Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "В документе """+глПредставлениеДокумента(Документ)+""" - не найдены записи ""отработано сверхурочных часов"" по сотруднику "+Объект+". Расчет не проводился.", , 1);

Иначе

глДобавитьСообщение(глОбработчикСообщений, "В документе """+глПредставлениеДокумента(Документ)+""" - не найдены записи ""отработано сверхурочных часов"" по сотруднику "+Объект+". Расчет не проводился.", Документ, , );

КонецЕсли;

Результат = 0;

Возврат

КонецЕсли;

Валюта = Объект.ВалютаОклада;

ТекстВВалюте = ?(Валюта.Выбран()=1," (в валюте: "+Валюта+")","руб.");

Если Документ.ПолнотаВводаДанных = 1 Тогда // подробные данные

глСообщениеТрассировки(глСообщенияТрассировки, "В документе введены подробные данные об отработанном за месяц времени - будут учтены все изменения расчетных данных работника в течение _П01.", 0, 1, ДатаОкончания, "ДММММГГГГ");

ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Объект,ДатаНачала,ДатаОкончания,"Оклад,ФормаТруда,ГрафикРаботы");

КоличествоСтрок = ТаблицаРеквизитов.КоличествоСтрок();

Если КоличествоСтрок > 1 Тогда

ВсегоНачислено = 0;

ВсегоЧасов = 0;

Для Номер = 1 по КоличествоСтрок Цикл

ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(Номер);

СледующаяДата = ?(Номер<КоличествоСтрок,ТаблицаРеквизитов.ПолучитьЗначение(Номер+1,"Дата")-1,ДатаОкончания);

// т.к. значений может быть несколько, берем последнее значение на дату

Если (Номер < КоличествоСтрок) и (ТаблицаРеквизитов.Дата >= ?(Номер<КоличествоСтрок,ТаблицаРеквизитов.ПолучитьЗначение(Номер + 1, "Дата"), ДатаОкончания)) Тогда

Продолжить

КонецЕсли;

НачальнаяДата = ТаблицаРеквизитов.Дата;

глСообщениеТрассировки(глСообщенияТрассировки, "Расчет ведется за период с _П01 по _П02", 0, 1, НачальнаяДата, "ДДДММММГГГГ", СледующаяДата, "ДДДММММГГГГ");

Если глФормаТрудаПоТарифуОкладу(ТаблицаРеквизитов.ФормаТруда)="Оклад" Тогда

// расчет "часовой ставки"

// если график работы не выбран используем основной график, установленный в константе

ГрафикРаботы = ТаблицаРеквизитов.ГрафикРаботы;

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "График работы сотрудника на _П01 не задан! Будет использоваться основной график предприятия.", 0, 1, СледующаяДата, "ДДДММММГГГГ");

ГрафикРаботы = Константа.ОсновнойГрафик;

КонецЕсли;

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда

Если глРежимТрассировки = 1 Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "Основной график работы предприятия не задан!", 1, 0);

Иначе

глДобавитьСообщение(глОбработчикСообщений, "Основной график работы предприятия не задан!", , , );

КонецЕсли;

Результат = 0;

Возврат

КонецЕсли;

ТарифСотрудника = глПолучитьСуммуИзРеквизита(ТаблицаРеквизитов.Оклад,СледующаяДата)/глПолучитьСреднемесячноеКолвоЧасов(ГрафикРаботы,СледующаяДата);

Иначе

ТарифСотрудника = глПолучитьСуммуИзРеквизита(ТаблицаРеквизитов.Оклад,СледующаяДата);

КонецЕсли;

Часов15 = 0;

Часов20 = 0;

Если СтрокаПервыхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаПервыхЧасов);

Для Сч = ДатаЧисло(НачальнаяДата) По ДатаЧисло(СледующаяДата) Цикл

ЧасовВДне = Документ.ПолучитьАтрибут("КолвоЧасов"+глДополнитьСтроку(Сч,2));

Часов15 = Часов15 + ЧасовВДне;

КонецЦикла;

КонецЕсли;

Если СтрокаОстальныхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаОстальныхЧасов);

Для Сч = ДатаЧисло(НачальнаяДата) По ДатаЧисло(СледующаяДата) Цикл

Часов20 = Часов20 + Документ.ПолучитьАтрибут("КолвоЧасов"+глДополнитьСтроку(Сч,2));

КонецЦикла;

КонецЕсли;

ВсегоЧасов = ВсегоЧасов + Часов15 + Часов20;

ПоТарифу = (Часов15*Константа.КоэффициентОплатыСверхУрочныхЧасовНачальный

+Часов20*Константа.КоэффициентОплатыСверхУрочныхЧасовПоследующих)

*ТарифСотрудника;

ПоТарифуВРублях = ПоТарифу;

Если (Валюта.Выбран() = 1) и (ПоТарифуВРублях > 0) Тогда

Кратность = Валюта.Кратность.Получить(СледующаяДата);

ПоТарифуВРублях = ПоТарифуВРублях * Валюта.Курс.Получить(СледующаяДата) / ?(Кратность=0,1,Кратность);

КонецЕсли;

глСообщениеТрассировки(глСообщенияТрассировки, "По состоянию на _П01: часовой тариф сотрудника составил _П02 "+ТекстВВалюте, 0, 0, СледующаяДата, "ДДДММММГГГГ",ТарифСотрудника, "Ч15.2");

глСообщениеТрассировки(глСообщенияТрассировки, "Отработано часов: " + (Часов15+Часов20) +", сумма к начислению: _П01 "+ТекстВВалюте+?(ПоТарифуВРублях = ПоТарифу,""," или в рублях - _П02"), 0, 0, ПоТарифу, "Ч15.2",ПоТарифуВРублях, "Ч15.2");

ВсегоНачислено = ВсегоНачислено + ПоТарифуВРублях;

КонецЦикла;

Результат = ВсегоНачислено;

Часы = ВсегоЧасов;

Возврат

Иначе

Часов15 = 0;

Часов20 = 0;

Если СтрокаПервыхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаПервыхЧасов);

Для Сч = ДатаЧисло(ДатаНачала) По ДатаЧисло(ДатаОкончания) Цикл

Часов15 = Часов15 +Документ.ПолучитьАтрибут("КолвоЧасов"+глДополнитьСтроку(Сч,2)) ;

КонецЦикла;

КонецЕсли;

Если СтрокаОстальныхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаОстальныхЧасов);

Для Сч = ДатаЧисло(ДатаНачала) По ДатаЧисло(ДатаОкончания) Цикл

Часов20 = Часов20 + Документ.ПолучитьАтрибут("КолвоЧасов"+глДополнитьСтроку(Сч,2));

КонецЦикла;

КонецЕсли;

КонецЕсли;

Иначе

глСообщениеТрассировки(глСообщенияТрассировки, "В документе указаны только суммарные данные об отработанном за месяц времени - все расчетные данные работника будут учтены по состоянию на _П01.", 0, 1, ДатаОкончания, "ДДДММММГГГГ");

ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Объект,НачМесяца(ДатаНачала),КонМесяца(ДатаОкончания),"СостояниеФизлица,Оклад,ФормаТруда,ГрафикРаботы");

ТаблицаРеквизитов.Свернуть("Дата", ""); // исключим таким образом несколько значений на одну дату

Если ТаблицаРеквизитов.КоличествоСтрок() > 1 Тогда

глДобавитьСообщение(глОбработчикСообщений, "У сотрудника "+Объект+" в "+ОписательПериода(ДатаОкончания) + " изменялись расчетные данные (оклад или график работы)! Введите подробные данные об отработанном времени.", Документ, , );

КонецЕсли;

Часов15 = 0;

Часов20 = 0;

Если СтрокаПервыхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаПервыхЧасов);

Часов15 = Часов15 + Документ.ВсегоЧасов;

КонецЕсли;

Если СтрокаОстальныхЧасов > 0 Тогда

Документ.ПолучитьСтрокуПоНомеру(СтрокаОстальныхЧасов);

Часов20 = Часов20 + Документ.ВсегоЧасов;

КонецЕсли;

КонецЕсли;

Если глФормаТрудаПоТарифуОкладу(Объект.ФормаТруда.Получить(ДатаОкончания))="Оклад" Тогда

// расчет "часовой ставки"

// если график работы не выбран используем основной график, установленный в константе

ГрафикРаботы = Объект.ГрафикРаботы.Получить(ДатаОкончания);

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "График работы сотрудника на _П01 не задан! Будет использоваться основной график предприятия.", 0, 1, ДатаОкончания, "ДДДММММГГГГ");

ГрафикРаботы = Константа.ОсновнойГрафик;

КонецЕсли;

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда

Если глРежимТрассировки = 1 Тогда

глСообщениеТрассировки(глСообщенияТрассировки, "Основной график работы предприятия не задан!", 1, 0);

Иначе

глДобавитьСообщение(глОбработчикСообщений, "Основной график работы предприятия не задан!", , , );

КонецЕсли;

Возврат

КонецЕсли;

ТарифСотрудника = глПолучитьСуммуИзРеквизита(Объект.Оклад.Получить(ДатаОкончания),ДатаОкончания)/глПолучитьСреднемесячноеКолвоЧасов(ГрафикРаботы,ДатаОкончания);

Иначе

ТарифСотрудника = глПолучитьСуммуИзРеквизита(Объект.Оклад.Получить(ДатаОкончания),ДатаОкончания);

КонецЕсли;

глСообщениеТрассировки(глСообщенияТрассировки, "По состоянию на _П01: часовой тариф сотрудника составил _П02 "+ТекстВВалюте, 0, 0, ДатаОкончания, "ДДДММММГГГГ",ТарифСотрудника, "Ч15.2");

ПоТарифу = (Часов15 *Константа.КоэффициентОплатыСверхУрочныхЧасовНачальный

+Часов20 *Константа.КоэффициентОплатыСверхУрочныхЧасовПоследующих)

*ТарифСотрудника;

ПоТарифуВРублях = ПоТарифу;

Если (Валюта.Выбран() = 1) и (ПоТарифуВРублях > 0) Тогда

Кратность = Валюта.Кратность.Получить(ДатаОкончания);

ПоТарифуВРублях = ПоТарифуВРублях * Валюта.Курс.Получить(ДатаОкончания) / ?(Кратность=0,1,Кратность);

КонецЕсли;
ВсегоЧасов = Часов15 + Часов20;

глСообщениеТрассировки(глСообщенияТрассировки, "Всего отработано праздничных часов: "+ВсегоЧасов+", сумма к начислению: _П01 "+ТекстВВалюте+?(ПоТарифуВРублях = ПоТарифу,""," или в рублях - _П02"), 0, 0, ПоТарифу, "Ч15.2",ПоТарифуВРублях, "Ч15.2");

Результат = ПоТарифуВРублях;

Часы = ВсегоЧасов;

КонецПроцедуры // ПровестиРасчет


написать администратору сайта