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