Разбор от сообщества: Настройка автоматизированного учета кадров в 1С:ЗУП 3.1
Автоматизация кадрового учёта в 1С:ЗУП 3.1 давно стала стандартом, но даже в типовых механизмах расчёта аванса скрывается ловушка, о которой молчат инструкции. Анализируем, почему «Кадровый перевод» в середине месяца может не пересчитать аванс, и как это приводит к ошибкам в зарплате за месяц. Статья для тех, кто уже устал от поверхностных чек-листов и хочет понять механику изнутри.
Как работает расчёт аванса в ЗУП 3.1: детальный разбор
Большинство специалистов знают, что аванс (зарплата за первую половину месяца) в ЗУП 3.1 рассчитывается на основании плановых начислений, зафиксированных в регистре сведений ПлановыеНачисления. Однако мало кто задумывается, как именно программа выбирает сумму на дату расчёта аванса.
По умолчанию при расчёте аванса (документ Начисление зарплаты с видом расчёта Аванс) система берёт плановые начисления, действующие на дату начала месяца (или на дату документа, если она задана). Но есть нюанс: если используется способ расчёта аванса «Процент от оклада» или «Фиксированной суммой», то алгоритм обращается к регистру ПлановыеНачисления с отбором по периоду действия, который определяется датой начала начисления (реквизит ДействиеПериодНачала).
Регистр «ПлановыеНачисления» и его роль
Регистр сведений ПлановыеНачисления хранит записи о каждом плановом начислении сотрудника с указанием периода действия. При кадровом переводе (документ Кадровый перевод) создаётся новая запись в этом регистре с датой начала действия, равной дате перевода. Старая запись закрывается (устанавливается дата окончания).
Проблема возникает, когда дата перевода попадает на тот же день, что и дата расчёта аванса, или когда перевод оформлен задним числом, а документ не перепроведён. В этом случае программа может «увидеть» старую запись, если новая ещё не активна на момент расчёта.
Ключевой тезис: Аванс рассчитывается по плановым начислениям, действующим на дату начала месяца, а не на дату фактического расчёта. Это приводит к тому, что перевод, сделанный после 1-го числа, не влияет на аванс за текущий месяц, если только не используется способ «Расчёт за первую половину месяца».
Ловушка: кадровый перевод в середине месяца и аванс
Рассмотрим типовую ситуацию. Сотрудник принят на работу с окладом 50 000 руб., способ расчёта аванса — «Процент от оклада» (40%). 15-го числа месяца он переводится на другую должность с окладом 70 000 руб. Ожидание: аванс за первую половину месяца должен быть рассчитан пропорционально: за 14 дней по 50 000 и за 1 день по 70 000? Или хотя бы по новому окладу, если перевод был до 15-го?
На практике ЗУП 3.1 (типовое поведение) при способе «Процент от оклада» берёт плановое начисление, действующее на 1-е число месяца. Поскольку на 1-е число действовал оклад 50 000, аванс будет рассчитан как 40% от 50 000 = 20 000 руб. Новый оклад 70 000 вступит в силу только с 15-го числа, и на аванс он не повлияет. Это логично, если аванс считается за первую половину месяца, но многие ожидают, что перевод «пересчитает» аванс.
Ещё более коварная ситуация — когда перевод оформлен задним числом (например, 14-го числа, но документ проведён 16-го). Если расчёт аванса был выполнен 15-го, то он уже зафиксирован. Перепроведение документа перевода не пересчитает аванс автоматически — потребуется перезаполнить и перепровести документ начисления аванса.
Пример кода: как проверить плановые начисления на дату аванса
Чтобы выявить проблему, можно выполнить запрос к регистру сведений ПлановыеНачисления на интересующую дату. Ниже приведён корректный код для получения размера оклада на заданную дату.
Функция ПолучитьОкладНаДату(Сотрудник, Дата)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПлановыеНачисления.Сумма КАК Сумма
|ИЗ
| РегистрСведений.ПлановыеНачисления КАК ПлановыеНачисления
|ГДЕ
| ПлановыеНачисления.Сотрудник = &Сотрудник
| И ПлановыеНачисления.ВидРасчета = &ВидРасчета
| И ПлановыеНачисления.Период ДО &Дата
| И (ПлановыеНачисления.ОкончаниеПериода > &Дата ИЛИ ПлановыеНачисления.ОкончаниеПериода ЕСТЬ NULL)";
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад (по часам)"));
Запрос.УстановитьПараметр("Дата", Дата);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Сумма;
КонецЕсли;
КонецФункции
Этот запрос покажет, какая сумма оклада «видна» на дату расчёта аванса. Если на 15-е число всё ещё старый оклад — значит, перевод не учтён.
Сравнение подходов: способы расчёта аванса
Выбор способа расчёта аванса напрямую влияет на то, как кадровые изменения отразятся на сумме. Ниже приведено сравнение трёх основных способов, доступных в ЗУП 3.1.
| Способ расчёта аванса | Условия применимости | Реакция на кадровый перевод в середине месяца | Риски |
|---|---|---|---|
| Процент от оклада | Подходит для большинства организаций, если оклад не меняется часто | Не пересчитывается автоматически; аванс считается по окладу на 1-е число месяца | Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.