Где хранятся показатели расчета (стоимость часа/дня) и отработанные дни в 1С:ЗУП 3.1?

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

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

Где физически хранятся показатели зарплаты

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

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

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

Как формируется показатель «Стоимость дня/часа»

Выясним причину, почему стоимость часа у разных сотрудников может считаться по-разному. Этот показатель вычисляется путем деления совокупной тарифной ставки на количество часов (или дней). Настройка этого алгоритма многогранна:

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

Где хранятся отработанные дни и часы

Проанализируем ситуацию с днями и часами. Часто разработчики смотрят в движения регистра расчета, видят пустые колонки и впадают в ступор. На самом деле данные есть:

Программный расчет показателей «на лету»

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


МесяцНачисления = НачалоМесяца(ТекущаяДата());
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(МесяцНачисления, Организация);

МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.ИсключатьРанееОплаченныеПериоды = Ложь;
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = Ложь;
МенеджерРасчета.НастройкиРасчета.ПерваяПоловинаМесяца = Ложь;
МенеджерРасчета.НастройкиРасчета.ОкончательныйРасчет = Истина;
МенеджерРасчета.НастройкиНачислений.РассчитыватьНачисления = Истина;

ТаблицаСотрудников = МенеджерРасчета.ТаблицаСотрудников();

// Добавляем сотрудника для расчета
Стр = ТаблицаСотрудников.Добавить();
Стр.Сотрудник = СотрудникСсылка;
Стр.ДатаНачала = НачалоМесяца(МесяцНачисления);
Стр.ДатаОкончания = КонецМесяца(МесяцНачисления);

// Запускаем заполнение и расчет
МенеджерРасчета.ЗаполнитьНачислениеЗарплаты(ТаблицаСотрудников);
МенеджерРасчета.РассчитатьЗарплату();

// Анализируем результат
// МенеджерРасчета.Зарплата.Начисления - это таблица значений.
// В каждой строке содержится вложенная ТЗ "Показатели", а также колонки "ОплаченоДней" и "ОплаченоЧасов".

Подведем итоги: В ЗУП 3.1 архитектура расчета построена на динамическом вычислении. Базовые ставки мы получаем из регистров ФОТ (например, ДанныеОСовокупнойТарифнойСтавкеСотрудников), а сам пересчет в часы зависит от общих настроек базы. Дни и часы нужно искать в ресурсах регистра расчета Начисления или напрямую в табличных частях расчетных документов.

← На главную