Всем привет!
1С:ЗУП, последнее обнавление.
Как сделать так, что запрос к РегистрСведений.СостоянияСотрудников выводил только работающих сотрудников?
Такое ощущение, что этот регистр по СрезПоследних не выводит никаким образом работающих сотрудников.
---
Посмотри, например, документ увольнение - он не пишет в СостоянияСотрудников, он пишет в ДанныеСостоянийСотрудников, правда он не виртуальный, но можно сделать типа так

```1c
    ВЫБРАТЬ
    ДанныеСостоянийСотрудников.Сотрудник КАК Сотрудник,
    МАКСИМУМ(ДанныеСостоянийСотрудников.Начало) КАК Дата
    ПОМЕСТИТЬ ВременнаяТаблица1
    ИЗ
    РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников

    СГРУППИРОВАТЬ ПО
    ДанныеСостоянийСотрудников.Сотрудник
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица1.Сотрудник КАК Сотрудник,
    ВременнаяТаблица1.Дата КАК Дата,
    ДанныеСостоянийСотрудников.Состояние КАК Состояние
    ИЗ
    ВременнаяТаблица1 КАК ВременнаяТаблица1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
    ПО (ВременнаяТаблица1.Сотрудник = ДанныеСостоянийСотрудников.Сотрудник)
    И (ВременнаяТаблица1.Дата = ДанныеСостоянийСотрудников.Начало)

    УПОРЯДОЧИТЬ ПО
    Сотрудник
```

получится типа
А1 Б М 17.03.2025 0:00:00 Работа
А2 Б М 18.03.2025 0:00:00 Работа
А3 Б М 24.03.2025 0:00:00 Работа
А4 Б М 21.05.2025 0:00:00 Отпуск неоплачиваемый по разрешению работодателя
А5 Б М 09.04.2025 0:00:00 Работа
А6 Б М 09.04.2025 0:00:00 Работа
А7 Б М 15.05.2025 0:00:00 Увольнение
А8 Б М 29.05.2025 0:00:00 Болезнь
А9 Б М 29.05.2025 0:00:00 Болезнь
А0 Б М 08.05.2025 0:00:00 Увольнение
---
А как пробовал? Хвастайся.
---
А что хвастаться, есть задача, вывести всех актуальных, работающих сотрудников на первое число месяца.
Хочется это сделать в запросе, но регистр мне не поддался, в хвост и гриву его пробую, никаком образом он не слушается.
Ну например:

```1c
    ВЫБРАТЬ
    МАКСИМУМ(СостоянияСотрудниковСрезПоследних.Период) КАК Период,
    СостоянияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
    СостоянияСотрудниковСрезПоследних.Состояние КАК Состояние,
    СостоянияСотрудниковСрезПоследних.ДокументОснование КАК ДокументОснование
    ИЗ
    РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
    ГДЕ
    СостоянияСотрудниковСрезПоследних.Состояние = &Состояние

    СГРУППИРОВАТЬ ПО
    СостоянияСотрудниковСрезПоследних.Сотрудник,
    СостоянияСотрудниковСрезПоследних.Состояние,
    СостоянияСотрудниковСрезПоследних.ДокументОснование
```
---
никаком образом он не слушается. Хамит в ответ? Возьми кнут пожестче.
---
Возьми кнутИ регистр запихает этот кнут ему обратно в.
Подпишусь, пожалуй. Посмотреть хочется.
---
в хвост и гриву его пробуюНо пока наоборот.

Является ли сотрудник в состоянии командировки работающим?
---
Для начала, хотя бы тех, кто не находиться в отпуске по уходу за ребёнком
---
Какова исходная задача? Что попросили получить на выходе? Какой отчёт?
---
нужно получить список всех работающих сотрудников на последний(первый) день месяца. Уволенные и в отпуске по уходу за ребенком считается не работающие.
---
Гляньте типовой отчёт СостоянияСотрудников
Его вариант не совсем удачно называется "Отсутствия сотрудников" - но в настройках можно легко указать именно что работу.
Возьмёте его запрос в СКД и уберёте всё лишнее для своих нужд, для формирования своего списка.
Заодно набьёте руку на временных таблицах в ЗУПе.
---
Вопросов нет, можно нагородить подзапросов и условий "ВЫБОР", но насколько понимаю, должно было решаться Срезом Последних
---
ЗУП особенная программа в линейке 1С, в ней много алгоритмов завязано на ВТ и прямые запросы к РС не будут достоверно работать как в других конфигурациях.
Лучше пользоваться уже готовыми универсальными функциями и процедурами:
https://infostart.ru/1c/articles/942569/

В частности почитайте простыню описания к Функция ЗапросВТКадровыеДанныеСотрудников
В ней в списке полей к третьему параметру данной функции есть и Состояние сотрудника.
---
Посмотри, например, документ увольнение - он не пишет в СостоянияСотрудников, он пишет в ДанныеСостоянийСотрудников, правда он не виртуальный, но можно сделать типа так

```1c
    ВЫБРАТЬ
    ДанныеСостоянийСотрудников.Сотрудник КАК Сотрудник,
    МАКСИМУМ(ДанныеСостоянийСотрудников.Начало) КАК Дата
    ПОМЕСТИТЬ ВременнаяТаблица1
    ИЗ
    РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников

    СГРУППИРОВАТЬ ПО
    ДанныеСостоянийСотрудников.Сотрудник
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВременнаяТаблица1.Сотрудник КАК Сотрудник,
    ВременнаяТаблица1.Дата КАК Дата,
    ДанныеСостоянийСотрудников.Состояние КАК Состояние
    ИЗ
    ВременнаяТаблица1 КАК ВременнаяТаблица1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
    ПО (ВременнаяТаблица1.Сотрудник = ДанныеСостоянийСотрудников.Сотрудник)
    И (ВременнаяТаблица1.Дата = ДанныеСостоянийСотрудников.Начало)

    УПОРЯДОЧИТЬ ПО
    Сотрудник
```

получится типа
А1 Б М 17.03.2025 0:00:00 Работа
А2 Б М 18.03.2025 0:00:00 Работа
А3 Б М 24.03.2025 0:00:00 Работа
А4 Б М 21.05.2025 0:00:00 Отпуск неоплачиваемый по разрешению работодателя
А5 Б М 09.04.2025 0:00:00 Работа
А6 Б М 09.04.2025 0:00:00 Работа
А7 Б М 15.05.2025 0:00:00 Увольнение
А8 Б М 29.05.2025 0:00:00 Болезнь
А9 Б М 29.05.2025 0:00:00 Болезнь
А0 Б М 08.05.2025 0:00:00 Увольнение