Добрый день, прошу помощи с запросом.
Есть справочник "Сотрудники" и есть документ "Табель" с ТЧ, где фигурируют сотрудники из справочника, но не все.
Подскажите, пожалуйста, как можно вывести всех сотрудников, которые есть в документе и которые вообще ни в одном табеле не фигурирую.

```1c
    ВЫБРАТЬ
    Сотрудники.Ссылка КАК Ссылка,
    Сотрудники.Код КАК Код,
    ТабельСписок.ФИО КАК ФИО,
    Сотрудники.Должность КАК Должность,
    ТабельСписок.ДатаДок КАК ДатаДок,
    ЕСТЬNULL(ТабельСписок.День1, 0) КАК День1,
    ЕСТЬNULL(ТабельСписок.День2, 0) КАК День2,
    ЕСТЬNULL(ТабельСписок.День3, 0) КАК День3,
    ЕСТЬNULL(ТабельСписок.День4, 0) КАК День4,
    ЕСТЬNULL(ТабельСписок.День5, 0) КАК День5,
    ЕСТЬNULL(ТабельСписок.День6, 0) КАК День6,
    ЕСТЬNULL(ТабельСписок.День7, 0) КАК День7,
    ЕСТЬNULL(ТабельСписок.День8, 0) КАК День8,
    ЕСТЬNULL(ТабельСписок.День9, 0) КАК День9,
    ЕСТЬNULL(ТабельСписок.День10, 0) КАК День10,
    ЕСТЬNULL(ТабельСписок.День11, 0) КАК День11,
    ЕСТЬNULL(ТабельСписок.День12, 0) КАК День12,
    ЕСТЬNULL(ТабельСписок.День13, 0) КАК День13,
    ЕСТЬNULL(ТабельСписок.День14, 0) КАК День14,
    ЕСТЬNULL(ТабельСписок.День15, 0) КАК День15,
    ЕСТЬNULL(ТабельСписок.День16, 0) КАК День16,
    ЕСТЬNULL(ТабельСписок.День17, 0) КАК День17,
    ЕСТЬNULL(ТабельСписок.День18, 0) КАК День18,
    ЕСТЬNULL(ТабельСписок.День19, 0) КАК День19,
    ЕСТЬNULL(ТабельСписок.День20, 0) КАК День20,
    ЕСТЬNULL(ТабельСписок.День21, 0) КАК День21,
    ЕСТЬNULL(ТабельСписок.День22, 0) КАК День22,
    ЕСТЬNULL(ТабельСписок.День23, 0) КАК День23,
    ЕСТЬNULL(ТабельСписок.День24, 0) КАК День24,
    ЕСТЬNULL(ТабельСписок.День25, 0) КАК День25,
    ЕСТЬNULL(ТабельСписок.День26, 0) КАК День26,
    ЕСТЬNULL(ТабельСписок.День27, 0) КАК День27,
    ЕСТЬNULL(ТабельСписок.День28, 0) КАК День28,
    ЕСТЬNULL(ТабельСписок.День29, 0) КАК День29,
    ЕСТЬNULL(ТабельСписок.День30, 0) КАК День30,
    ЕСТЬNULL(ТабельСписок.День31, 0) КАК День31
    ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.Табель.Список КАК ТабельСписок
    ПО Сотрудники.Ссылка = ТабельСписок.ФИО.Ссылка
    ГДЕ
    Сотрудники.ДатаУвольнения <> НЕОПРЕДЕЛЕНО
    И ТабельСписок.ДатаДок = &ДатаДок

    УПОРЯДОЧИТЬ ПО
    Код
```
---
Смена таблиц в запросе результат не изменила
Перенесите

```1c
    И ТабельСписок.ДатаДок = &ДатаДок
```

в условия соединения таблиц

Сотрудники.ДатаУвольнения <> НЕОПРЕДЕЛЕНО
ДатаУвольнения никогда не будет НЕОПРЕДЕЛЕНО, она может быть ДАТАВРЕМЯ(1, 1, 1), если интересует пустое значение.

а добавление отбора вообще выдает пустую таблицу
Значит, все имеющиеся сотрудники в справочнике, задействованы в ТЧ документа, т.к. отбор по дате документа превращает левое соединение во внутреннее.
---
как можно вывести всех сотрудников, которые есть в документе
Поменять местами таблицы в запросе, т.е. левым соединением присоединять Справочник.Сотрудники

(1)которые вообще ни в одном табеле не фигурирую
В указанный запрос добавить отбор по:

ТабельСписок.ФИО ЕСТЬ NULL
---
Смена таблиц в запросе результат не изменила, а добавление отбора вообще выдает пустую таблицу
---
Смена таблиц в запросе результат не изменила
Перенесите

```1c
    И ТабельСписок.ДатаДок = &ДатаДок
```

в условия соединения таблиц

