Здравствуйте. Подскажите пожалуйста, в зуп есть регистр кадроваяисториясотрудников, как вывести актуальный список работающих за 2021 год? Пробовал так

```1c
    ГДЕ (кадроваяисториясотрудников. ВидСобытия = @Прием И кадроваяисториясотрудников. Период <= @ Конец21Года) И (кадроваяисториясотрудников. ВидСобытия = @Увольнение И кадроваяисториясотрудников.Период2 > @ Начало21Года
```

Но так запрос не срабатывает, выводит 0, если увольнение убираю, то вроде как формируется, но не знаю верно будет или нет! Подскажите как правильно? На @не обращайте внимание, пишу с телефона не могу амперсант найти.
---
https://infostart.ru/1c/articles/942569/

Например, пункт "Получить работающих сотрудников по заданным параметрам отбора".

Либо, если нужны не сотрудники, а физлица, есть КадровыйУчет.ФизическиеЛицаРаботавшиеВОрганизации(), возвращает то, что вам нужно в разрезе физлиц.

P.S. при работе с ЗУП 3 советую забыть про существование прямых обращений к регистрам и использовать программный интерфейс.
---
Если количество, то список сотрудников получаете как я писал выше, а дальше получаете таблицу с нужными данными через КадровыйУчет.КадровыеДанныеСотрудников();

В качестве 3 параметра передаете например "Образование1ВидОбразования,УченаяСтепень,УченоеЗвание".
Вернется таблица значений, с колонками Сотрудник, Образование1ВидОбразования, УченаяСтепень и Ученое звание.

Со среднесписочной сложнее, т.к. в ЗУП/ЗКГУ среднесписочная считается с помощью отчета "СтатистикаПерсонала" и там используется механизм представлений, в нем по умолчанию нет данных по степени, виду образования и т.д. Но есть пример как с помощью механизма представлений эти данные получаются, например в отчете ИспытательныйСрокСотрудников. Вот эти 2 отчета скрестить, и получите среднесписочную в разрезе видов образования/степеней. В целом не очень сложно.
---
Просто ВидОбразования нельзя указать, список возможных вариантов смотрите в КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеФизическихЛиц(), КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеСотрудников и т.д., в комментарии перед функцией.

Именно Образование1ВидОбразования. Тут будет Высшее, если у сотрудника введено Высшее и Среднее и Среднее, если введено только Среднее.
---
Ваш запрос выберет записи по уволенным сотрудникам. РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, ) при применении фильтра по ВидуСобытия найдет запись по уволенному сотруднику до ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)

Правильно, это когда мы выбираем уволенных сотрудников во временную таблицу и фильтруем записи регистров с учетом периода и списка уволенных.

Вот так :

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

    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Сотрудник
    ИЗ РегистрСведений.КадроваяИсторияСотрудников КАК КИС
    ГДЕ
    КИС.Период <= &Конец21Года
    И
    НЕ Сотрудник В (ВЫБРАТЬ Сотрудник ИЗ Вт_УволенныеДо21Года)
```
---
Наврал, сейчас глянул, там сортировка по важности, важность задается в КадровыйУчетРасширенный.ВидыОбразованийПоВажности().
Т.е. если у сотрудника Высшее и Среднее, то в Образование1ВидОбразования будет Высшее, а в Образование2ВидОбразования - Среднее.
---
Можно рассуждать так: сотрудники, работавшие за период – это те, кто на начало периода не уволен, плюс все те, по которым есть какие либо записи кадровой истории за период.

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

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    КадроваяИсторияСотрудников.Сотрудник
    ИЗ
    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    ГДЕ
    КадроваяИсторияСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
```
---
Ваш запрос выберет записи по уволенным сотрудникам. РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, ) при применении фильтра по ВидуСобытия найдет запись по уволенному сотруднику до ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)

Правильно, это когда мы выбираем уволенных сотрудников во временную таблицу и фильтруем записи регистров с учетом периода и списка уволенных.

Вот так :

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

    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Сотрудник
    ИЗ РегистрСведений.КадроваяИсторияСотрудников КАК КИС
    ГДЕ
    КИС.Период <= &Конец21Года
    И
    НЕ Сотрудник В (ВЫБРАТЬ Сотрудник ИЗ Вт_УволенныеДо21Года)
