хочется в запросе выбрать по одному (самому старшему по дате) договору для каждого контрагента, совсем не соображу как это сделать

типа, из этого запроса сделать вложенный и выбрать первые 1 - это не то

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

    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Контрагент,
    ДоговорыКонтрагентов.Ссылка,
    ДоговорыКонтрагентов.Дата,
    ДоговорыКонтрагентов.Номер,
    ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки,
    ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты

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

что-то типа

```1c
    ВЫБРАТЬ
    ДоговорыКонтрагентов.Контрагент КАК Контрагент,

    макс(ДоговорыКонтрагентов.Дата) КАК Дата
    Поместить ТаблицаМаксДатыДоговоров
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов

    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Контрагент
```
---
да, просто это у меня не работает почему-то

второй запрос не выполняется

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

ошибка: Поле не входит в группу "исх.контрагент"
выбрать <<?>>исх.контрагент, максимум(дата)
---
выбрать исх.контрагент, максимум(дата)
поместить груп
из исх как исх - не хватает СГРУППИРОВАТЬ ПО
---
семён семёныч!
---
А как соединятся договоры которых два и у обеих даты не указаны?
---
Обычная проблема таких задачек - а у договоров даты то не заполнены! :)

Могу накидать вам запрос которые выберет по одному договору первому по ссылке

```1c
    ВЫБРАТЬ
    МИНИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата,
    ДоговорыКонтрагентов.Контрагент КАК Контрагент,
    МИНИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Ссылка
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    ГДЕ
    ДоговорыКонтрагентов.Организация = &Организация

    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Контрагент
```

Так как строить ВТ по датам и по ним потом соединяться с договорами можно ТОЛЬКО если:
1 -100% дат в договорах заполнены
2 - ни у каких двух договоров одного контрагента с одной организацией нет одинаковых дат

Попытка построить запрос при несоблюдении этих двух условий приведет к мультипликации записей при левом соединении по неуникальным датам к таблице договоров.

Вот вам тупой запрос который скорее выбирает младшие по ссылкам ибо технически можно предположить что чем младше ссылка тем старше договор. Ну и для отвода глаз там еще и младшая дата :) хотя в выборке те что выбираются и имеют дату соответствуют выбранной дате.
---
да причем тут даты, все там заполнено
---
Если даты заполнены тогдась

```1c
    ВЫБРАТЬ
    МИНИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата,
    ДоговорыКонтрагентов.Контрагент КАК Контрагент,
    ДоговорыКонтрагентов.Организация КАК Организация
    ПОМЕСТИТЬ МинДаты
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    ГДЕ
    ДоговорыКонтрагентов.Организация = &Организация

    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Контрагент,
    ДоговорыКонтрагентов.Организация
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МинДаты.Контрагент КАК Контрагент,
    МинДаты.Организация КАК Организация,
    Контрагенты.Ссылка КАК Ссылка
    ИЗ
    МинДаты КАК МинДаты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК Контрагенты
    ПО (МинДаты.Дата = Контрагенты.Дата)
    И (МинДаты.Организация = Контрагенты.Организация)
    И (МинДаты.Контрагент = Контрагенты.Контрагент)
```

Но сразу надо проверить число записей в ВТ и в финальной выборке.
Если в ВТ число записей меньше чем в финальной - у вас бардачекс с датами...
---
видимо нужно поместить
---
Для какой конфигурации?
---
//----------------
// Задача:
//Выбрать последние по дате договора, удовлетворяющие некоторым условиям
// Решение:
//1. Во временную таблицу выберем все договора подходящие под условия.
//2. Во вторую временную таблицу выберем для каждого договора максимальную дату
//3. Выберем договор с максимальной датой.

```1c
    ВЫБРАТЬ различные
    ДоговорыКонтрагентов.Контрагент КАК Контрагент,
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ДоговорыКонтрагентов.Дата КАК ДатаДоговора,
    ДоговорыКонтрагентов.Номер КАК НомерДоговора,
    ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК КоличествоДнейОтсрочки,
    ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК ТипДнейОтсрочкиОплаты
    Поместить втДоговора
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    ГДЕ
    ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
    И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
    И ДоговорыКонтрагентов.Статус = &Действует
    И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем

    ;
    ////////////-------------------

    Выбрать
    вт.Контрагент как Контрагент,
    Максимум(вт.ДатаДОговора) как МаксДатаДговора
    Поместить втМаксДаты

    из
    втДоговора ка вт
    сгруппировать по
    вт.Контрагент
    ;
    //-------------------------

    Выбрать

    вт.*

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

```1c
    ВЫБРАТЬ
    ДоговорыКонтрагентов1.Контрагент КАК Контрагент,
    ДоговорыКонтрагентов1.Ссылка КАК Ссылка,
    ДоговорыКонтрагентов1.Дата КАК Дата,
    ДоговорыКонтрагентов1.Номер КАК Номер
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    (
    ВЫБРАТЬ ПЕРВЫЕ 10 // Убрать после тестирования
    ДоговорыКонтрагентов.Контрагент КАК Контрагент,
    МАКСИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата
    ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    ГДЕ
    ДоговорыКонтрагентов.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
    СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.Контрагент

    ) КАК Макс
    ПО Макс.Контрагент = ДоговорыКонтрагентов1.Контрагент
    И Макс.Дата = ДоговорыКонтрагентов1.Дата
```