Как в ЗУП 3.1 получить ФОТ сотрудника на определенную дату через запрос или программно?

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

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

Способ 1. Использование регистра «Плановый ФОТ итоги»

Основным местом хранения рассчитанного ФОТ является регистр сведений ПлановыйФОТИтоги. Этот регистр специально оптимизирован для хранения итоговых сумм, которые мы видим в карточке сотрудника. Рассмотрим пример запроса, который позволяет получить срез последних данных на определенную дату по конкретному сотруднику.

Проанализируем структуру запроса:


ВЫБРАТЬ
    ПлановыйФОТИтогиСрезПоследних.Сотрудник КАК Сотрудник,
    ПлановыйФОТИтогиСрезПоследних.ФОТ КАК ФОТ,
    ПлановыйФОТИтогиСрезПоследних.СовокупнаяТарифнаяСтавка КАК СовокупнаяТарифнаяСтавка
ИЗ
    РегистрСведений.ПлановыйФОТИтоги.СрезПоследних(&Дата, Сотрудник = &Сотрудник) КАК ПлановыйФОТИтогиСрезПоследних

Важный момент: этот регистр заполняется при проведении документов «Прием на работу», «Кадровый перевод» или «Изменение оплаты труда». Если данные в запросе не совпадают с тем, что вы видите в интерфейсе, возможно, в системе не выполнен пересчет ФОТ. Для актуализации данных в этом регистре используется типовая обработка «Пересчет планового ФОТ».

Способ 2. Получение данных из регистра «Плановые начисления»

Если вам требуется детальная расшифровка — из каких именно начислений складывается ФОТ (например, оклад + надбавка), следует обратиться к регистру ПлановыеНачисления. Суммировать нужно только те начисления, у которых в справочнике Начисления установлен флаг ВключатьВФОТ.

Разберем, как правильно составить такой запрос:


ВЫБРАТЬ
    ПлановыеНачисленияСрезПоследних.Сотрудник КАК Сотрудник,
    СУММА(ПлановыеНачисленияСрезПоследних.Размер) КАК ИтоговыйФОТ
ИЗ
    РегистрСведений.ПлановыеНачисления.СрезПоследних(&Дата, ) КАК ПлановыеНачисленияСрезПоследних
ГДЕ
    ПлановыеНачисленияСрезПоследних.Сотрудник = &Сотрудник
    И ПлановыеНачисленияСрезПоследних.Начисление.ВключатьВФОТ = ИСТИНА
    И ПлановыеНачисленияСрезПоследних.Используется = ИСТИНА
СГРУППИРОВАТЬ ПО
    ПлановыеНачисленияСрезПоследних.Сотрудник

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

Способ 3. Использование регистра для подбора сотрудников

Существует еще один вспомогательный регистр — ДанныеОбОплатеТрудаДляПодбораСотрудников. Он используется системой для быстрого вывода информации в списках и формах подбора. Его удобно использовать, когда нужно быстро получить ФОТ для большого списка сотрудников без сложных вычислений.

Пример получения данных:


ВЫБРАТЬ
    ДанныеОбОплатеТруда.Сотрудник КАК Сотрудник,
    ДанныеОбОплатеТруда.ФОТ КАК ФОТ
ИЗ
    РегистрСведений.ДанныеОбОплатеТрудаДляПодбораСотрудников КАК ДанныеОбОплатеТруда
ГДЕ
    ДанныеОбОплатеТруда.Сотрудник = &Сотрудник

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

Способ 4. Программное получение данных через API (наиболее надежный)

Чтобы избежать ошибок, связанных с нюансами хранения данных в регистрах, в 1С:ЗУП 3.1 рекомендуется использовать программные функции из общих модулей. Это гарантирует, что вы получите ровно ту сумму, которую рассчитывает сама система с учетом всех настроек «Совокупной тарифной ставки».

Для получения ФОТ на дату в коде (например, для вывода в Таблицу Значений), рассмотрим использование функции ПлановыйФОТПересчет.ФОТНаДату.

Пример кода для получения данных по сотруднику:


// Определяем параметры
ДатаРасчета = ТекущаяДата();
СотрудникСсылка = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");

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

Сообщить("ФОТ сотрудника на " + ДатаРасчета + " составляет: " + ЗначениеФОТ);

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

Почему данные в запросах могут не совпадать с интерфейсом?

Выясним причину возможных расхождений. В ЗУП 3.1 реализован механизм отложенного расчета ФОТ. Когда пользователь проводит документ изменения оплаты, запись в регистр сведений ПлановыйФОТИтоги может не попасть мгновенно, если в настройках включен расчет ФОТ через очередь.

Проанализируем основные причины нестыковок:

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

Рекомендации по выбору метода

Подведем итог, какой метод выбрать в зависимости от вашей задачи:

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

← На главную