понедельник, 23 февраля 2015 г.

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

Условие задачи из сборника:

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

Сумма продаж, руб.  Процент
до 10 000                          5
от 10 000 до 30 000         7
от 30 000                         10

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

Бригада  Сотрудник Сумма продаж   %надбавки   Сумма премии

Отчет может быть построен за любой расчетный период.

Решение задачи:



1) ПВР "Основные" начисления. Использует период действия, от базы не зависит. Из ВР поселим сюда "Тариф".
 ПВР "Дополнительные начисления". Не использует период действия,  зависит от базы по периоду регистрации. Из ВР поселим сюда "Бригадирские". и "Надбавку за продажи".

2) Потребуется заполнить график для бригад. Для пятидневки шестидневки можно заполнить обычным способом доработав обработку заполнения. (подробнее). Для заполнения графиков для бригад  берем обработку Павла Чистова. Там несложный  алгоритм, думаю много времени на экзамене не займет.

3) Добавляем регистры расчета и немножко "шлифуем" документ "Начисление ЗП".

4) Потребуется написать процедуру расчета 3 записей.
 4.1) "По Тарифу". Здесь все стандартно: Формируем первичные записи в обработке проведения(в реквизит параметр записываем значение часового тарифа), а в общем модуле получаем фактическое количество отработанных часов , которое умножаем на значение тарифа.
4.2) "Надбавка за продажи". Расчет аналогичен расчету из предыдущей задачи(Задача 3.17)
4.3) "Бригадирские". Вот это действительно новый момент. Здесь необходимо в качестве измерений основного и базового регистра передать массив со значением "Подразделение" и указать в качестве разреза массив со значением "Сотрудник", а в остальном вроде бы ничего страшного.
Процедура РассчитатьДополнительныеНачисления(Набор,ВидРасчета,МассивСотрудников) Экспорт
Регистратор=Набор.Отбор.Регистратор.Значение;
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| ДополнительныеНачисленияБазаДополнительныеНачисления.НомерСтроки,
| ДополнительныеНачисленияБазаДополнительныеНачисления.СотрудникРазрез,
| ЕСТЬNULL(ДополнительныеНачисленияБазаДополнительныеНачисления.РезультатБаза, 0) КАК РезультатБаза
|ПОМЕСТИТЬ Таб
|ИЗ
| РегистрРасчета.ДополнительныеНачисления.БазаДополнительныеНачисления(
| &Измерения,
| &Измерения,
| &Разрез,
| Регистратор = &Регистратор
| И ВидРасчета = &ВидРасчета) КАК ДополнительныеНачисленияБазаДополнительныеНачисления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таб.НомерСтроки,
| МАКСИМУМ(Таб.РезультатБаза) КАК РезультатБаза
|ИЗ
| Таб КАК Таб
|
|СГРУППИРОВАТЬ ПО
| Таб.НомерСтроки";
Запрос.УстановитьПараметр("ВидРасчета", ВидРасчета);
Измерения=Новый Массив;
Измерения.Добавить("Подразделение");
Запрос.УстановитьПараметр("Измерения", Измерения);
Разрез=Новый массив;
Разрез.Добавить("Сотрудник" );
Запрос.УстановитьПараметр("Разрез", Разрез);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() тогда
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Для каждого Запись из Набор цикл
Если Запись.ВидРасчета <> ВидРасчета Тогда
Продолжить;
КонецЕсли;
Если  ВыборкаДетальныеЗаписи.НайтиСледующий(Запись.НомерСтроки,"НомерСтроки") тогда
Запись.Результат= Запись.Параметр*ВыборкаДетальныеЗаписи.РезультатБаза/100;
КонецЕсли;
ВыборкаДетальныеЗаписи.Сбросить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
 5) Отчет. Для того чтобы легко построить отчет требуемой формы добавим в регистр "дополнительные" начисления" реквизит "Сумма продаж", который сразу заполним в обработке проведения, а процент запишем в реквизит "параметр"

Остался непонятным такой момент "Информация  о  должностях  сотрудников  должна  быть  взята из информационной базы."
Каким образом составители хотели видеть решение задачи? Зачем здесь должности?
Может быть для того чтобы проверить начисляются ли бригадирские именно бригадиру, а не кому попало. В этом случае можно просто добавить проверку в расчет бригадирских, и если выяснится  что сотрудник "самозванец", а не бригадир, то результатом расчета будет равен 0. Как то так.

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

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