Как найти и проверить алгоритм расчета оплаты по часовому тарифу в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В процессе работы с конфигурацией 1С:Зарплата и Управление Персоналом 3.1 программисты и опытные пользователи часто сталкиваются с ситуациями, когда итоговая сумма в документе Начисление зарплаты и взносов не совпадает с ручными расчетами бухгалтера. Особенно это касается начислений, зависящих от времени: оплаты по часовому тарифу, доплат за совмещение или работы в праздничные дни. Рассмотрим подробно, где искать программный код расчета, как система определяет стоимость часа и почему возникают расхождения в количестве отработанных часов.

Где искать программный код расчета зарплаты?

Если перед нами стоит задача «продебажить» расчет конкретного начисления, мы не найдем линейный код в модуле документа. В ЗУП 3.1 реализован универсальный механизм расчета. Разберем основные точки входа для разработчика:

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

Проанализируем ситуацию: если формула выглядит как ТарифнаяСтавкаЧасовая * ВремяВЧасах, и результат неверный, проблема может быть либо в значении самой ставки, либо в определении количества времени. Рассмотрим каждый случай подробнее.

Разбор показателя ТарифнаяСтавкаЧасовая (ЧТС)

Часто бухгалтер утверждает, что ставка должна быть одной, а программа подставляет другую. Это происходит из-за алгоритма пересчета месячного оклада в стоимость часа (ЧТС). Проверим настройки программы:

Перейдем в раздел Настройка — Расчет зарплаты и найдем пункт Порядок пересчета тарифной ставки сотрудника в стоимость часа. Рассмотрим три варианта, которые предлагает система:

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

Если мы видим, что программа считает по норме 168 часов (как в примере из обсуждения), хотя в текущем месяце норма другая, значит, в настройках выбран либо среднемесячный показатель, либо норма по другому графику. Выясним причину через «Подробности расчета» в самом документе начисления (правой кнопкой мыши по строке — Показать подробности расчета).

Проблема учета времени: Табель против Начисления

Ситуация, когда в Табеле учета рабочего времени стоит 162 часа, а программа рассчитывает оплату за 168 часов, является классической для ЗУП. Рассмотрим основные причины такого поведения:

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

Использование программных методов для анализа данных

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


// Пример получения кадровых данных через механизмы ЗУП
ДополнительныеПоля = КадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников();
СоответствиеПолей = Новый Структура;
СоответствиеПолей.Вставить("Представления_КадровыеДанныеСотрудников", ДополнительныеПоля);

// Инициализация схемы компоновки данных отчета
СхемаСКД = Отчеты.ОтчетыПоСотрудникам.ПолучитьМакет("ОтчетыПоСотрудникамРасширенный");
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));

// Заполнение параметров периода
Настройки = Компоновщик.Настройки;
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", ТекущаяДата());

// Формирование и вывод данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(КомпоновщикМакета.Выполнить(СхемаСКД, Настройки));

Этот код позволяет получить срез данных на определенную дату, включая ТарифнуюСтавку и ГрафикРаботы. Именно через подобные механизмы Зарплатный Движок собирает данные перед началом расчета формул.

Особенности расчета в документе «Совмещение должностей»

Если расхождения возникают в документе Совмещение должностей, нужно обратить внимание на способ расчета доплаты:

Чек-лист для проверки неверного расчета

Если расчет не совпадает, пройдем по шагам:

  1. Откроем Настройку начисления и проверим вкладку Учет времени. Какой вид времени там указан? Правильно ли настроено вытеснение на вкладке Приоритет?
  2. Проверим Производственный календарь. Если он не заполнен или заполнен неверно, нормы времени «поплывут».
  3. В документе Начисление зарплаты проверим колонки Норма и Отработано. Если они отличаются от ожидаемых, ищем введенные документы отклонений (командировки, неявки) или индивидуальные графики.
  4. Проверим регистр сведений Параметры периодов стажа ПФР и Данные о времени для расчета среднего — иногда ошибки в этих служебных регистрах косвенно указывают на проблемы с учетом времени.

Таким образом, для решения проблемы не обязательно «ломать глаза» о километровые запросы в МенеджерРасчетаЗарплаты. В 90% случаев причина кроется в настройках показателей, методике пересчета тарифной ставки или некорректном заполнении производственного календаря и графиков работы.

← На главную