Как исправить ошибку расчета сверхурочных в 1С:ЗУП, когда показатель «Стоимость дня (часа) с учетом разовых начислений» учитывает не все надбавки?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В последних версиях 1С:Зарплата и Управление Персоналом (ЗУП 3.1) был введен новый механизм для расчета стоимости часа (дня) с учетом разовых начислений и премий. Это изменение связано с необходимостью соблюдения Постановления Конституционного Суда РФ, требующего включать компенсационные и стимулирующие выплаты в расчет сверхурочных, ночных и праздничных часов.

Однако многие пользователи столкнулись с проблемой: при настройке списка начислений на вкладке «Расчет тарифной ставки» программа выбирает для расчета только одно начисление из списка, игнорируя остальные. Даже если у сотрудника назначено несколько плановых надбавок (за вредность, за совмещение и т.д.), в итоговую стоимость часа попадает случайным образом только одна из них.

В этой статье мы подробно разберем технические причины этой ошибки, рассмотрим способы исправления кода и проанализируем особенности работы нового механизма через Фонд Оплаты Труда (ФОТ).

Суть проблемы и симптомы

При использовании показателя СтоимостьДняЧасаСУчетомРазовыхНачислений в документе начисления (например, «Работа в выходные и праздники» или «Сверхурочная работа») пользователь видит заниженную сумму. Если проанализировать расчет, выясняется следующее:

  1. На новой вкладке «Расчет тарифной ставки» в начислении указаны все необходимые виды расчета (оклад, вредность, премии).
  2. У сотрудника действуют все эти начисления.
  3. При расчете система берет, например, только надбавку за вредность, а надбавку за совмещение игнорирует (или наоборот).
  4. Изменение порядка начислений в списке или их переименование не дает стабильного результата.

Техническая причина ошибки

Проанализировав код конфигурации с помощью отладчика, мы выяснили, что ошибка кроется в общем модуле или обработке, отвечающей за расчет зарплаты (конкретно — в обработке МенеджерРасчетаЗарплаты). Проблема заключается в неправильной группировке таблицы движений при получении данных о плановых начислениях.

В процедуре подготовки данных система преобразовывала таблицу движений в таблицу интервалов, выполняя свертку (группировку) данных. Ошибка была в параметрах этой свертки: группировка производилась только по полю Сотрудник, игнорируя поле Начисление (Вид расчета).

В результате, если у одного сотрудника в одном периоде действовало несколько разных плановых начислений, попадающих в базу, система «схлопывала» их в одну строку, оставляя данные только одного произвольного начисления.

Решение проблемы: Исправление кода

Если вы не можете обновить конфигурацию до последнего релиза, где эта ошибка исправлена, можно внести точечное исправление через расширение конфигурации. Рассмотрим фрагмент кода, который необходимо изменить.

В обработке МенеджерРасчетаЗарплаты необходимо найти вызов функции ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов. В типовом (ошибочном) коде он выглядит так:


// Ошибочный код
ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов(КэшВкладВФОТПлановыхБазовыхНачисленийСотрудников, ТаблицаПолученияПериодическихДанныхСотрудников, "Сотрудник", "Сотрудник", Истина);

Как мы видим, третий параметр (поля группировки) содержит только "Сотрудник". Нам необходимо добавить туда измерение Начисление, чтобы разделить суммы по разным видам расчета.

Исправленный вариант кода:


// Исправленный код
ПреобразоватьТаблицуДвиженийВТаблицуИнтервалов(КэшВкладВФОТПлановыхБазовыхНачисленийСотрудников, ТаблицаПолученияПериодическихДанныхСотрудников, "Сотрудник,Начисление", "Сотрудник", Истина);

После внесения этого изменения и перезапуска сеанса, расчет стоимости часа начинает корректно суммировать все плановые начисления, входящие в базу.

Официальное исправление от 1С

Фирма 1С признала наличие данной ошибки. Для версий ЗУП 3.1.30 и 3.1.31 были выпущены соответствующие патчи (например, EF_60018112 и последующие кумулятивные исправления).

Мы настоятельно рекомендуем проверить наличие установленных патчей в разделе Администрирование – Обслуживание – Обновление программы. Если у вас включена автоматическая загрузка исправлений, проблема должна решиться сама собой. Если нет — скачайте патч с официального сайта поддержки пользователей.

Важная особенность: Зависимость от ФОТ

Даже после исправления программной ошибки некоторые начисления могут не попадать в расчет. Это связано с методологией работы нового показателя СтоимостьДняЧасаСУчетомРазовыхНачислений.

Давайте разберемся, откуда берутся данные для расчета:

  1. Совокупная тарифная ставка. Это база, которая берется из настроек расчета зарплаты. Она едина для всех переработок (ночные, праздничные, сверхурочные).
  2. Дополнительная база для сверхурочных. Это начисления, которые мы добавляем на вкладку «Расчет тарифной ставки» в самом виде начисления «Оплата сверхурочных».

Ключевой момент заключается в том, как система получает суммы для плановых начислений из пункта 2. Она берет их не из фактических начислений текущего месяца (которые могут быть еще не рассчитаны), а из регистра сведений «Плановый ФОТ итоги».

Почему это важно?

Если у вас есть надбавка, которая рассчитывается процентом от базы текущего месяца, и она включена в расчет стоимости часа, система попытается найти её плановое значение (вклад в ФОТ). Если при назначении этой надбавки (в кадровом переводе или приеме на работу) вклад в ФОТ не был рассчитан или равен нулю, то и в стоимость часа для сверхурочных попадет ноль.

Пример алгоритма, который использует система для выборки базовых начислений:


// Базовые виды расчета, которые являются плановыми, учитываются при расчете, как ВкладВФОТ
ПоискПлановыхНачислений = Новый Структура(ПоляПоискаПлановыхЗаписей);
ЗаполнитьЗначенияСвойств(ПоискПлановыхНачислений, РассчитываемаяЗапись);

// Поиск в таблице планового ФОТ
СтрокиПлановыхНачислений = ВкладВФОТПлановыхБазовыхНачисленийСотрудников.НайтиСтроки(ПоискПлановыхНачислений);

Для Каждого Стр Из СтрокиПлановыхНачислений Цикл
    // ... проверки периодов ...
    НоваяСтрока.Результат = Стр.ВкладВФОТ; // Берется именно ФОТ!
КонецЦикла;

Рекомендации по настройке и проверке

Чтобы убедиться, что расчет сверхурочных производится корректно, выполните следующие шаги:

  1. Установите последние патчи. Убедитесь, что ошибка группировки таблиц исправлена в вашей версии программы.
  2. Проверьте ФОТ сотрудников. Откройте карточку сотрудника или регистр сведений по плановому ФОТ. Убедитесь, что все надбавки, которые должны входить в стоимость часа (вредность, совмещение, процентные премии), имеют ненулевую сумму вклада в ФОТ. При необходимости создайте документ «Изменение оплаты труда» или пересчитайте ФОТ.
  3. Соблюдайте последовательность ввода документов.
    • Сначала вводятся кадровые документы, формирующие плановый ФОТ.
    • Затем вводятся документы разовых начислений (премии фиксированной суммой), если они должны входить в базу.
    • Только после этого создавайте или перезаполняйте документы «Сверхурочная работа» или «Работа в выходные и праздники». Новый показатель рассчитывается динамически в момент заполнения документа.

Понимая механизм зависимости от планового ФОТ и исправив ошибку в коде выборки, вы сможете добиться точного расчета сверхурочных часов в соответствии с актуальным законодательством.

← На главную