Как в 1С ЗУП 2.5 получить состояние сотрудника на дату?
Функция ПолучитьСостояниеСотрудникаНаДату(вхПериод, вхОрганизация, вхСотрудник) Экспорт
выхСостояниеСотрудникаНаДату = Новый Структура("Состояние, ДатаНачалаСостояния, ДатаОкончанияСостояния");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| 1 КАК Приоритет,
| РаботникиОрганизаций.Период КАК Период,
| ""Не работает (уволен)"" КАК Состояние,
| ДАТАВРЕМЯ(1, 1, 1) КАК ПериодЗавершения
|ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
|ГДЕ
| РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизаций.Сотрудник = &Сотрудник
| И РаботникиОрганизаций.Организация = &Организация
| И РаботникиОрганизаций.Период <= &Период
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2,
| СостояниеРаботниковОрганизаций.Период,
| СостояниеРаботниковОрганизаций.Состояние,
| ВЫБОР
| КОГДА СостояниеРаботниковОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА СостояниеРаботниковОрганизаций.ПериодЗавершения
| ИНАЧЕ ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.ПериодЗавершения, СЕКУНДА, -1)
| КОНЕЦ
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| СостояниеРаботниковОрганизаций.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Работает)
| И ВЫБОР
| КОГДА СостояниеРаботниковОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА СостояниеРаботниковОрганизаций.Период <= &Период
| И СостояниеРаботниковОрганизаций.ПериодЗавершения > &Период
| ИНАЧЕ СостояниеРаботниковОрганизаций.Период <= &Период
| КОНЕЦ
| И СостояниеРаботниковОрганизаций.Сотрудник = &Сотрудник
| И СостояниеРаботниковОрганизаций.Организация = &Организация
|
|УПОРЯДОЧИТЬ ПО
| Приоритет";
Запрос.УстановитьПараметр("Организация", вхОрганизация);
Запрос.УстановитьПараметр("Период", вхПериод);
Запрос.УстановитьПараметр("Сотрудник", вхСотрудник);
Результат = Запрос.Выполнить();
Если Результат <> Неопределено И Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
выхСостояниеСотрудникаНаДату.Вставить("Состояние", Строка(Выборка.Состояние));
выхСостояниеСотрудникаНаДату.Вставить("ДатаНачалаСостояния", Выборка.Период);
выхСостояниеСотрудникаНаДату.Вставить("ДатаОкончанияСостояния", Выборка.ПериодЗавершения);
Иначе
выхСостояниеСотрудникаНаДату.Вставить("Состояние", Строка(вхСотрудник.ВидЗанятости));
выхСостояниеСотрудникаНаДату.Вставить("ДатаНачалаСостояния", вхСотрудник.ДатаПриемаНаРаботу);
выхСостояниеСотрудникаНаДату.Вставить("ДатаОкончанияСостояния", вхСотрудник.ДатаУвольнения);
КонецЕсли;
Возврат выхСостояниеСотрудникаНаДату;
КонецФункции // ПолучитьСостояниеСотрудникаНаДату()
Добавить комментарий