Добрый день!

Сразу оговорюсь, я не 1с программист и все тонкости не понимаю.

Кратко опишу суть:
   - Пытаюсь сделать отчёт в котором будут отражаться текущие пользователи, дата приёма и если есть, то дата увольнения. Дата приёма по сути не нужна, мне главное видеть уволен ли сотрудник пользователя или нет.

Крастко опишу проблему:
   - Есть справочник с пользователями, пользователи привязываются к физ.лицу, но по мимо физ.лица у нас есть справочник сотрудники и они могут принимаются на работу несколько раз (физ.лицо одно, а сотрудников много). Данные о приёмах и увольнениях хранятся в непериодическом регистре сведений и вся проблема заключается в том что я не могу с него получить последнюю запись.

Уже второй день вожусь, перегуглил все варианты что приходили в голову, ничего не помогло. Выборка через "МАКСИМУМ" не помогла потому что в этом случае выбирается последняя максимальная дата увольнения.

Ниже один из основных вариантов запроса который я пробовал (остальные варианты его модификации с дополнительными условиями)

```1c
    ВЫБРАТЬ
    Пользователи.Наименование КАК Наименование,
    Пользователи.ФизическоеЛицо КАК ФизическоеЛицо
    ПОМЕСТИТЬ ДанныеФизЛиц
    ИЗ
    Справочник.Пользователи КАК Пользователи
    ГДЕ
    Пользователи.Недействителен = &ЛОЖЬ
    И ВЫБОР
    КОГДА Пользователи.ФизическоеЛицо.Ссылка ЕСТЬ NULL
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ДанныеФизЛиц.Наименование КАК Наименование,
    ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения, "") КАК ДатаУвольнения
    ИЗ
    ДанныеФизЛиц КАК ДанныеФизЛиц,
    РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    ГДЕ
    ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо = ДанныеФизЛиц.ФизическоеЛицо

    УПОРЯДОЧИТЬ ПО
    Наименование
```

Подскажите пожалуйста может я что-то не понимаю, а решение лежит на поверхности.
---
По сути задача сводится к тому, чтобы понять, какая из последних дата больше - приема или увольнения.
Отсюда вывод: если мы получим по каждому сотруднику последнюю дату приема и последнюю дату увольнения, то простым сравнением сможем получить искомый результат.
Сведя задачу к паре простых вопросов, можем переходить к решению.
А вот выбор варианта решения зависит много от чего. Квалификация исполнителя, выделенное на решение время, требования к быстродействию и т.д. Может, попробовать просто перебором решить? если запросы вызывают вопросы...
---
Большое спасибо за подсказку) Получилось. Итоговый вариант такой:

```1c
    ВЫБРАТЬ
    Пользователи.Наименование КАК Наименование,
    ВЫБОР
    КОГДА МАКСИМУМ(ТекущиеКадровыеДанныеСотрудников.ДатаПриема) > МАКСИМУМ(ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения)
    ТОГДА "Работает"
    ИНАЧЕ "Уволен"
    КОНЕЦ КАК Статус
    ИЗ
    Справочник.Пользователи КАК Пользователи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    ПО Пользователи.ФизическоеЛицо = ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо
    ГДЕ
    Пользователи.Недействителен = &ЛОЖЬ
    И ВЫБОР
    КОГДА Пользователи.ФизическоеЛицо.Ссылка ЕСТЬ NULL
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ

    СГРУППИРОВАТЬ ПО
    Пользователи.Наименование
```
---
```1c
    ВЫБРАТЬ
    Пользователи.Наименование КАК Наименование,
    Пользователи.ФизическоеЛицо КАК ФизическоеЛицо
    ПОМЕСТИТЬ ДанныеФизЛиц
    ИЗ
    Справочник.Пользователи КАК Пользователи
    ГДЕ
    Пользователи.ПометкаУдаления = ЛОЖЬ
    И Пользователи.Недействителен = ЛОЖЬ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ДанныеФизЛиц.Наименование КАК Наименование,
    ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
    ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения
    ИЗ
    ДанныеФизЛиц КАК ДанныеФизЛиц,
    РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    ГДЕ
    ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо = ДанныеФизЛиц.ФизическоеЛицо

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

какая разница как называется, если выбираем по ссылкам

смущает

```1c
    ГДЕ
    Пользователи.Недействителен = &ЛОЖЬ
```

по-моему, рано писать запросы - элементарной базы знаний еще нет
---
Так и есть) Я писал об этом выше. Мне просто прикрутили администрирование базой и я решил упростить себе жизнь в некотороых местах)
---
админа сразу в код ЗУПа бросили без подготовки?
мда, тяжело вам будет.)
---
Что такое ЗУП? Нет. Меня кинули дорабатывать ПФ где-то месяц назад, а теперь польностью базу прикрутили)
---
Что такое ПФ?

(9)
---
ЗУП - конфиг Зарплата и Управление персонала
---
У нас ERP
---
По сути задача сводится к тому, чтобы понять, какая из последних дата больше - приема или увольнения.
Отсюда вывод: если мы получим по каждому сотруднику последнюю дату приема и последнюю дату увольнения, то простым сравнением сможем получить искомый результат.
Сведя задачу к паре простых вопросов, можем переходить к решению.
А вот выбор варианта решения зависит много от чего. Квалификация исполнителя, выделенное на решение время, требования к быстродействию и т.д. Может, попробовать просто перебором решить? если запросы вызывают вопросы...
---
Можешь на примере объяснить? Я теории понял, но не могу понять как мне вывести строку с нужным результатом. Условно скажем у меня сотрудника принимали 3 раза и увольняли 2 раза. Я беру максимум из обоих столбцов, но не понимаю как поставить условие в запросе так чтобы в итоге получилась искомая строка?
---
Большое спасибо за подсказку) Получилось. Итоговый вариант такой:

```1c
    ВЫБРАТЬ
    Пользователи.Наименование КАК Наименование,
    ВЫБОР
    КОГДА МАКСИМУМ(ТекущиеКадровыеДанныеСотрудников.ДатаПриема) > МАКСИМУМ(ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения)
    ТОГДА "Работает"
    ИНАЧЕ "Уволен"
    КОНЕЦ КАК Статус
    ИЗ
    Справочник.Пользователи КАК Пользователи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    ПО Пользователи.ФизическоеЛицо = ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо
    ГДЕ
    Пользователи.Недействителен = &ЛОЖЬ
    И ВЫБОР
    КОГДА Пользователи.ФизическоеЛицо.Ссылка ЕСТЬ NULL
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ

    СГРУППИРОВАТЬ ПО
    Пользователи.Наименование
```