Здравствуйте, есть вот такой запрос, как сделать, чтобы он выводил только последний кадровый перевод сотрудника?

```1c
    ВЫБРАТЬ
    ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение,
    Сотрудники.Наименование КАК Наименование,
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность,
    ВЫБОР КОГДА СЭ_ДоговорыМОЛ.Период есть NULL ТОГДА "НЕ ЗАКЛЮЧЕН" ИНАЧЕ СЭ_ДоговорыМОЛ.Период КОНЕЦ КАК Период,
    Увольнение.Дата КАК ДатаУвольнения,
    КадровыйПеревод.Дата КАК ДатаПеревода,
    СЭ_ДоговорыМОЛ.ВидМатериальнойОтветственности КАК ВидМатериальнойОтветственности,
    ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение.Код КАК ТекущееПодразделениеКод,
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код КАК ТекущаяДолжностьКод
    ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    ПО (ТекущиеКадровыеДанныеСотрудников.Сотрудник = Сотрудники.Ссылка)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СЭ_ДоговорыМОЛ КАК СЭ_ДоговорыМОЛ
    ПО (СЭ_ДоговорыМОЛ.Сотрудник = Сотрудники.Ссылка)
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод КАК КадровыйПеревод
    ПО (КадровыйПеревод.Сотрудник = Сотрудники.Ссылка)
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.Увольнение КАК Увольнение
    ПО (Увольнение.Сотрудник = Сотрудники.Ссылка)
    ГДЕ
    СЭ_ДоговорыМОЛ.Период <=&Дата и (
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1411-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1415-005-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1219-020-02-0-03" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-116-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-063-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1219-016-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1324-128-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1211-009-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-010-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2423-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1345-037-02-0-06" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1311-045-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2113-005-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2149-022-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2144-040-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-044-02-0-06" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2151-033-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2631-021-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2412-010-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "8322-001-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2359-025-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4411-001-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "3331-003-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4322-014-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2433-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2622-004-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5230-001-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "8156-005-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-026-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5120-003-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7512-013-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4321-002-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7543-017-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5223-001-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-012-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-015-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7543-029-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-003-02-0-00")
    или СЭ_ДоговорыМОЛ.Период есть NULL и (
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1411-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1415-005-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1219-020-02-0-03" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-116-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-063-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1219-016-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1324-128-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1211-009-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-010-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2423-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1345-037-02-0-06" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1311-045-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2113-005-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2149-022-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2144-040-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1321-044-02-0-06" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2151-033-02-0-05" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2631-021-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2412-010-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "8322-001-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2359-025-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4411-001-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "3331-003-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4322-014-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2433-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "2622-004-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5230-001-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "8156-005-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-026-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5120-003-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7512-013-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "4321-002-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7543-017-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "5223-001-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-012-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1420-015-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "7543-029-01-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-003-02-0-00" или
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.Код = "1221-003-02-0-00")
```
---
У должности должен быть какой то признак в виде реквизита или доп. реквизита (ну или связанный с должностью какой-нибудь регистр сведений, если это периодическое значение). и по этому признаку она должна отбираться в запрос.
---
Нужно весь запрос переделать. Кадровые данные нужно брать из регистров кадровая история и кадровая история интервальный. И переделайте эти условия на код должности. Так запросы не пишут.
---
И переделайте эти условия на код должности. Так запросы не пишут. что вы имеете ввиду?
---
ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность В (&СписокДолжностей)
---
дело в том, что тут нужны только статические должности
---
из регистра ТекущиеКадровыеДанныеСотрудников вы не сможете получить последний кадровый перевод.
---
У должности должен быть какой то признак в виде реквизита или доп. реквизита (ну или связанный с должностью какой-нибудь регистр сведений, если это периодическое значение). и по этому признаку она должна отбираться в запрос.
---
Можно еще сделать отдельный Регистр сведений, заполнить его нужными должностями и использовать его в вашем запросе
---
есть документ НазначениеДолжностейМОЛ, в нем прописываются все должности, которые имеют МОЛ.

Как мне сейчас лучше поступить?
---
Написали же что лучше использовать РС "Кадровая история сотрудников интервальный".
---
Если должности в документе соответствуют тем, что у вас в условии, то, конечно, лучше их брать из документа. Также использовать РС "Кадровая история сотрудников интервальный" (как написали в (11)) для получения последнего кадрового перевода.
---
Если должности в документе соответствуют тем, что у вас в условии, то, конечно, лучше их брать из документа. Должности есть и в регистре, так что лучше использовать 1 запрос
---
Про документ, это я написал к тому, что нужно еще избавиться от этого условия с проверкой на код должности, а для этого нужно эти должности как то получить по другому(без проверки на код). user1816391 написал, что вроде как эти должности есть в документе "НазначениеДолжностейМОЛ"
---
Список долностей лучше вынести в параметр, тогда читать запрос будет гораздо легче, чем вот эту портянку
---
Но параметр тоже нужно откуда то заполнять. Хранить эти должности в коде плохо, т.к. при изменении списка придется править код. Чтобы не писать отдельную процедуру заполнения параметра, лучше сделать все в одном запросе.
---
всей задачи не знаю, поэтому и не могу сказать. А так конечно проще создать дополнительный реквизит для должности и отбирать уже по нему в запросе. Правда тут еще вопрос возникает не путает ли автор справочники должности и штатное расписание.
---
Сложно сказать. Скорей всего все-таки именно должности, т.к. взяли уже существующий запрос, который в другой задаче, видимо, всех устраивал.
---
т.к. взяли уже существующий запрос, который в другой задаче, видимо, всех устраивал.Да нет, скорее всего писали, судя по тому, что этот запрос выберет все что угодно, только не нужные данные. Потому как приведенные связи совершенно не отражают ситуацию, когда у сотрудника множество переводов, множество договоров о МОЛ и т.д.
---
по итогу сделал так

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

КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников()

В качестве параметра КадровыеДанные передать строку "Подразделение,Должность,РабочееМестоПериодРегистрации,ДатаУвольнения"

Использовать полученную ВТ вместо таблиц ТекущиеКадровыеДанныеСотрудников, ТекущиеКадровыеДанныеСотрудников и КадровыйПеревод
---
Смотрите в сторону КадровыйУчет.КадровыеДанныеСотрудников()
А вообще почитайте https://infostart.ru/1c/articles/942569/ очень и очень полезная инфа для тех, кто работает с ЗУПовским функционалом