Здравствуйте, есть вот такой запрос, как сделать, чтобы он выводил только последний кадровый перевод сотрудника?
ВЫБРАТЬ
ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение,
Сотрудники.Наименование КАК Наименование,
ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность,
ВЫБОР КОГДА СЭ_ДоговорыМОЛ.Период есть 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")
(3)У должности должен быть какой то признак в виде реквизита или доп. реквизита (ну или связанный с должностью какой-нибудь регистр сведений, если это периодическое значение). и по этому признаку она должна отбираться в запрос.
Нужно весь запрос переделать. Кадровые данные нужно брать из регистров кадровая история и кадровая история интервальный. И переделайте эти условия на код должности. Так запросы не пишут.
(3)У должности должен быть какой то признак в виде реквизита или доп. реквизита (ну или связанный с должностью какой-нибудь регистр сведений, если это периодическое значение). и по этому признаку она должна отбираться в запрос.
(10)Если должности в документе соответствуют тем, что у вас в условии, то, конечно, лучше их брать из документа. Также использовать РС "Кадровая история сотрудников интервальный" (как написали в (11)) для получения последнего кадрового перевода.
(13)Про документ, это я написал к тому, что нужно еще избавиться от этого условия с проверкой на код должности, а для этого нужно эти должности как то получить по другому(без проверки на код). user1816391 написал, что вроде как эти должности есть в документе "НазначениеДолжностейМОЛ"
(15)Но параметр тоже нужно откуда то заполнять. Хранить эти должности в коде плохо, т.к. при изменении списка придется править код. Чтобы не писать отдельную процедуру заполнения параметра, лучше сделать все в одном запросе.
(16)всей задачи не знаю, поэтому и не могу сказать. А так конечно проще создать дополнительный реквизит для должности и отбирать уже по нему в запросе. Правда тут еще вопрос возникает не путает ли автор справочники должности и штатное расписание.
т.к. взяли уже существующий запрос, который в другой задаче, видимо, всех устраивал.
Да нет, скорее всего писали, судя по тому, что этот запрос выберет все что угодно, только не нужные данные. Потому как приведенные связи совершенно не отражают ситуацию, когда у сотрудника множество переводов, множество договоров о МОЛ и т.д.
ВЫБРАТЬ
ВЫБОР
КОГДА СЭ_ДоговорыМОЛ.Период ЕСТЬ NULL
ТОГДА "НЕ ЗАКЛЮЧЕН"
ИНАЧЕ СЭ_ДоговорыМОЛ.Период
КОНЕЦ КАК Период,
СЭ_ДоговорыМОЛ.ВидМатериальнойОтветственности КАК ВидМатериальнойОтветственности,
КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
КадровыйПеревод.ДатаНачала КАК ДатаНачала
ИЗ
РегистрСведений.СЭ_ДолжностиМОЛ.СрезПоследних КАК СЭ_ДолжностиМОЛСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СЭ_ДоговорыМОЛ КАК СЭ_ДоговорыМОЛ
ПО (СЭ_ДоговорыМОЛ.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник
ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод КАК КадровыйПеревод
ПО КадроваяИсторияСотрудниковСрезПоследних.Регистратор = КадровыйПеревод.Ссылка
ПО СЭ_ДолжностиМОЛСрезПоследних.Должность = КадроваяИсторияСотрудниковСрезПоследних.Должность
И СЭ_ДолжностиМОЛСрезПоследних.Подразделение = КадроваяИсторияСотрудниковСрезПоследних.Подразделение
ГДЕ
(СЭ_ДоговорыМОЛ.Период <= &Дата
ИЛИ СЭ_ДоговорыМОЛ.Период ЕСТЬ NULL) и не КадроваяИсторияСотрудниковСрезПоследних.Сотрудник есть NULL
(20)А теперь сделайте на сотрудника временный кадровый перевод(с датой окончания) и удивитесь должности и подразделению, которые возвратит ваш запрос на дату после этой даты окончания)
Смотрите в сторону КадровыйУчет.КадровыеДанныеСотрудников()
А вообще почитайте https://infostart.ru/1c/articles/942569/ очень и очень полезная инфа для тех, кто работает с ЗУПовским функционалом