Содержание:
Для получения данных в ЗУП 3.1 лучше всего использовать стандартные механизмы заложенные в конфигурацию, такой подход позволяет не углубляться в структуру регистров, сохранить работоспособность кода после обновлений. Кадровые данные можно получить, как на дату актуальности так и срезом на заданный список дат, для этого есть несколько способов:
Получение кадровых данных на определенную дату:
1. Через функцию «КадровыеДанныеСотрудников»
Самый просто способ получить кадровые данные в таблицу значений на указанную дату
|
1 2 3 4 |
СписокСотрудников = Справочники.Сотрудники.НайтиПоНаименованию("Ломоносов Михаил Васильевич"); //Массив ссылок или элемент СправочникСсылка.Сотрудники //КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина) ТЗКадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, "ФИО, Подразделение, Должность, ТабельныйНомер"); |
Если конченый результат в виде «Таблицы значений» не подходит, то внутри используется функция «СоздатьНаДатуВТКадровыеДанныеСотрудников», с помощью которой можно получить результат в виде «Временной Таблицы» или «Выборки».
2. Через Временную Таблицу «ВТСотрудникиОрганизации» по параметрам отбора
Заполняем структура «ПараметрыПолученияСотрудников», необходимую для временной таблицы и получаем данные через функцию «СоздатьВТСотрудникиОрганизации».
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// Исходные данные примера НачалоПериода = НачалоМесяца(ТекущаяДата()); ОкончаниеПериода = КонецМесяца(ТекущаяДата()); // Получение кадровых данных через ВТСотрудникиОрганизации Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.НачалоПериода = НачалоПериода; ПараметрыПолученияСотрудников.ОкончаниеПериода = ОкончаниеПериода; ПараметрыПолученияСотрудников.КадровыеДанные = "ФИО, Подразделение, Должность, ТабельныйНомер, ДатаПриема, ДатаУвольнения"; //В "ПараметрыПолученияСотрудников" можно указать фильтр по: Организация, Подразделение, РаботникиПоДоговорамГПХ, РаботникиПоТрудовымДоговорам и др. // Если не заполнить СписокФизическихЛиц, будут получены данные по всем сотрудника организации МассивФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Справочники.ФизическиеЛица.НайтиПоНаименованию("Королёв Сергей Павлович")); ПараметрыПолученияСотрудников.СписокФизическихЛиц = МассивФизическихЛиц; // При необходимости можно использовать отборы по условию МассивДолжностей = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Справочники.Должности.НайтиПоНаименованию("Конструктор")); ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПолученияСотрудников.Отборы, "Должность", "В", МассивДолжностей); //ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПолученияСотрудников.Отборы,"ДатаУвольнения", ">=", НачалоПериода); УстановитьПривилегированныйРежим(Истина); //убирает лишние проверки КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников); Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТСотрудникиОрганизации"; ТЗКадровыеДанные = Запрос.Выполнить().Выгрузить(); |
Получение кадровых данных срезом на заданные даты:
1. Через Временную Таблицу «ВТКадровыеДанныеСотрудников»
Формируем временную таблицу с исходными данными (Сотрудники, Периоды), передаем ее в «Описатель временных таблиц», затем уже описатель передаем в функцию «СоздатьВТКадровыеДанныеСотрудников», в результате получаем ВТКадровыеДанныеСотрудников со всеми кадровыми данными на указанные даты.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Помещаем список сотрудников и даты среза для получения кадровых данных в ВТСотрудники, // которая в дальнейшем будет использована в описателе Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | &Сотрудник Сотрудник, | &Период Период |ПОМЕСТИТЬ ВТСотрудники"; Запрос.УстановитьПараметр("Сотрудник", Справочники.Сотрудники.НайтиПоНаименованию("Лермонтов Михаил Юрьевич")); Запрос.УстановитьПараметр("Период", ТекущаяДата()); Запрос.Выполнить(); // Получаем кадровые данные через ВТКадровыеДанныеСотрудников ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники"); КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВТ, Ложь, "Организация, Сотрудник, ФизическоеЛицо, ФИОПолные, ДатаРождения, МестоРождения"); Запрос.Текст = "ВЫБРАТЬ * ИЗ ВТКадровыеДанныеСотрудников"; ТЗКадровыеДанные = Запрос.Выполнить().Выгрузить(); |
2. Через Таблицу Значений
Описывается и заполняется таблица значений с перечнем сотрудников и дат, на которую необходимо получить кадровые данные, затем через функцию общего модуля «КадровыеДанныеСотрудниковПоТаблицеЗначений» получаем данные.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Пример из обработки проведения документа "ИзменениеКвалификационногоРазраяда" ТаблицаСотрудников = Новый ТаблицаЗначений; ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата")); Для Каждого ДанныеСотрудника Из ДанныеДляПроведения Цикл СтрокаТаблицыСотрудников = ТаблицаСотрудников.Добавить(); СтрокаТаблицыСотрудников.Период = ДанныеСотрудника.ДатаМероприятия; СтрокаТаблицыСотрудников.Сотрудник = ДанныеСотрудника.Сотрудник; КонецЦикла; // КадровыеДанныеСотрудниковПоТаблицеЗначений(ТолькоРазрешенные, ТаблицаСотрудников, КадровыеДанные, ПоляОтбораПериодическихДанных = Неопределено) КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудниковПоТаблицеЗначений(Ложь, ТаблицаСотрудников, "ВидЗанятости,Должность"); |
Более широкий перечень «Кадровых данных» которые можно получить рассмотренными способами описан в статье Представления «Кадровые данные».
