gifts2017

Пример использования показателей схем мотивации

Опубликовал Александр (shrek2) в раздел Программирование - Практика программирования

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

Способ расчета зарплаты

Оплата продавцов магазина производится процентом от месячного товарооборота магазина. Месячный оклад зав. магазином – 3100руб. до 200000 руб. (минимальный размер) товарооборота. При обороте свыше 200000 руб. заведующей магазина дополнительно к окладу с суммы превышения товарооборота начисляется заработная плата по существующим расценкам с рубля товарооборота на общих основаниях.

Оплата труда продавцов за товарооборот до 200000 руб. производится без учета зав. магазином по существующим расценкам.

Оплата труда продавцов за товарооборот свыше 200000 руб. производится с учетом зав. магазином по существующим расценкам.

Пример расчета:

Оборот составил 970000руб., процент от оборота – 3,7%.   

 Формула

  1. Заведующая   167 ч.*33,557126 = 5604,04+3100,00=8704,04 руб.
  2. Продавец 1      176 ч.*44,407565 = 7815,73 руб.
  3. Продавец 2      176 ч.*44,407565 = 7815,73 руб.
  4. Продавец 3      165 ч.*44,407565 = 7327,25 руб.
  5. Продавец 4      165 ч.*44,407565 = 7327,25 руб.       

                                 682ч./849ч.               35890,00 руб.

Для решения задачи завел в справочнике "Показатели схем мотивации" новые элементы.

Показатели схем мотивации

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

Обработка 1

Обработка 2

В форму обработки добавил кнопку "Расчет показателей", по нажатию которой и рассчитываются нижние показатели.

Некоторые куски кода обработки:

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

Ищу показатели по реквизиту "Идентификатор".

	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ 
| ЗначенияПоказателейСхемМотивации.Значение,
| ЗначенияПоказателейСхемМотивации.Показатель
|ИЗ
| РегистрСведений.ЗначенияПоказателейСхемМотивации КАК ЗначенияПоказателейСхемМотивации
|ГДЕ
| ЗначенияПоказателейСхемМотивации.ПериодДействия = &ПериодДействия
| И ЗначенияПоказателейСхемМотивации.Организация = &Организация
| И ЗначенияПоказателейСхемМотивации.Подразделение = &Подразделение
| И ЗначенияПоказателейСхемМотивации.Показатель В(&Показатель)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Значение,
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Показатель
|ИЗ
| РегистрСведений.ПериодическиеЗначенияПоказателейСхемМотивации.СрезПоследних(
| &ПериодДействия,
| Показатель.ВидПоказателя = ЗНАЧЕНИЕ(Перечисление.ВидыПоказателейСхемМотивации.ДляВсехОрганизаций)
| И Показатель В (&Показатель)) КАК ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних"
; Запрос.УстановитьПараметр("ПериодДействия", ПериодДействия); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Подразделение", Подразделение); Запрос.УстановитьПараметр("Показатель", мПоказатель); ТЗ = Запрос.Выполнить().Выгрузить();

Выбираю запросом значения заданных показателей из двух(!) РС: ЗначенияПоказателейСхемМотивации и ПериодическиеЗначенияПоказателейСхемМотивации (причем в последний как ни странно попадают показатели из вкладки "Постоянные"!).

