среда, 4 марта 2015 г.

1c специалист задача 3.22

Условие из сборника:
Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно с использованием метода отклонений. Все сотрудники работают по графику работы, установленному для каждого подразделения отдельно. Не зависимо от отработанного времени сотрудникам предприятия ежемесячно выплачивается фиксированная сумма денег. Размер суммы одинаков для всех сотрудников. После проведения расчетов, в том же расчетном периоде размер суммы может быть признан ошибочным и подлежит исправлению. Сотрудники могут работать сверхурочно. За каждый час сверхурочно отработанного времени начисляется надбавка в размере 50% от среднего заработка за предыдущий месяц. Средний заработок рассчитывается как сумма всех начислений в прошлом месяце, поделенная на количество рабочих часов в этом месяце. Дополнительно, сотрудникам компании может быть начислена премия процентом от всех начислений, сделанных в предыдущем же расчетном периоде. Процент премии в течение периода начисления может изменяться не чаще, чем один раз в день, но берется на начало текущего расчетного периода. В информационной базе необходимо хранить историю изменения процента премии. Ежемесячно с сотрудников организации удерживается 1% от суммы всех начислений за период в качестве профсоюзных взносов. Создать обработку «Перерасчет зарплаты», в котором пользователь должен не только увидеть записи регистра расчета, которые возможно требуется пересчитать, но и выполнить саму процедуру перерасчета.
Объектперерасчета Видрасчета Сотрудник Подразделение Должность 

Ввод всех начислений происходит документом «Начисление зарплаты». Считать, что все данные вводятся только в пределах одного месяца. Необходимо предоставить пользователю возможность исправлять результат расчета в форме документа.
Решение:

1)  ПВР "Основные" начисления. Использует период действия, от базы не зависит. Из ВР поселим сюда "ПоОкладу" и "Сверхурочные".
 ПВР "Дополнительные начисления". Не использует период действия,  зависит от базы по периоду действия. Из ВР поселим сюда "ГарантированныйОклад" и "премию".
ПВР "Удержания". Не использует период действия,  зависит от базы по периоду регистрации. Из ВР сюда идет "Профсоюз".
Для каждого ВР Из списка(сверхурочные, премия, профсоюз) базовыми и ведущими видами расчетов будут все ВР из ПВР "Основные начисления" и дополнительные начисления".
2) Потребуется заполнить график . Для пятидневки шестидневки можно заполнить обычным способом доработав обработку заполнения. (подробнее). 
3) Добавляем  3 регистра расчета.
В каждый из них добавляем  объекты "перерасчет".  Для расчетов реквизит "Подразделение" не нужен, но он пригодится для обработки "Перерасчет"
4)  Добавляем РС "Гарантированные оклады" и дорабатываем РС "Сведения о сотрудниках"
5)  Переходим к документу "Начисление ЗП". Формируем первичные записи в обработке проведения.
Предоставим  возможность пользователю изменять результат расчета несколько иным способом: В ТЧ добавим реквизит "РучнаяКорректировка", если он = "Истина", то результат не рассчитываем а берем из значение введенного пользователем.
6) В процедуре общего модуля пишем алгоритмы расчета записей. Все они стандартны (расчет от базы).
7)  Ранее в заданиях уже встречалось требование сделать обработку перерасчета записей. 
Сейчас я ее немножко усовершенствую. Ранее обработка просто перепроводила документы (объекты перерасчета), сейчас она перезаписывает только необходимые записи.

&НаСервере
Процедура ВыполнитьПерерасчетНаСервере()
Для Каждого ТекСтрока Из ТаблицаПерерасчетов Цикл
ВР = ТекСтрока.ВидРасчета;
МассивСотрудников = Новый("Массив");
Если ВР = ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные Тогда
НаборЗаписей = РегистрыРасчета.ОсновныеНачисления.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Значение = ТекСтрока.ОбъектПерерасчета; 
НаборЗаписей.Прочитать(); 
МассивСотрудников.Добавить(ТекСтрока.Сотрудник);
Расчет.РассчитатьНачисления(НаборЗаписей,ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные, МассивСотрудников);
ИначеЕсли ВР = ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда
НаборЗаписей = РегистрыРасчета.ДополнительныеНачисления.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Значение = ТекСтрока.ОбъектПерерасчета; 
НаборЗаписей.Прочитать(); 
Расчет.РассчитатьДополнительныеНачисления(НаборЗаписей,ПланыВидовРасчета.ДополнительныеНачисления.Премия, МассивСотрудников);
КонецЕсли
КонецЦикла
КонецПроцедуры

Скачать решение задачи 3.22




Комментариев нет:

Отправить комментарий