gifts2017

Доплата за период нахождения в командировке

Опубликовал Антон (woozee) в раздел Обработки - Обработка документов

Описание варианта создания расчета доплаты "за период нахождения в командировке" для документа "Начисление зарплаты работникам организаций".

По просьбам решил выложить свой способ расчета доплаты сотрудникам, в период нахождения их в командировке, если они заработали меньше чем работали бы без нее.

По скольку у каждой организации разновсяческие доплаты, премии, и пр. сделать универсальную обработку достаточно не легко, что бы она подошла всем. Но что бы было что нибудь - попробую описать что и где надо допиливать и переделывать что бы у вас тоже заработало мое предложение.

Задача стояла сделать расчет доплаты до среднего заработка автоматизированной в документе "Начисление зарплаты работникам организаций".

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

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

А теперь про обработку...

За основу берется предопределенный элемент Планов видов расчета "Оплата по среднему заработку командировок" (00031), по которому расчитана у сотрудника командировка. Если у вас она не так называется - меняем называние в 18 стр.

Запрос.УстановитьПараметр("ВидРасчета",ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оплата по среднему заработку командировок"));

Далее с 118 стр. идет перебор всех видов расчета которые есть у сотрудников. Если они соответсвуют нашим отборам то они записываются в значения для дальнейшего расчета. Тут уже ваш выход и нужно будет немного поменять названия начислений и переменные куда они будут записываться. Сначало идут Основные начисления, затем по аналогии дополнительные

                                пСотрудникМесОклад 			= 0;
				пСотрудникРК 				= 0;
				пСотрудникСН 				= 0;
				пСотрудникДзС1_151 			= 0;
				пСотрудникДзС3_151Ф 		= 0;
				пСотрудникСекретность 		= 0;
				пСотрудникПзМесяц 			= 0;
				пСотрудникПерсНадб_56 		= 0; 
				пСотрудникПремияПерсНадб_74 = 0;
				
				Пока РезультатЗапроса3.Следующий() Цикл
					Область = Макет.ПолучитьОбласть("Строка");
					Область.Параметры.Сотрудник = РезультатЗапроса.Сотрудник;
					
					//Информативность ==================================
					//Сообщить(РезультатЗапроса.Сотрудник);
					Если РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням Тогда 
						пСотрудникМесОклад = РезультатЗапроса3.Результат;
						Область.Параметры.Вид = "Оклад";
						Область.Параметры.Число = пСотрудникМесОклад;
						
						//Информативность ==================================
						//Сообщить("пСотрудникМесОклад="+""+пСотрудникМесОклад);
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифЧасовой Тогда
						КоличествоЧасов = ПолучениеЧасовВМесяце(РезультатЗапроса.ГрафикРаботы,Объект.ПериодРегистрации);
						пСотрудникМесОклад = КоличествоЧасов*РезультатЗапроса3.Результат;
						Область.Параметры.Вид = "Оклад";
						Область.Параметры.Число = пСотрудникМесОклад;
						
						//Информативность ==================================
						//Сообщить("пСотрудникМесОклад="+""+пСотрудникМесОклад);
					//КонецЕсли;
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.РайонныйКоэффициент Тогда
						пСотрудникРК = РезультатЗапроса3.Результат/100;
						Область.Параметры.Вид = "Районный коэф";
						Область.Параметры.Число = пСотрудникРК;
						
						//Информативность ==================================
						//Сообщить("пСотрудникРК="+""+пСотрудникРК);
					//КонецЕсли;
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.СевернаяНадбавка Тогда
						пСотрудникСН = 80/100;
						Область.Параметры.Вид = "Северная надбавка";
						Область.Параметры.Число = пСотрудникСН;
						
						//Информативность ==================================
						//Сообщить("пСотрудникСН= "+""+пСотрудникСН);
					//КонецЕсли;
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Доплата за совмещение 1 ст.151 ТК") Тогда
						пСотрудникДзС1_151 = РезультатЗапроса3.Результат/100;
						//Область = Макет.ПолучитьОбласть("Строка");
						Область.Параметры.Вид = "Доплата за совмещение 1 ст.151 ТК";
						Область.Параметры.Число = пСотрудникДзС1_151;
						
						//Информативность ==================================
						//Сообщить("пСотрудникДзС1_151="+""+пСотрудникДзС1_151);
					//КонецЕсли;
					
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Доплата за совмещение 3 ст.151 ТК фикс.суммой") Тогда
						пСотрудникДзС3_151Ф = РезультатЗапроса3.Результат;
						Область.Параметры.Вид = "Доплата за совмещение 3 ст.151 ТК фикс.суммой";
						Область.Параметры.Число = пСотрудникДзС3_151Ф;
						//
						//Информативность ==================================
						//Сообщить("пСотрудникДзС3_151Ф="+""+пСотрудникДзС3_151Ф);
					//КонецЕсли;
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Надбавка за секретность") Тогда	
						пСотрудникСекретность = 10/100;
						Область.Параметры.Вид = "Надбавка за секретность";
						Область.Параметры.Число = пСотрудникСекретность;
						
						//Информативность ==================================
						//Сообщить("пСотрудникСекретность= "+""+пСотрудникСекретность);
					ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Персональная надбавка (п.5.6)") Тогда	
						пСотрудникПерсНадб_56 = РезультатЗапроса3.Результат;
						Область.Параметры.Вид = "Персональная надбавка (п.5.6)";
						Область.Параметры.Число = пСотрудникПерсНадб_56;
					//ИначеЕсли РезультатЗапроса3.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Премия на персональную надбавку (оклад) п.7.4") Тогда	
					//	пСотрудникПерсНадб_56 = РезультатЗапроса3.Результат;
					//	Область.Параметры.Вид = "Премия на персональную надбавку (оклад) п.7.4";
					//	Область.Параметры.Число = пСотрудникПерсНадб_56;
						
					Иначе
					//Информативность ==================================
						//Сообщить(""+РезультатЗапроса.Сотрудник+": не учтен основной вид расчета "+""+РезультатЗапроса3.ВидРасчета,СтатусСообщения.Важное);
					КонецЕсли;

Можно использовать сообщение "не учтен основной/дополнительный вид расчета" как план к дальнейшим действиям (мало ли забыли чего). Сообщение это надо будет раскоментировать, подвериться и что бы в будущем не мешал - снова закоментировать.

После 239стр. (Формулы) идет расчет показателей зарплат, тут вам надо будет состряпать то что вы выше запихали в переменные в зарплату (это если бы сотрудник не был в командировке) и собственно сам расчет доплаты...

                                СотрудникДзС1_151 = пСотрудникМесОклад*пСотрудникДзС1_151;
				СотрудникДзС3_151Ф = пСотрудникДзС3_151Ф;
				СотрудникСекретность = пСотрудникМесОклад*пСотрудникСекретность;
				СотрудникПзМесяц = (пСотрудникМесОклад+СотрудникДзС1_151+СотрудникДзС3_151Ф)*пСотрудникПзМесяц;
                СотрудникРК = (пСотрудникМесОклад+СотрудникДзС1_151+СотрудникДзС3_151Ф+СотрудникСекретность+СотрудникПзМесяц)*пСотрудникРК;
				СотрудникСН = (пСотрудникМесОклад+СотрудникДзС1_151+СотрудникДзС3_151Ф+СотрудникСекретность+СотрудникПзМесяц)*пСотрудникСН;
				пСотрудникПремияПерсНадб_74 = пСотрудникПерсНадб_56 * пСотрудникПремияПерсНадб_74;	
			    СотрудникЗП =  пСотрудникМесОклад+СотрудникДзС1_151+СотрудникДзС3_151Ф+СотрудникСекретность
								+СотрудникПзМесяц+СотрудникРК+СотрудникСН+пСотрудникПерсНадб_56+пСотрудникПремияПерсНадб_74;
				
				Попытка
					СрДнВКом = РезультатЗапроса.Результат/РезультатЗапроса.ОплаченоДнейЧасов;
					СрДнМес = СотрудникЗП/РезультатЗапроса2.КоличествоРабДней;
					Разность = СрДнМес - СрДнВКом; 
					Доплата = Разность*РезультатЗапроса.ОплаченоДнейЧасов;
				Исключение
					Сообщить("Информация об ошибке:"+Символы.ПС + "Сотрудник: " + Строка.Сотрудник +Символы.ПС
					            + "Средний по командировке = " +РезультатЗапроса.Результат + " , " + "Оплачено дней/часов = "+ РезультатЗапроса.ОплаченоДнейЧасов + Символы.ПС
					            + "Зарплата = "+ СотрудникЗП+ " , "+ "Кол-во рабочих дней = "+ РезультатЗапроса2.КоличествоРабДней + Символы.ПС
					            + "Ошибка при расчете: (ЗП/КолРабДней - Средний/ОплаченоДнейЧасов)*ОплаченоДнейЧасов");
					Доплата = -1;
				КонецПопытки;

У нас доплата называется "Доплата за период нахождения в командировке", созданная в дополнительных начислений по формуле "Фиксированная сумма". Ваше название нужно подстанавливать в стр. 267

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

 

Результат наших расчетов добавляется в табличную часть "Дополнительные начисления" документа. И попутно вылетает что то типа отчета с параметрами из расчета (для того что бы бух мало ли что проверил)

УСТАНОВКА.

Качаем, сохраняем. Идем в "Сервис-Внешние обработки и отчеты-Дополнительные обработки табличных частей", добавляем новый элемент. Жмем кнопку "Заменить файл внешней обработки", выбираем скаченную обработку. В табличной части "Принадлежность обработки по заполнению табличных частей" добавляем новую строчку, "Представление объекта - выбираем документ"Начисление зарплаты работникам организаций", табличная часть-"Дополнительные начисления", представление кнопки-"Начисление доплаты за нахождение в командировке", и жмем ОК. После этого в документе "Начисление зарплаты работникам организаций" в табличной части "Дополнительные начилсения" в подменю "Заполнить" появится вышеуказанная кнопочка.

Соответсвенно после исправлении обработки перепривязываем ее по кнопке "Заменить файл внешней обработки"

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка для заполнения доплат
.epf 11,17Kb
18.02.15
12
.epf 11,17Kb 12 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алися Аглямутдинова (Alisya) 20.06.15 15:45
Не нашла куда установить в 1с 8.3 ЗУП
2. Антон (woozee) 24.06.15 16:30
(1) Alisya, обработка для ЗУП 2.5, как работает или нет на ЗУП 3.0 - не знаю
3. Альберт (albertik88) 22.10.15 16:32
(2) woozee, на 3.0 уж явно не работает, не тупите!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа