В последних версиях 1С:Зарплата и Управление Персоналом (ЗУП 3.1) был введен новый механизм для расчета стоимости часа (дня) с учетом разовых начислений и премий. Это изменение связано с необходимостью соблюдения Постановления Конституционного Суда РФ, требующего включать компенсационные и стимулирующие выплаты в расчет сверхурочных, ночных и праздничных часов.
Однако многие пользователи столкнулись с проблемой: при настройке списка начислений на вкладке «Расчет тарифной ставки» программа выбирает для расчета только одно начисление из списка, игнорируя остальные. Даже если у сотрудника назначено несколько плановых надбавок (за вредность, за совмещение и т.д.), в итоговую стоимость часа попадает случайным образом только одна из них.
В этой статье мы подробно разберем технические причины этой ошибки, рассмотрим способы исправления кода и проанализируем особенности работы нового механизма через Фонд Оплаты Труда (ФОТ).
При использовании показателя СтоимостьДняЧасаСУчетомРазовыхНачислений в документе начисления (например, «Работа в выходные и праздники» или «Сверхурочная работа») пользователь видит заниженную сумму. Если проанализировать расчет, выясняется следующее:
Проанализировав код конфигурации с помощью отладчика, мы выяснили, что ошибка кроется в общем модуле или обработке, отвечающей за расчет зарплаты (конкретно — в обработке МенеджерРасчетаЗарплаты). Проблема заключается в неправильной группировке таблицы движений при получении данных о плановых начислениях.
В процедуре подготовки данных система преобразовывала таблицу движений в таблицу интервалов, выполняя свертку (группировку) данных. Ошибка была в параметрах этой свертки: группировка производилась только по полю Сотрудник, игнорируя поле Начисление (Вид расчета).
В результате, если у одного сотрудника в одном периоде действовало несколько разных плановых начислений, попадающих в базу, система «схлопывала» их в одну строку, оставляя данные только одного произвольного начисления.
Если вы не можете обновить конфигурацию до последнего релиза, где эта ошибка исправлена, можно внести точечное исправление через расширение конфигурации. Рассмотрим фрагмент кода, который необходимо изменить.
В обработке МенеджерРасчетаЗарплаты необходимо найти вызов функции ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов. В типовом (ошибочном) коде он выглядит так:
// Ошибочный код
ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов(КэшВкладВФОТПлановыхБазовыхНачисленийСотрудников, ТаблицаПолученияПериодическихДанныхСотрудников, "Сотрудник", "Сотрудник", Истина);
Как мы видим, третий параметр (поля группировки) содержит только "Сотрудник". Нам необходимо добавить туда измерение Начисление, чтобы разделить суммы по разным видам расчета.
Исправленный вариант кода:
// Исправленный код
ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов(КэшВкладВФОТПлановыхБазовыхНачисленийСотрудников, ТаблицаПолученияПериодическихДанныхСотрудников, "Сотрудник,Начисление", "Сотрудник", Истина);
После внесения этого изменения и перезапуска сеанса, расчет стоимости часа начинает корректно суммировать все плановые начисления, входящие в базу.
Фирма 1С признала наличие данной ошибки. Для версий ЗУП 3.1.30 и 3.1.31 были выпущены соответствующие патчи (например, EF_60018112 и последующие кумулятивные исправления).
Мы настоятельно рекомендуем проверить наличие установленных патчей в разделе Администрирование – Обслуживание – Обновление программы. Если у вас включена автоматическая загрузка исправлений, проблема должна решиться сама собой. Если нет — скачайте патч с официального сайта поддержки пользователей.
Даже после исправления программной ошибки некоторые начисления могут не попадать в расчет. Это связано с методологией работы нового показателя СтоимостьДняЧасаСУчетомРазовыхНачислений.
Давайте разберемся, откуда берутся данные для расчета:
Ключевой момент заключается в том, как система получает суммы для плановых начислений из пункта 2. Она берет их не из фактических начислений текущего месяца (которые могут быть еще не рассчитаны), а из регистра сведений «Плановый ФОТ итоги».
Почему это важно?
Если у вас есть надбавка, которая рассчитывается процентом от базы текущего месяца, и она включена в расчет стоимости часа, система попытается найти её плановое значение (вклад в ФОТ). Если при назначении этой надбавки (в кадровом переводе или приеме на работу) вклад в ФОТ не был рассчитан или равен нулю, то и в стоимость часа для сверхурочных попадет ноль.
Пример алгоритма, который использует система для выборки базовых начислений:
// Базовые виды расчета, которые являются плановыми, учитываются при расчете, как ВкладВФОТ
ПоискПлановыхНачислений = Новый Структура(ПоляПоискаПлановыхЗаписей);
ЗаполнитьЗначенияСвойств(ПоискПлановыхНачислений, РассчитываемаяЗапись);
// Поиск в таблице планового ФОТ
СтрокиПлановыхНачислений = ВкладВФОТПлановыхБазовыхНачисленийСотрудников.НайтиСтроки(ПоискПлановыхНачислений);
Для Каждого Стр Из СтрокиПлановыхНачислений Цикл
// ... проверки периодов ...
НоваяСтрока.Результат = Стр.ВкладВФОТ; // Берется именно ФОТ!
КонецЦикла;
Чтобы убедиться, что расчет сверхурочных производится корректно, выполните следующие шаги:
Понимая механизм зависимости от планового ФОТ и исправив ошибку в коде выборки, вы сможете добиться точного расчета сверхурочных часов в соответствии с актуальным законодательством.