Добрый вечер, форумчане. Прошу помощи.
Хочу выбрать лидеров продаж внутри групп.
Т.е. есть несколько групп: "Велосипеды", "Самокаты", "Ролики".
Нужно выбрать по ДВА самых продаваемых велосипеда, самоката и роликов.
Понятно, что эту задачу можно легко решить через ТЗ, а вот средствами запроса есть изящный вариант?
Текст запроса:

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

Запрос:

```1c
    ВЫБРАТЬ
    "Товар 1" КАК Номенклатура,
    "Группа 1" КАК Группа,
    4 КАК Колво,
    2000 КАК Сумма
    ПОМЕСТИТЬ ВТ_Номенклатура

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 2",
    "Группа 1",
    1,
    200

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 3",
    "Группа 1",
    2,
    800

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 4",
    "Группа 2",
    7,
    7000

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 5",
    "Группа 2",
    3,
    1500

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 6",
    "Группа 2",
    2,
    3000

    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура,
    ВТ_Номенклатура.Группа,
    ВТ_Номенклатура.Колво,
    ВТ_Номенклатура.Сумма,
    КОЛИЧЕСТВО(ВТ_Номенклатура1.Сумма) КАК Ранг
    ПОМЕСТИТЬ ВТ_НоменклатураРанг
    ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура1
    ПО ВТ_Номенклатура.Группа = ВТ_Номенклатура1.Группа
    И ВТ_Номенклатура.Сумма <= ВТ_Номенклатура1.Сумма

    СГРУППИРОВАТЬ ПО
    ВТ_Номенклатура.Номенклатура,
    ВТ_Номенклатура.Группа,
    ВТ_Номенклатура.Колво,
    ВТ_Номенклатура.Сумма
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_НоменклатураРанг.Номенклатура,
    ВТ_НоменклатураРанг.Группа,
    ВТ_НоменклатураРанг.Колво,
    ВТ_НоменклатураРанг.Сумма
    ИЗ
    ВТ_НоменклатураРанг КАК ВТ_НоменклатураРанг
    ГДЕ
    ВТ_НоменклатураРанг.Ранг <= 2
```

Результат:
Номенклатура Группа Колво Сумма
Товар 1 Группа 1 4 2 000
Товар 3 Группа 1 2 800
Товар 4 Группа 2 7 7 000
Товар 6 Группа 2 2 3 000
---
Можно получить те группы которые нужно сделать и в цикле через объединить все собрать текст запроса
---
исходные данные:

Запрос:

```1c
    ВЫБРАТЬ
    "Товар 1" КАК Номенклатура,
    "Группа 1" КАК Группа,
    4 КАК Колво,
    2000 КАК Сумма
    ПОМЕСТИТЬ ВТ_Номенклатура

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 2",
    "Группа 1",
    1,
    200

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 3",
    "Группа 1",
    2,
    800

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 4",
    "Группа 2",
    7,
    7000

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 5",
    "Группа 2",
    3,
    1500

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    "Товар 6",
    "Группа 2",
    2,
    3000

    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Номенклатура.Номенклатура,
    ВТ_Номенклатура.Группа,
    ВТ_Номенклатура.Колво,
    ВТ_Номенклатура.Сумма,
    КОЛИЧЕСТВО(ВТ_Номенклатура1.Сумма) КАК Ранг
    ПОМЕСТИТЬ ВТ_НоменклатураРанг
    ИЗ
    ВТ_Номенклатура КАК ВТ_Номенклатура
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура1
    ПО ВТ_Номенклатура.Группа = ВТ_Номенклатура1.Группа
    И ВТ_Номенклатура.Сумма <= ВТ_Номенклатура1.Сумма

    СГРУППИРОВАТЬ ПО
    ВТ_Номенклатура.Номенклатура,
    ВТ_Номенклатура.Группа,
    ВТ_Номенклатура.Колво,
    ВТ_Номенклатура.Сумма
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_НоменклатураРанг.Номенклатура,
    ВТ_НоменклатураРанг.Группа,
    ВТ_НоменклатураРанг.Колво,
    ВТ_НоменклатураРанг.Сумма
    ИЗ
    ВТ_НоменклатураРанг КАК ВТ_НоменклатураРанг
    ГДЕ
    ВТ_НоменклатураРанг.Ранг <= 2
```

Результат:
Номенклатура Группа Колво Сумма
Товар 1 Группа 1 4 2 000
Товар 3 Группа 1 2 800
Товар 4 Группа 2 7 7 000
Товар 6 Группа 2 2 3 000
---
Красиво, нужно попробовать, надеюсь от 10к-таблицы сервер не склеится от внутреннего соединения.