При доработке конфигурации 1С:Зарплата и Управление Персоналом 3.1 часто возникает необходимость программно получить размер оклада, тарифной ставки или кадровые данные сотрудника на определенную дату. В отличие от предыдущей редакции 2.5, прямое написание запросов к регистрам сведений в ЗУП 3.1 настоятельно не рекомендуется, так как логика расчета и среза данных перенесена в специализированный API. Разберем, как правильно запрашивать эти данные с помощью типового программного интерфейса.
В ЗУП редакции 3.1 архитектура учета кадровых изменений и начислений базируется на интервальных регистрах и сложной логике приоритетов документов. Написание прямого запроса к регионам сведений (например, к регистру ПлановыеНачисления) может привести к получению недостоверной информации: не будут учтены временные переводы, даты прекращения начислений или привязка к графикам работы. Для решения этой задачи разработчики 1С предусмотрели общий модуль КадровыйУчет, содержащий функции для работы с кадровой историей и оплатой труда.
Проанализируем способ получения тарифной ставки или оклада сотрудника на конкретную дату с помощью функции КадровыйУчет.КадровыеДанныеСотрудников. Для этого сформируем массив ссылок на сотрудников и передадим требуемые имена полей в строке параметров.
Рассмотрим пример кода:
ТолькоРазрешенные = Истина;
ДатаСрезаИнформации = ТекущаяДата();
КадровыеДанные = "ТарифнаяСтавка, СовокупнаяТарифнаяСтавка";
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Сотрудник);
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(
ТолькоРазрешенные,
МассивСотрудников,
КадровыеДанные,
ДатаСрезаИнформации
);
Для Каждого Строка Из КадровыеДанныеСотрудников Цикл
СотрудникОбъект = Строка.Сотрудник;
ТарифнаяСтавка = Строка.ТарифнаяСтавка;
СовокупнаяСтавка = Строка.СовокупнаяТарифнаяСтавка;
КонецЦикла;
Разберем значения ключевых полей оплаты труда:
Посмотрим, как выгрузить список работников организации и отфильтровать их по состоянию или дате приема. Для оптимальной работы с последующими запросами рекомендуется формировать временную таблицу в менеджере временных таблиц с помощью метода КадровыйУчет.СоздатьВТСотрудникиОрганизации или получать таблицу с помощью КадровыйУчет.СотрудникиОрганизации.
Рассмотрим практический пример получения принятых сотрудников:
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = ОрганизацияСсылка;
ПараметрыПолученияСотрудников.ОкончаниеПериода = КонецДня(ТекущаяДата());
ПараметрыПолученияСотрудников.КадровыеДанные = "ДатаПриема, Состояние";
СотрудникиТаблица = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| Сотрудники.Сотрудник КАК Сотрудник,
| Сотрудники.ДатаПриема КАК ДатаПриема,
| Сотрудники.Состояние КАК Состояние
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &СотрудникиТаблица КАК Сотрудники
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Сотрудники.Сотрудник КАК Сотрудник,
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| ВТСотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.ДатаПриема МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Сотрудники.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)";
Запрос.УстановитьПараметр("СотрудникиТаблица", СотрудникиТаблица);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачалаПериода));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончанияПериода));
РезультатЗапроса = Запрос.Выполнить();
МенеджерВТ.Закрыть();
Запрос полей ТарифнаяСтавка или ФОТ дает лишь суммарный результат. Если же вам требуется получить полный список всех видов расчета, действующих у сотрудника на выбранную дату (например, оклад, надбавка за выслугу лет, районный коэффициент), следует обращаться к модулю КадровыйУчетРасширенный.
Выясним, какие функции применяются для этих целей:
КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, Дата) — возвращает таблицу действующих плановых видов расчета с их размерами и показателями для одного сотрудника.КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудников, Дата) — возвращает плановые начисления для списка сотрудников.КадровыйУчет.ЗапросВТПлановыеНачисленияСотрудников — формирует временную таблицу плановых начислений внутри вашего менеджера временных таблиц для использования в сложных запросах.Перечень параметров, которые можно передавать в текстовой строке КадровыеДанные (например, "ДатаПриема, Подразделение, Должность, ТарифнаяСтавка"), достаточно широк. Полный актуальный список доступных имени полей и их описания находится в комментариях к экспортной функции ЗапросВТКадровыеДанныеСотрудников в общем модуле КадровыйУчетВнутренний.