Добрый день.
Написал следующий запрос:

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

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

    УПОРЯДОЧИТЬ ПО
    Начало УБЫВ) КАК ДолжностьИПодразделение
    ПО ТЧСотрудники.Сотрудник = ДолжностьИПодразделение.Сотрудник

    УПОРЯДОЧИТЬ ПО
    ДатаВыхода,
    ФИО
```

Но при его выполнении не получаю должность и подразделение сотрудника. Хотя, если прогнать отдельно вложенный запрос

```1c
    ВЫБРАТЬ ПЕРВЫЕ 1
    ДанныеДляПодбораСотрудников.Должность КАК Должность,
    ДанныеДляПодбораСотрудников.Начало КАК Начало,
    ДанныеДляПодбораСотрудников.Подразделение КАК Подразделение,
    ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников

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

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

Если же принципиально, то необходимо добавить ограничение на дату документа, чтобы занимаемая
должность/подразделение из регистра "ДанныеДляПодбораСотрудников" бралась не позже, скорее всего по периоду.
---
Что-то не видно соединения таблиц "ТЧСотрудники" и "ДолжностьИПодразделение".
---
```1c
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
    ДанныеДляПодбораСотрудников.Должность КАК Должность,
    ДанныеДляПодбораСотрудников.Начало КАК Начало,
    ДанныеДляПодбораСотрудников.Подразделение КАК Подразделение,
    ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников

    УПОРЯДОЧИТЬ ПО
    Начало УБЫВ) КАК ДолжностьИПодразделение
```
---
Проверьте что у вас получается вот в этом запросе

```1c
    ВЫБРАТЬ ПЕРВЫЕ 1
    ДанныеДляПодбораСотрудников.Должность КАК Должность,
    ДанныеДляПодбораСотрудников.Начало КАК Начало,
    ДанныеДляПодбораСотрудников.Подразделение КАК Подразделение,
    ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников

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

```1c
    Запрос=новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    | Сотрудники.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Сотрудники КАК Сотрудники";
    ТЗСотрудники=Запрос.Выполнить().Выгрузить();
    МассивСотрудников=ТЗСотрудники.ВыгрузитьКолонку("Ссылка");

    ТЗСотрудники = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, "ДатаПриема,ДатаУвольнения,ТекущийВидЗанятости,ТекущаяДолжность,ТекущееПодразделение", ДатаОтчета);
```
---
Да, нужен запрос именно.
---
Почему у вас в общем запросе нет отбора по сотруднику в подзапросе

```1c
    ВЫБРАТЬ ПЕРВЫЕ 1
    ДанныеДляПодбораСотрудников.Должность КАК Должность,
    ДанныеДляПодбораСотрудников.Начало КАК Начало,
    ДанныеДляПодбораСотрудников.Подразделение КАК Подразделение,
    ДанныеДляПодбораСотрудников.Сотрудник КАК Сотрудник
    ИЗ
    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников

    УПОРЯДОЧИТЬ ПО
    Начало УБЫВ
```

Вы же получаете данные не по нужному сотруднику а по ДРУГОМУ первому попавшемуся и потом естественно не будет срабатывать левое соединение так как это не тот сотрудник который вам нужен...
---
Думал в эту сторону. Можно как-то задать отбор по сотруднику, которого получаю только в запросе?
---
Ну так левое соединение и нужно для отбора.

А у вас из чего отбирать если вы чётко пишете что отобрать первую попавшуюся запись а все остальные отбросить?

Обычно пишется вложенный запрос внутри вложенного запроса где например для каждого физического лица отбирается критерий уникальности, например максимальный идентификатор записи, а уже потом выполняем соединение и остается только одна строка на каждое физлицо... потом уже присоединить эту уникальную строку не проблема.
---
Спасибо за совет. Попробуй сделать как Вы сказали. Пока решил вопрос по-другому. Правда получился запрос в цикле...
---
Если всё равно не запрос, тогда зачем огород городить? Если я правильно понял что вам нужно то сами 1с-ники используют решение (13). Больше шансов на устойчивость при обновлениях...
---
В Вашем случае необходимо определить последнюю занимаемую должность и подразделение сотрудником.
Из выложенного алгоритма ясно, что автор не предусмотрел смену должности/подразделения
сотрудниками позже анализируемого документа "РаботаВВыходныеИПраздничныеДни".
Т.е. если делаем запрос по старому документу, где есть сотрудник,
сменивший должность или подразделение после даты этого документа, то должность/подразделение
будет определяться неверно.
Если это не принципиально(м.б. запрос будет только по последнему сформированному документу),
то вот такой пакет отработает верно:

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

Если же принципиально, то необходимо добавить ограничение на дату документа, чтобы занимаемая
должность/подразделение из регистра "ДанныеДляПодбораСотрудников" бралась не позже, скорее всего по периоду.
---
Огромное спасибо. Это как раз то, что нужно было. Отрабатывает так как нужно.
Всем остальным так же спасибо за помощь
---
Пожалуйста. Рад был помочь.