```
---
Ваш запрос выберет записи по уволенным сотрудникам. РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, ) при применении фильтра по ВидуСобытия найдет запись по уволенному сотруднику до ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) Это могло быть так, если бы условие я задал в параметрах. Кстати, ваш запрос не вернёт сотрудников, уволенных до 2021 года и позже восстановленных в должности.
---
вернет. только это будут разные сотрудники
---
Ок, спасибо, я с телефона просто писал, у меня глюкануло, думал не опубликовалась тема!
---
Проверили ? Всё ровно ?
---
Здравствуйте. Сейчас попробую!
---
У Вас есть дублированный вопрос по этой же теме. Там шире написала.
https://forum.infostart.ru/forum9/topic279727/
---
(2)

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

Например, пункт "Получить работающих сотрудников по заданным параметрам отбора".

Либо, если нужны не сотрудники, а физлица, есть КадровыйУчет.ФизическиеЛицаРаботавшиеВОрганизации(), возвращает то, что вам нужно в разрезе физлиц.

P.S. при работе с ЗУП 3 советую забыть про существование прямых обращений к регистрам и использовать программный интерфейс.
---
Здравствуйте. А как использовать программный интерфейс, если мне нужна численность сотрудников с разбивкой по видам образования, А также с разбивкой тех у кого степень доктора и степень кандидата, А ну и ещё по группам исследователи, техники, прочие и вспомогательные сотрудники.
---
Численность по правилам подсчета средней/среднесписочной численности или просто количество?
---
Здравствуйте! Среднесписочную тоже нужно, но и количество тоже необходимо 2-наука отчет, он в бухгалтерии есть, а в зуп нет, а мне нужно в зуп, вот я и пытаюсь сделать1
---
Если количество, то список сотрудников получаете как я писал выше, а дальше получаете таблицу с нужными данными через КадровыйУчет.КадровыеДанныеСотрудников();

В качестве 3 параметра передаете например "Образование1ВидОбразования,УченаяСтепень,УченоеЗвание".
Вернется таблица значений, с колонками Сотрудник, Образование1ВидОбразования, УченаяСтепень и Ученое звание.

Со среднесписочной сложнее, т.к. в ЗУП/ЗКГУ среднесписочная считается с помощью отчета "СтатистикаПерсонала" и там используется механизм представлений, в нем по умолчанию нет данных по степени, виду образования и т.д. Но есть пример как с помощью механизма представлений эти данные получаются, например в отчете ИспытательныйСрокСотрудников. Вот эти 2 отчета скрестить, и получите среднесписочную в разрезе видов образования/степеней. В целом не очень сложно.
---
))) Спасибо! Буду пытаться, список действительно вышел через модуль, как минимум я его могу вставить в параметр (список ФЛ), а таблица срез последних! Сейчас попробую Кадровые данные использовать
---
Ой, а как правильно параметры записать (я про 3 параметр), чтобы вывел высшее, если есть высшее, средне, если нет высшего, прочее если нет высшего и среднего, ну и нет, если его нет вообще? Или потом пост обработку делать?
---
Да, постобработку. В Образование1ВидОбразования вернется только фактический заданный сотруднику вид образования.
---
А т.е. основное (со знаком истина)?
---
Наврал, сейчас глянул, там сортировка по важности, важность задается в КадровыйУчетРасширенный.ВидыОбразованийПоВажности().
Т.е. если у сотрудника Высшее и Среднее, то в Образование1ВидОбразования будет Высшее, а в Образование2ВидОбразования - Среднее.
---
Ну если я напишу Выбрать
   Данные3Параметра = "ВидОбразования,УченаяСтепень";
То у меня же заполнится автоматически по важности, не нужно же еще параметры добавить? Я в коде проверил у всех заполнено, не знаю актуально или нет, но есть как и высшее, так и среднее, данные вроде не повторяются!
---
Просто ВидОбразования нельзя указать, список возможных вариантов смотрите в КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеФизическихЛиц(), КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеСотрудников и т.д., в комментарии перед функцией.

Именно Образование1ВидОбразования. Тут будет Высшее, если у сотрудника введено Высшее и Среднее и Среднее, если введено только Среднее.
---
ОК. спасибо!
---
я бы взял тех, у кого состояние не равно увольнение на 1 января + тех, у кого было состояние "приём" в период 1.1-31.12