В типовой конфигурации 1С:Управление торговлей 11 (УТ 11) предусмотрен механизм расчета премий менеджерам по продажам. Обычно он позволяет рассчитывать вознаграждение как процент от суммы продаж или суммы оплат. Однако часто бизнесу требуется более гибкая система мотивации, например, расчет бонуса от валовой прибыли по сделкам. Стандартные настройки этого не позволяют, но механизм, заложенный в систему, достаточно гибок для доработки.
Рассмотрим по шагам, как добавить собственный показатель работы менеджера в базу для расчета премий и настроить его использование.
Прежде чем вносить изменения, давайте разберемся, как устроен типовой механизм. В основе системы расчета лежит объект метаданных План видов расчета "РасчетнаяБаза". Этот объект содержит предопределенные элементы, которые служат базовыми показателями для формул расчета премий.
Стандартные предопределенные показатели в УТ 11 включают:
СуммаПродаж — общая сумма выручки по документам реализации, при этом полезно контролировать отгрузку и оплаты.СуммаОплаты — сумма денежных средств, поступивших от клиента, а также взаиморасчеты.СуммаВозвратов — сумма по документам возврата от клиента.Когда вы создаете новый вид расчета премии (в справочнике Виды расчетов с менеджерами), вы задаете способ расчета — процентом или суммой. Если выбран процент, то в качестве базы используется один из этих показателей. Однако система позволяет использовать и более сложные формулы, комбинируя эти базовые показатели. Например, можно задать формулу: (СуммаПродаж - СуммаВозвратов) * 0.05, что будет означать премию 5% от продаж за вычетом возвратов.
Наша задача — добавить в этот список новый базовый показатель, например, ВаловаяПрибыль (используя наработки из раздела валовая прибыль, себестоимость и рентабельность), чтобы затем использовать его в формулах.
Просто создать новый элемент в плане видов расчета РасчетнаяБаза недостаточно. Система должна "понять", откуда брать числовое значение для этого показателя. Эти данные не появляются из воздуха — они рассчитываются и записываются в специальный регистр накопления РасчетыСМенеджерами с помощью регламентного задания или при ручном запуске обработки расчета.
Чтобы найти место, где происходит этот расчет, нужно обратиться к коду конфигурации. Ключевая процедура, отвечающая за подготовку данных, находится в общем модуле МенеджерПродаж. Процедура называется ЗаполнитьДанныеДляРасчетаПремий.
Проанализируем ее логику. Эта процедура формирует запросы к регистрам данных (например, ВыручкаИСебестоимостьПродаж), получает суммы продаж, оплат и возвратов в разрезе менеджеров, сделок и документов, а затем записывает эти данные в регистр РасчетыСМенеджерами. Каждая запись в этом регистре имеет измерение ВидРасчета, куда и подставляется ссылка на соответствующий элемент плана видов расчета (СуммаПродаж, СуммаОплаты и т.д.).
Именно в эту процедуру нам и нужно будет внести изменения, чтобы научить систему рассчитывать наш новый показатель — валовую прибыль.
Разберем весь процесс на конкретных шагах. Важно: все доработки конфигурации рекомендуется выполнять через механизм расширений, чтобы не снимать конфигурацию с поддержки и не усложнять дальнейшие обновления.
Первым делом определим наш новый показатель в системе. Для этого откроем конфигуратор и найдем объект План видов расчета "РасчетнаяБаза". В режиме предприятия к нему прямого доступа нет, поэтому все действия выполняются в конфигураторе.
В разделе "Предопределенные" добавим новый элемент:
ВаловаяПрибыльЭто имя ВаловаяПрибыль станет идентификатором, который мы будем использовать в формулах и в коде.
Теперь самое главное — научить систему рассчитывать этот показатель. Создадим новое расширение конфигурации.
В расширение добавим заимствованный общий модуль МенеджерПродаж. Используя аннотацию &Вместо("ЗаполнитьДанныеДляРасчетаПремий"), мы можем полностью переопределить поведение типовой процедуры. Однако более правильным подходом будет использование аннотации &После("ЗаполнитьДанныеДляРасчетаПремий"), чтобы сначала выполнилась типовая логика, а затем наша, добавляющая расчет валовой прибыли. Это сделает код более устойчивым к обновлениям.
В процедуре нашего расширения необходимо реализовать следующую логику:
ВыручкаИСебестоимостьПродаж. Запрос должен выбирать данные в нужных разрезах (менеджер, сделка, заказ клиента и т.д.) и рассчитывать валовую прибыль как разницу между суммой выручки и себестоимостью (включая доп. расходы).
Примерный текст запроса может выглядеть так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВыручкаИСебестоимостьПродажОбороты.Сделка КАК Сделка,
| ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента КАК ЗаказКлиента,
| ВыручкаИСебестоимостьПродажОбороты.Менеджер КАК Менеджер,
| ВыручкаИСебестоимостьПродажОбороты.ДокументПродажи КАК ДокументПродажи,
| СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) - СУММА(ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) КАК ВаловаяПрибыль
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ВыручкаИСебестоимостьПродажОбороты
|
|СГРУППИРОВАТЬ ПО
| ВыручкаИСебестоимостьПродажОбороты.Сделка,
| ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента,
| ВыручкаИСебестоимостьПродажОбороты.Менеджер,
| ВыручкаИСебестоимостьПродажОбороты.ДокументПродажи";
// Устанавливаем параметры запроса (период расчета и т.д.)
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
РасчетыСМенеджерами.
Движения.РасчетыСМенеджерами.Записывать = Истина;
Для Каждого Строка Из РезультатЗапроса Цикл
Движение = Движения.РасчетыСМенеджерами.Добавить();
Движение.Период = КонецПериода;
Движение.ВидРасчета = ПланыВидовРасчета.РасчетнаяБаза.ВаловаяПрибыль; // Используем наш новый показатель
Движение.Сделка = Строка.Сделка;
Движение.ЗаказКлиента = Строка.ЗаказКлиента;
Движение.Менеджер = Строка.Менеджер;
Движение.Документ = Строка.ДокументПродажи;
Движение.Сумма = Строка.ВаловаяПрибыль;
КонецЦикла;
Важно: этот код является упрощенным примером. В реальной конфигурации нужно учитывать множество нюансов, таких как передача параметров периода, отборов и корректная работа с менеджером транзакций.
После того как техническая часть выполнена, остается настроить новый вид расчета в режиме "1С:Предприятие".
ВаловаяПрибыль * 0.1. Это будет означать, что премия составляет 10% от валовой прибыли.Теперь этот вид расчета можно использовать в правилах расчета премий для конкретных менеджеров или подразделений.
Таким образом, мы расширили стандартную функциональность системы, не внося изменений в основной код конфигурации. Этот подход позволяет гибко настраивать систему мотивации, добавляя любые необходимые бизнесу показатели, будь то маржинальность, количество проданных позиций или любой другой измеримый KPI, данные для которого можно получить с помощью запроса.