Приветствую Коллеги!
Делаю выборку работающих сотрудников на определенную дату.

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

В запрос дейтвительно попадают работающие сотрудники по выбранной организации.
Но почему???
Ведь выборка идет из Справочник.Сотрудники и ЛЕВОЕ соединение с регистром.
Значит, должен быть выбран весь справочник сотрудники! Но в выборку попадают сотрудники работающие в выбранной организации....
Я сломался...
---
Логика проста до безобразия. Если левое соединение, то в правой части NULL. Если наложить хоть какое-то условие на правую часть, то все NULL отсекаются и получается внутреннее соединение. Мог бы и сам догадаться
---
Условие в "где" превращает левое во внутреннее соединение
---
Сообщение было скрыто модератором.
---
В условии не важно а = б или б=а
---
отбор из секции ГДЕ перенести в условия соединения таблиц.
---
Можно подробнее? Если в параметре то это не пойдет.
---
```1c
    ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаПерехода, Организация = &Организация) КАК КадроваяИсторияСотрудниковСрезПоследних
    ПО (КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = Сотрудники.Ссылка)
    И КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
```
---
Условие в "где" превращает левое во внутреннее соединение
---
Сообщение было скрыто модератором.
---
Левое соединение остается Левым, нигде оно не превращается
Легким движением руки брюки превращаются... превращаются брюки... брюки превращаются... В элегантные шорты!
---
не согласен. Результат запроса будет такой же, как если бы это было внутреннее соединение
---
но соединение останется левым
---
ок. в следующий раз прежде, чем написать, я буду стараться все разжевать подробно, при этом помечая знаками препинания используемые мной упрощения
---
так Вы сравните Условие в "где" превращает левое во внутреннее соединение и Результат запроса будет такой же, как если бы это было внутреннее соединение
---
чего вы хотите добиться?) для меня левое соединение с условием, отсевающее левую часть, равносильно внутреннему. Если это не так, что ж, я переживу
---
так это Вам понятно. А новичок может запутаться
Добавит условие к основной таблице и подумает, что это равносильно внутреннему соединению
---
я бы на месте новичка не понял, почему условие где отсекается левую часть соединения :)
---
Ну Тс вот и не понимает, а Ваш ответУсловие в "где" превращает левое во внутреннее соединение еще больше путает
Если бы сразу написали Результат запроса будет такой же, как если бы это было внутреннее соединение ,то я бы ничего не написал
Не пишу, что вы не правы, просто не стоит путать и так не понимающих
---
я уже дал ответ в (9). Я не понимаю к чему вообще весь этот диалог... В смысле что вам еще надо?)))
---
да мне ничего)
---
не очень-то и заметно. Сегодня вроде не пятница)
---
так скоро Новый год, вся неделя как пятница xD
---
Действительно внутреннее... Но как теперь с этим жить? 🤣 Да и логику этого я не улавливаю пока...
---
Логика проста до безобразия. Если левое соединение, то в правой части NULL. Если наложить хоть какое-то условие на правую часть, то все NULL отсекаются и получается внутреннее соединение. Мог бы и сам догадаться
---
ах, если бы. Самые нужные обновления 1с выпускает под новый год(
К тому же запрос все равно неправильный) Используется один из трех регистров с кадровой историей. Если были исправления или корректировки результат уже не такой. К тому же разработчики ЗУПа завтра могут все переделать ;)
---
То есть по хорошему надо использовать все три регистра?
---
по-хорошему нужно изучить хотя бы эту статью https://infostart.ru/1c/articles/942569/
---
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
Благодарю!
---
использование типовых функций в разделе ЗУП - это самый надежный вариант. Если окунуться еще глубже, то можно вместо таблицы получить МенеджерВременныхТаблиц, который затем можно использовать в запросах ;)
---
а если вся эта штука используется для написания отчета, то самое правильное решение будет еще проще. Можете прочитать по механизм представлений в ЗУПе :)