Подумал сам, поискал в интернете, не разобрался.

У меня есть некий документ, у него есть реквизиты, и есть табличная часть, в ней есть реквизиты, скажем, "ДатаТЧ", "Реквизит1", "Реквизит2". И еще есть типовой реквизит у любой табличной части, как мы знаем, "НомерСтроки".

В результате выполнения запроса я хочу получить примерно такую выборку:

"СсылкаНаДокумент", "КакойТоРеквизитДокумента1", "КакойТоРеквизитДокумента2", "ДатаТЧ", "Реквизит1", "Реквизит2".

Тоесть соеденить с каждым документом некую строку его табличной части. Вся сложность в том, что для каждого документа мне нужна строго одна строка, которая имеет среди строк ТЧ этого документа максимальную дату, а при наличии нескольких строк с одинаковой датой, максимальный "НомерСтроки". И мне нужно получить не просто само значение этой максимальной даты (это я понимаю как через группировку сделать), а и остальные данные из такой строки тоже.

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втПогнали.Ссылка КАК Ссылка,
    МАКСИМУМ(втПогнали.Дата) КАК Дата
    ПОМЕСТИТЬ втМаксДаты
    ИЗ
    втПогнали КАК втПогнали

    СГРУППИРОВАТЬ ПО
    втПогнали.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втПогнали.Ссылка КАК Ссылка,
    втПогнали.НомСтр КАК НомСтр,
    втПогнали.Дата КАК Дата
    ПОМЕСТИТЬ втДляВычисленияНужной
    ИЗ
    втПогнали КАК втПогнали
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
    ПО втПогнали.Ссылка = втМаксДаты.Ссылка
    И втПогнали.Дата = втМаксДаты.Дата
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втДляВычисленияНужной.Ссылка КАК Ссылка,
    МАКСИМУМ(втДляВычисленияНужной.НомСтр) КАК НомСтр,
    втДляВычисленияНужной.Дата КАК Дата
    ПОМЕСТИТЬ втНужнаяСтрока
    ИЗ
    втДляВычисленияНужной КАК втДляВычисленияНужной

    СГРУППИРОВАТЬ ПО
    втДляВычисленияНужной.Ссылка,
    втДляВычисленияНужной.Дата
    ;

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

    СГРУППИРОВАТЬ ПО
    НекийДокументТабличнаяЧасть.Ссылка) КАК ВложенныйЗапрос_ОпределяемМаксимальнуюДату
    ПО НекийДокументТабличнаяЧасть.Ссылка = ВложенныйЗапрос_ОпределяемМаксимальнуюДату.Ссылка
    И НекийДокументТабличнаяЧасть.ДатаТЧ = ВложенныйЗапрос_ОпределяемМаксимальнуюДату.ДатаТЧ
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    НекийДокументТабличнаяЧасть.Ссылка КАК Ссылка,
    МАКСИМУМ(НекийДокументТабличнаяЧасть.НомерСтроки) КАК НомерСтроки
    ИЗ
    Документ.НекийДокумент.ТабличнаяЧасть КАК НекийДокументТабличнаяЧасть

    СГРУППИРОВАТЬ ПО
    НекийДокументТабличнаяЧасть.Ссылка) КАК ВложенныйЗапрос_ОпределяемМаксимальнуюСтроку
    ПО НекийДокументТабличнаяЧасть.Ссылка = ВложенныйЗапрос_ОпределяемМаксимальнуюСтроку.Ссылка
    И НекийДокументТабличнаяЧасть.НомерСтроки = ВложенныйЗапрос_ОпределяемМаксимальнуюСтроку.НомерСтроки
    ГДЕ
    НЕ ВложенныйЗапрос_ОпределяемМаксимальнуюСтроку.НомерСтроки ЕСТЬ NULL
```
---
Не правильно написал...
Переделал.
Сделал Вложенный запрос во вложенном запросе, сначала выбираем максимальную дату, затем к максимальной дате выбираем максимальную строку

```1c
    ВЫБРАТЬ
    НекийДокументТабличнаячасть.Ссылка КАК Ссылка,
    НекийДокументТабличнаячасть.Реквизит1,
    НекийДокументТабличнаячасть.Реквизит2,
    НекийДокументТабличнаячасть.Ссылка.КакойТоРеквизитДокумента1,
    НекийДокументТабличнаячасть.Ссылка.КакойТоРеквизитДокумента2,
    ВложенныйЗапрос.ДатаТЧ,
    ВложенныйЗапрос.НомерСтроки
    ИЗ
    Документ.НекийДокумент.ТабличнаяЧасть КАК НекийДокументТабличнаячасть
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    НекийДокументТабличнаячасть.Ссылка КАК Ссылка,
    МАКСИМУМ(НекийДокументТабличнаячасть.ДатаТЧ) КАК ДатаТЧ,
    ВложенныйЗапрос.НомерСтроки КАК НомерСтроки
    ИЗ
    Документ.НекийДокумент.ТабличнаяЧасть КАК НекийДокументТабличнаячасть
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    НекийДокументТабличнаячасть.Ссылка КАК Ссылка,
    МАКСИМУМ(НекийДокументТабличнаячасть.НомерСтроки) КАК НомерСтроки,
    НекийДокументТабличнаячасть.ДатаТЧ КАК ДатаТЧ
    ИЗ
    Документ.НекийДокумент.ТабличнаяЧасть КАК НекийДокументТабличнаячасть

    СГРУППИРОВАТЬ ПО
    НекийДокументТабличнаячасть.Ссылка,
    НекийДокументТабличнаячасть.ДатаТЧ) КАК ВложенныйЗапрос
    ПО НекийДокументТабличнаячасть.Ссылка = ВложенныйЗапрос.Ссылка
    И НекийДокументТабличнаячасть.ДатаТЧ= ВложенныйЗапрос.ДатаТЧ

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втПогнали.Ссылка КАК Ссылка,
    МАКСИМУМ(втПогнали.Дата) КАК Дата
    ПОМЕСТИТЬ втМаксДаты
    ИЗ
    втПогнали КАК втПогнали

    СГРУППИРОВАТЬ ПО
    втПогнали.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втПогнали.Ссылка КАК Ссылка,
    втПогнали.НомСтр КАК НомСтр,
    втПогнали.Дата КАК Дата
    ПОМЕСТИТЬ втДляВычисленияНужной
    ИЗ
    втПогнали КАК втПогнали
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втМаксДаты КАК втМаксДаты
    ПО втПогнали.Ссылка = втМаксДаты.Ссылка
    И втПогнали.Дата = втМаксДаты.Дата
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втДляВычисленияНужной.Ссылка КАК Ссылка,
    МАКСИМУМ(втДляВычисленияНужной.НомСтр) КАК НомСтр,
    втДляВычисленияНужной.Дата КАК Дата
    ПОМЕСТИТЬ втНужнаяСтрока
    ИЗ
    втДляВычисленияНужной КАК втДляВычисленияНужной

    СГРУППИРОВАТЬ ПО
    втДляВычисленияНужной.Ссылка,
    втДляВычисленияНужной.Дата
    ;

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