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

- Заведующая 167 ч.*33,557126 = 5604,04+3100,00=8704,04 руб.
- Продавец 1 176 ч.*44,407565 = 7815,73 руб.
- Продавец 2 176 ч.*44,407565 = 7815,73 руб.
- Продавец 3 165 ч.*44,407565 = 7327,25 руб.
- Продавец 4 165 ч.*44,407565 = 7327,25 руб.
682ч./849ч. 35890,00 руб.
Для решения задачи завел в справочнике «Показатели схем мотивации» новые элементы.

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


В форму обработки добавил кнопку «Расчет показателей», по нажатию которой и рассчитываются нижние показатели.
Некоторые куски кода обработки:
мПоказатель = Новый Массив; мПоказатель.Добавить(Справочники.ПоказателиСхемМотивации.НайтиПоРеквизиту("Идентификатор","ВыручкаПоМагазину")); мПоказатель.Добавить(Справочники.ПоказателиСхемМотивации.НайтиПоРеквизиту("Идентификатор","ПроцентПоРознице")); мПоказатель.Добавить(Справочники.ПоказателиСхемМотивации.НайтиПоРеквизиту("Идентификатор","КонстантаОборот"));
Ищу показатели по реквизиту «Идентификатор».
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ЗначенияПоказателейСхемМотивации.Значение,
| ЗначенияПоказателейСхемМотивации.Показатель
|ИЗ
| РегистрСведений.ЗначенияПоказателейСхемМотивации КАК ЗначенияПоказателейСхемМотивации
|ГДЕ
| ЗначенияПоказателейСхемМотивации.ПериодДействия = &ПериодДействия
| И ЗначенияПоказателейСхемМотивации.Организация = &Организация
| И ЗначенияПоказателейСхемМотивации.Подразделение = &Подразделение
| И ЗначенияПоказателейСхемМотивации.Показатель В(&Показатель)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Значение,
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Показатель
|ИЗ
| РегистрСведений.ПериодическиеЗначенияПоказателейСхемМотивации.СрезПоследних(
| &ПериодДействия,
| Показатель.ВидПоказателя = ЗНАЧЕНИЕ(Перечисление.ВидыПоказателейСхемМотивации.ДляВсехОрганизаций)
| И Показатель В (&Показатель)) КАК ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних"; Запрос.УстановитьПараметр("ПериодДействия", ПериодДействия); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Подразделение", Подразделение); Запрос.УстановитьПараметр("Показатель", мПоказатель); ТЗ = Запрос.Выполнить().Выгрузить();
Выбираю запросом значения заданных показателей из двух(!) РС: ЗначенияПоказателейСхемМотивации и ПериодическиеЗначенияПоказателейСхемМотивации (причем в последний как ни странно попадают показатели из вкладки «Постоянные»!).
Нахожу отработанное время суммарное и заведующей:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| РабочееВремяРаботниковОрганизацийОбороты.ЧасовОборот КАК ОтработаноЧасов
|ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(&ПериодНачало, &ПериодКонец, Месяц, Сотрудник В (&мСотрудники)) КАК РабочееВремяРаботниковОрганизацийОбороты
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РабочееВремяРаботниковОрганизацийОбороты.ЧасовОборот
|ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(&ПериодНачало, &ПериодКонец, Месяц, Сотрудник = &Заведующая) КАК РабочееВремяРаботниковОрганизацийОбороты"; Запрос.УстановитьПараметр("мСотрудники", мСотрудники); Запрос.УстановитьПараметр("Заведующая", Заведующая); Запрос.УстановитьПараметр("ПериодНачало", НачалоМесяца(ПериодДействия)); Запрос.УстановитьПараметр("ПериодКонец", КонецМесяца(ПериодДействия)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Рассчитываю стоимость часа продавца и заведующей:
ПроцентПоРознице = ПроцентПоРознице/100; СтоимостьЧасаЗаведующей = (ВыручкаПоМагазину-ВыручкаПоМагазинуМинимальныйПорог)*ПроцентПоРознице/ОтРаботаноЧасовПоМагазинуВсего; СтоимостьЧасаПродавцовПредварительная = ВыручкаПоМагазинуМинимальныйПорог*ПроцентПоРознице/(ОтРаботаноЧасовПоМагазинуВсего-ОтРаботаноЧасовПоМагазинуЗаведующей); СтоимостьЧасаПродавцов = СтоимостьЧасаПродавцовПредварительная+СтоимостьЧасаЗаведующей;
Ну, и записываю результат в РС:
Для каждого СтрокаТЗ Из ТЗ Цикл
НаборЗаписей = РегистрыСведений.ЗначенияПоказателейСхемМотивации.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПериодДействия.Установить(ПериодДействия); НаборЗаписей.Отбор.Организация.Установить(Организация); НаборЗаписей.Отбор.Подразделение.Установить(Подразделение); НаборЗаписей.Отбор.Показатель.Установить(СтрокаТЗ.Показатель); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.ПериодДействия = ПериодДействия; НоваяЗапись.Организация = Организация; НоваяЗапись.Подразделение = Подразделение; НоваяЗапись.Показатель = СтрокаТЗ.Показатель; НоваяЗапись.Значение = СтрокаТЗ.Значение; НаборЗаписей.Записать(); КонецЦикла;
Создаю 2 новых вида расчета в видах расчета «Основные начисления организаций» для заведующей и продавцов.
Расчет готов.
P.S.
С учетом замечаний вынес расчет показателей из модуля формы во внешнюю обработку заполнения ТЧ.

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









Очень толково, даже сам немного разобрался в механизме…так как плохо знал
Судя по тексту примера значение показателя схем мотивации «Константа оборот» должно быть не 50000, а 200000.
Решение неплохое, но минус его в том, что внесены изменения в типовую конфигурацию — добавлена кнопка на форму и код в модуль обработки. Я в подобной ситуации сделал иначе — код по заполнению значений показателей схем мотиваций вынес в обработку заполнения табличных частей. Она вызывается в документе «Начисление зарплаты работникам организаций» перед заполнением табличной части.
(2) Рамзес, Вы правы. Я для простоты опустил тот факт, что минимальный порог тоже рассчитывается по формуле: КонстантаОборот х (КоличествоПродавцовМагазина-1).
(3) Рамзес, отличная мысль. Надо будет попробовать.
С удовольствием и интересом прочитал. К сожалению, так мало разъяснений и примеров использования этого нужного механизма в литературе…. Так что эта статья очень даже будет востребована. Огромное спасибо!
Если будут ещё статьи подобного рода по использованию и настроек произвольных расчётов — с удовольствием поизучаю.
Тут возникает проблема. При заполнении по нажатии на кнопку, регистр сведений заполняется, в зависимости от пользователя под которым был вход в 1с предприятие, то в режиме по центрам ответственности, то в режиме по структуре юр. лиц. Как можно бы было сделать только по центрам ответственности? Т.е. где можно выбирать режим формирования, который я хочу заполнить?
Решение нашел. Не нужно было заполнять организацию.
с большим интересом прочитала, наконец-то разобралась что к чему в показателях мотивации
Большое спасибо автору, т.к. неожиданно возникла потребность в использовании схем.
На какой версии ЗУПа показан этот пример? У меня стоит версия 2.5 но в ней нет такой обработки, есть регистр «Значения показателей схем мотивации», но в нем можно вводить только ежемесячные значения, а как ввести постоянные я так и не нашел.
(11) Rammal, На закладке «Расчет зарплаты», обработка называется «Показатели расчета заработной платы»
Спасибо — реально помог. у себя сделаем так же…
Добрый день! Обработку где можно спросить /скачать?