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

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

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

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

Причины появления нулевых сумм и ошибок при получении плановых начислений

Разберем основные архитектурные особенности 1С:ЗУП 3.1, приводящие к сложностям при выборке данных:

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

Способ 1. Использование механизмов СКД и общих наборов данных

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

При таком подходе в схеме компоновки данных используются специальные таблицы-представления, например Представления_ПлановыеНачисленияСотрудников. Для корректной инициализации источника данных в модуле объекта отчета используется следующий код:


Процедура ПриКомпоновкеРезультата(ТаблицаНастроек, СтандартнаяОбработка)
    
    ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект);
    
КонецПроцедуры

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

Способ 2. Программный вызов функций модуля КадровыйУчетРасширенный

Если данные необходимо получить программно во внешнем коде или обработке без использования СКД, рекомендуется использовать экспортную функцию ТекущиеНачисленияСотрудников() из модуля КадровыйУчетРасширенный.

Рассмотрим пример получения действующих начислений на указанную дату:


МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СсылкаНаСотрудника);

ДатаАктуальности = ТекущаяДата();

ТаблицаНачислений = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудников, ДатаАктуальности);

Данная функция корректно обрабатывает действующие кадровые приказы и возвращает актуальный список видов расчета для каждого сотрудника из массива.

Способ 3. Выборка через временную таблицу в Запросе

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

Разберем порядок действий по шагам:

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

Посмотрим на пример реализации в коде:


Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

// 1. Заполняем ВТСотрудники с колонками Сотрудник и Период
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Сотрудники.Ссылка КАК Сотрудник,
    |	&ДатаСреза КАК Период
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    |	Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    |	Сотрудники.Ссылка В(&МассивСотрудников)";

Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
Запрос.Выполнить();

// 2. Вызываем процедуру формирования таблицы плановых начислений
КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(Запрос.МенеджерВременныхТаблиц);

// 3. Читаем сформированную временную таблицу ВТПлановыеНачисленияСотрудников
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВТ.Сотрудник КАК Сотрудник,
    |	ВТ.Начисление КАК Начисление,
    |	ВТ.Размер КАК Размер
    |ИЗ
    |	ВТПлановыеНачисленияСотрудников КАК ВТ";

Результат = Запрос.Выполнить().Выгрузить();

Способ 4. Чтение планового ФОТ

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

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

← На главную