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

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

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

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

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

Получение размера оклада и тарифной ставки на дату

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

Рассмотрим пример кода:


ТолькоРазрешенные = Истина;
ДатаСрезаИнформации = ТекущаяДата();
КадровыеДанные = "ТарифнаяСтавка, СовокупнаяТарифнаяСтавка";

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

КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(
    ТолькоРазрешенные, 
    МассивСотрудников, 
    КадровыеДанные, 
    ДатаСрезаИнформации
);

Для Каждого Строка Из КадровыеДанныеСотрудников Цикл
    СотрудникОбъект = Строка.Сотрудник;
    ТарифнаяСтавка = Строка.ТарифнаяСтавка;
    СовокупнаяСтавка = Строка.СовокупнаяТарифнаяСтавка;
КонецЦикла;

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

Получение списка сотрудников организации за период

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

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


ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = ОрганизацияСсылка;
ПараметрыПолученияСотрудников.ОкончаниеПериода = КонецДня(ТекущаяДата());
ПараметрыПолученияСотрудников.КадровыеДанные = "ДатаПриема, Состояние";

СотрудникиТаблица = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);

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

Запрос.Текст = 
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|   Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
|   Сотрудники.Сотрудник КАК Сотрудник,
|   Сотрудники.ДатаПриема КАК ДатаПриема,
|   Сотрудники.Состояние КАК Состояние
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
|   &СотрудникиТаблица КАК Сотрудники
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|   Сотрудники.Сотрудник КАК Сотрудник,
|   Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
|   ВТСотрудники КАК Сотрудники
|ГДЕ
|   Сотрудники.ДатаПриема МЕЖДУ &ДатаНачала И &ДатаОкончания
|   И Сотрудники.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)";

Запрос.УстановитьПараметр("СотрудникиТаблица", СотрудникиТаблица);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачалаПериода));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияПериода));

РезультатЗапроса = Запрос.Выполнить();
МенеджерВТ.Закрыть();

Как получить детальный список всех плановых начислений

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

Выясним, какие функции применяются для этих целей:

Где посмотреть полный список доступных полей кадровых данных

Перечень параметров, которые можно передавать в текстовой строке КадровыеДанные (например, "ДатаПриема, Подразделение, Должность, ТарифнаяСтавка"), достаточно широк. Полный актуальный список доступных имени полей и их описания находится в комментариях к экспортной функции ЗапросВТКадровыеДанныеСотрудников в общем модуле КадровыйУчетВнутренний.

← На главную