Как в 1С ЗУП 2.5 получить состояние сотрудника на дату?

28 Jun
Published by Nicholas

Функция ПолучитьСостояниеСотрудникаНаДату(вхПериод, вхОрганизация, вхСотрудник) Экспорт

   
выхСостояниеСотрудникаНаДату = Новый Структура("Состояние, ДатаНачалаСостояния, ДатаОкончанияСостояния");

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

   
Запрос.УстановитьПараметр("Организация", вхОрганизация);
   
Запрос.УстановитьПараметр("Период", вхПериод);
   
Запрос.УстановитьПараметр("Сотрудник", вхСотрудник);

   
Результат = Запрос.Выполнить();

    Если
Результат <> Неопределено И Не Результат.Пустой() Тогда
       
Выборка = Результат.Выбрать();
       
Выборка.Следующий();
       
выхСостояниеСотрудникаНаДату.Вставить("Состояние", Строка(Выборка.Состояние));
       
выхСостояниеСотрудникаНаДату.Вставить("ДатаНачалаСостояния", Выборка.Период);
       
выхСостояниеСотрудникаНаДату.Вставить("ДатаОкончанияСостояния", Выборка.ПериодЗавершения);
    Иначе
       
выхСостояниеСотрудникаНаДату.Вставить("Состояние", Строка(вхСотрудник.ВидЗанятости));
       
выхСостояниеСотрудникаНаДату.Вставить("ДатаНачалаСостояния", вхСотрудник.ДатаПриемаНаРаботу);
       
выхСостояниеСотрудникаНаДату.Вставить("ДатаОкончанияСостояния", вхСотрудник.ДатаУвольнения);
    КонецЕсли;

    Возврат
выхСостояниеСотрудникаНаДату;

КонецФункции
// ПолучитьСостояниеСотрудникаНаДату()

Тэги 

1С:ЗУП

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image