ЗУП 3.1

Пытаюсь получить работающих сотрудников.
Подбираю в ВТ уволенных сотрудников, а потом соединяю по Сотр <> Сотр,
выходит шляпа.

Как правильно, подскажите, пожалуйста

```1c
    ВЫБРАТЬ ПЕРВЫЕ 10
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия КАК ВидСобытия
    ПОМЕСТИТЬ ВТ_Уволенные
    ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
    ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = &Увольнение
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Уволенные КАК ВТ_Уволенные
    ПО (КадроваяИсторияСотрудниковИнтервальный.Сотрудник <> ВТ_Уволенные.Сотрудник)
```
---
ВЫБРАТЬ ПЕРВЫЕ 10
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия КАК ВидСобытия
ПОМЕСТИТЬ ВТ_Уволенные
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = &Увольнение
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
Где
    НЕ КадроваяИсторияСотрудниковИнтервальный.Сотрудник В (Выбрать Таб.Сотрудник из ВТ_Уволенные КАК Таб)
---
ВЫБРАТЬ ПЕРВЫЕ 10
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия КАК ВидСобытия
ПОМЕСТИТЬ ВТ_Уволенные
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = &Увольнение
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
Где
    НЕ КадроваяИсторияСотрудниковИнтервальный.Сотрудник В (Выбрать Таб.Сотрудник из ВТ_Уволенные КАК Таб)
---
Очень круто, спасибо!
---
достаточно сделать:

```1c
    ВЫБРАТЬ
    КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
    Где
    НЕ КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
```
---
так там же много строк по одному сотруднику, так не выйдет
---
в варианте (2) будет тоже самое

Если вам нужна последняя запись, то стройте запрос к РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних()
---
да нормально показывает, все по одной записи. пока так оставлю
---
```1c
    //Пример функция для получения актуальных работающих сотрудников за период
    //Возвращается таблица значений

    Функция ПроверитьНаличиеПодработки(Сотрудник, ДатаНазначения)

    СтруктураДанных = Новый Структура();

    СтруктураДанных.Вставить("ДатаНачала",);
    СтруктураДанных.Вставить("ДатаОкончания",);
    СтруктураДанных.Вставить("РазмерОклада",);

    ПараметрыПолучения = ПолучитьПараметры();
    ПараметрыПолучения.Организация = ЭтотОбъект.Организация;

    //Если ЗначениеЗаполнено(Подразделение) Тогда
    // ПараметрыПолучения.Подразделение = Подразделение;
    //КонецЕсли;

    //Если ВключаяУволенныхНаНачалоПериода Тогда
    // ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
    //КонецЕсли;

    ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
    ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);
    ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
    ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;

    // ОТБОР ПО ВИДУ ЗАНЯТОСТИ РАБОТАЕТ ТОЛЬКО НАЧИНАЯ С РЕДАКЦИИ 3.1.7
    //ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
    // ПараметрыПолучения.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Подработка);

    ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
    ПараметрыПолучения.Отборы, "ФизическоеЛицо", "=", Сотрудник.ФизическоеЛицо);

    ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы";

    ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);

    Возврат ТаблицаСотрудников;

    КонецФункции

    &НаСервере
    Функция ПолучитьПараметры()
    Возврат КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛи­ц();
    КонецФункции
```

используйте универсальные функции https://infostart.ru/1c/articles/942569/
---
а потом захочется на другую дату сформировать отчёт, тогда надо уже будет сравнивать, что дата увольнения не заполнена или что она больше параметр.дата
---
Приходится переделать,
потому что нашлась такая шляпа:

 нужно видеть сотрудника, у которого были начисления за прошлый месяц, даже если уволен в прошлом месяц (логично).

И тогда спасает фильтр по периоду увольнения:

```1c
    ГДЕ
    КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = &Увольнение
    И КадроваяИсторияСотрудниковИнтервальный.ПериодЗаписи < &НачалоПрошлогоМесяца
```