Содержание:
Для получения данных в ЗУП 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 |
// Пример из обработки проведения документа "ИзменениеКвалификационногоРазраяда" ТаблицаСотрудников = Новый ТаблицаЗначений; ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата")); Для Каждого ДанныеСотрудника Из ДанныеДляПроведения Цикл СтрокаТаблицыСотрудников = ТаблицаСотрудников.Добавить(); СтрокаТаблицыСотрудников.Период = ДанныеСотрудника.ДатаМероприятия; СтрокаТаблицыСотрудников.Сотрудник = ДанныеСотрудника.Сотрудник; КонецЦикла; // КадровыеДанныеСотрудниковПоТаблицеЗначений(ТолькоРазрешенные, ТаблицаСотрудников, КадровыеДанные, ПоляОтбораПериодическихДанных = Неопределено) КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудниковПоТаблицеЗначений(Ложь, ТаблицаСотрудников, "ВидЗанятости,Должность"); |
Более широкий перечень “Кадровых данных” которые можно получить рассмотренными способами описан в статье Представления «Кадровые данные».