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