Нахожу отработанное время суммарное и заведующей:

 
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ 
| РабочееВремяРаботниковОрганизацийОбороты.ЧасовОборот КАК ОтработаноЧасов
|ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(&ПериодНачало, &ПериодКонец, Месяц, Сотрудник В (&мСотрудники)) КАК РабочееВремяРаботниковОрганизацийОбороты
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РабочееВремяРаботниковОрганизацийОбороты.ЧасовОборот
|ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(&ПериодНачало, &ПериодКонец, Месяц, Сотрудник = &Заведующая) КАК РабочееВремяРаботниковОрганизацийОбороты"
; Запрос.УстановитьПараметр("мСотрудники", мСотрудники); Запрос.УстановитьПараметр("Заведующая", Заведующая); Запрос.УстановитьПараметр("ПериодНачало", НачалоМесяца(ПериодДействия)); Запрос.УстановитьПараметр("ПериодКонец", КонецМесяца(ПериодДействия)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();

Рассчитываю стоимость часа продавца и заведующей:

		ПроцентПоРознице = ПроцентПоРознице/100;	
		СтоимостьЧасаЗаведующей = (ВыручкаПоМагазину-ВыручкаПоМагазинуМинимальныйПорог)*ПроцентПоРознице/ОтРаботаноЧасовПоМагазинуВсего;
		СтоимостьЧасаПродавцовПредварительная = ВыручкаПоМагазинуМинимальныйПорог*ПроцентПоРознице/(ОтРаботаноЧасовПоМагазинуВсего-ОтРаботаноЧасовПоМагазинуЗаведующей);
		СтоимостьЧасаПродавцов = СтоимостьЧасаПродавцовПредварительная+СтоимостьЧасаЗаведующей;
 

Ну, и записываю результат в РС:

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

Создаю 2 новых вида расчета в видах расчета "Основные начисления организаций" для заведующей и продавцов.

Виды расчета 2

Расчет готов.

P.S.

С учетом замечаний вынес расчет показателей из модуля формы во внешнюю обработку заполнения ТЧ.

ВОЗТЧ

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

См. также

Подписаться Добавить вознаграждение
Комментарии
1. al petrov (petrov_al) 13.07.12 12:26
Очень толково, даже сам немного разобрался в механизме...так как плохо знал
2. Сергей Сергеев (Рамзес) 19.07.12 14:18
Судя по тексту примера значение показателя схем мотивации "Константа оборот" должно быть не 50000, а 200000.
3. Сергей Сергеев (Рамзес) 19.07.12 14:37
Решение неплохое, но минус его в том, что внесены изменения в типовую конфигурацию - добавлена кнопка на форму и код в модуль обработки. Я в подобной ситуации сделал иначе - код по заполнению значений показателей схем мотиваций вынес в обработку заполнения табличных частей. Она вызывается в документе "Начисление зарплаты работникам организаций" перед заполнением табличной части.
4. Александр (shrek2) 19.07.12 15:45
(2) Рамзес, Вы правы. Я для простоты опустил тот факт, что минимальный порог тоже рассчитывается по формуле: КонстантаОборот х (КоличествоПродавцовМагазина-1).
5. Александр (shrek2) 19.07.12 15:51
(3) Рамзес, отличная мысль. Надо будет попробовать.
6. Vladimir (Boroda) 26.07.12 11:53
С удовольствием и интересом прочитал. К сожалению, так мало разъяснений и примеров использования этого нужного механизма в литературе.... Так что эта статья очень даже будет востребована. Огромное спасибо!
Если будут ещё статьи подобного рода по использованию и настроек произвольных расчётов - с удовольствием поизучаю.
7. Максим Ветошкин (wakc) 25.01.13 17:09
Тут возникает проблема. При заполнении по нажатии на кнопку, регистр сведений заполняется, в зависимости от пользователя под которым был вход в 1с предприятие, то в режиме по центрам ответственности, то в режиме по структуре юр. лиц. Как можно бы было сделать только по центрам ответственности? Т.е. где можно выбирать режим формирования, который я хочу заполнить?
8. Максим Ветошкин (wakc) 04.02.13 08:20
Решение нашел. Не нужно было заполнять организацию.
9. Маргарита Михайлова (margo_m09) 09.04.13 14:21
с большим интересом прочитала, наконец-то разобралась что к чему в показателях мотивации
10. ljolsen bykova (ljolsen) 14.06.13 13:42
Большое спасибо автору, т.к. неожиданно возникла потребность в использовании схем.
11. Кубик Рубиков (Rammal) 20.09.13 08:43
На какой версии ЗУПа показан этот пример? У меня стоит версия 2.5 но в ней нет такой обработки, есть регистр "Значения показателей схем мотивации", но в нем можно вводить только ежемесячные значения, а как ввести постоянные я так и не нашел.
12. Михаил Заозерский (MikZ) 12.02.14 20:12
(11) Rammal, На закладке "Расчет зарплаты", обработка называется "Показатели расчета заработной платы"
13. poyson (poyson) 31.07.14 14:02
Спасибо - реально помог. у себя сделаем так же...
14. Гена Букин (Gen-buk) 11.04.16 12:02
Добрый день! Обработку где можно спросить /скачать?