Сотрудники.ДатаУвольнения <> НЕОПРЕДЕЛЕНО
ДатаУвольнения никогда не будет НЕОПРЕДЕЛЕНО, она может быть ДАТАВРЕМЯ(1, 1, 1), если интересует пустое значение.

а добавление отбора вообще выдает пустую таблицу
Значит, все имеющиеся сотрудники в справочнике, задействованы в ТЧ документа, т.к. отбор по дате документа превращает левое соединение во внутреннее.
---
Помог перенос в условие соединения, однако таблицы местами менять не стал и все заработало как хотел, спасибо.
---
ДатаУвольнения никогда не будет НЕОПРЕДЕЛЕНО, она может быть ДАТАВРЕМЯ(1, 1, 1), если интересует пустое значение.

Эту ошибку исправил, спасибо.
---
ГДЕ
    Сотрудники.ДатаУвольнения <>...Сотрудник может работать в текущем месяце и быть уволен в текущем месяце. А может быть не принят ещё в текущем месяце. Может быть принят в следующем. Или не принят совсем. Условие должно быть совсем иное и не только на дату увольнения.
И это условие тоже лучше заранее до соединения.
---
Нужно выводить всех в один список, т.е. список сотрудников, а рядом информация по табелированию, но нужно именно всех, на данный момент выходят только те, кто есть в документе табель.
---
попробуйте такое условие
 (зачем все дни выводить? не понятно)
попробуйте убрать дни, вам же сам факнт наличия табеля проверить нужно?

и условие поменяйте

```1c
    ГДЕ

    ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.Табель.Список КАК ТабельСписок
    ПО Сотрудники.Ссылка = ТабельСписок.ФИО.Ссылка
    И ТабельСписок.ДатаДок = &ДатаДок //перенесено в соединение
    ГДЕ
    Сотрудники.ДатаУвольнения = ДатаВремя(1,1,1) //все НЕ уволенные

    УПОРЯДОЧИТЬ ПО
    Код
```
---
(зачем все дни выводить? не понятно)
Дни выводим, чтобы увидеть информацию по дням, т.к. сотрудник может отработать 2 дня, а потом отсутствовать оставшееся время по разным причинам.
---
Так ты вроде хотел которые есть в документе, а не которые "работали два дня".
---
Нет, хотел всех, у меня же в конце написано было: "как можно вывести всех сотрудников, которые есть в документе и которые вообще ни в одном табеле не фигурирую"
---
Ну и причем тут "два дня"? Тут либо есть, либо нет. Сам для себя свою логику исправь для начала.
---
С логикой все нормально.
1) Вы допускаете, что может быть создано несколько табелей и один из сотрудников не будет протабелирован?
2) Сотрудник может работать два дня, а дальше заболеть, уйти в отпуск, отсутствовать одним словом, таких тоже нужно видеть, но нужно видеть, что он работал эти два дня.
3) Я уже написал в (4), повторяться не буду.
---
а ты не допускаешь, что у тебя пункты 1 и 2 противоречат друг другу?
Или ты на голубом глазу утверждаешь, что эти два дня не попадают в табель, и сотрудник остается непротабелированным??

Что-то еще?
---
а ты не допускаешь, что у тебя пункты 1 и 2 противоречат друг другу?
Эти пункты про разных сотрудников, единственное в чем согласен, это в том, что сотрудник либо есть в табеле, либо его нет.
Суть претензии какая? Стартмани за бестолковый диалог, да и вообще за диалог не начисляются.
---
1) Вы допускаете, что может быть создано несколько табелей и один из сотрудников не будет протабелирован?
2) Сотрудник может работать два дня, а дальше заболеть, уйти в отпуск, отсутствовать одним словом, таких тоже нужно видеть, но нужно видеть, что он работал эти два дня. Смотря какая конфигурация. Сталкивался с конфигурациями, где по сотруднику можно ввести несколько табелей. Табеля вводят табельщики. И каждому табельщику фиолетово где ещё сотрудник в этом месяце табелировался. Он отвечает только за свою работу. Далее табеля складываются и сумма табелей это фактический табель. Плановое время считается отдельно.

Ну, и самый распространенный пример, который приводят. Сотрудник отработал с утра, а вечером после работы попал в больницу. БЛ выписали с даты попадания в мед учреждение. Вопрос - будет ли ему оплачен этот день и должен ли быть оплачен?
Поэтому с табелями можно допускать всё что угодно.

По сути запроса. Прежде чем соединять табель правильнее ограничить соединяемую таблицу:
```1c
    "ТабельСписок.ДатаДок = &ДатаДок"
```
 В вашем случае сначала соединяются две большие таблицы, а потом по условию соединения отрубаются не нужные записи. Можно же соединять вторую таблицу в гораздо меньшем объеме. SQL конечно умный и по факту скорее всего так и сделает, но не факт.
---
И прочитайте внимательно вопрос, на который был дан ответ про "два дня"
---
Вы прочитали вопрос, на который был дан ответ про "два дня", для чего они выводятся?