Добрый день! Есть простой запрос с двумя группировками по сотруднику и дате, который выводит следующую таблицу:
Сотрудник1| 01.10.2013|28
Сотрудник1| 01.10.2014|28
Сотрудник1| 01.10.2015|28
Сотрудник1| 01.10.2016|14
Сотрудник2| 01.11.2014|28
Сотрудник2| 01.11.2015|28
Сотрудник2| 01.11.2016|4

Как мне переделать запрос так, чтобы получить следующую таблицу?:
Сотрудник1| 01.10.2016|14
Сотрудник2| 01.11.2016|4

Т.е. необходимо получить по каждому сотруднику последнюю строку. Либо как можно сделать сортировку в запросе по ДатаНачалаПериода. В восьмерке знаю как это сделать, а в семерке нет... помогите!

```1c
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ТекущийЭлемент = Справочник.ОтпускаСотрудников.ТекущийЭлемент;
    |Сотрудник = Справочник.ОтпускаСотрудников.Владелец;
    |ДатаНачалаПериода = Справочник.ОтпускаСотрудников.ДатаНачалаПериода;
    |Дней = Справочник.ОтпускаСотрудников.Дней;
    |Функция ДнейСумма = Сумма(Дней);
    |Группировка Сотрудник;
    |Группировка ДатаНачалаПериода;
    |Условие(ПустоеЗначение(ДатаНачалаПериода)=0);
    |"//}}ЗАПРОС
    ;

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    ТабЗнач.НоваяКолонка("Сотрудник");
    ТабЗнач.НоваяКолонка("ДатаНачалаПериода");
    ТабЗнач.НоваяКолонка("ДнейОтпуска");

    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Сотрудник = Запрос.Сотрудник;
    ТабЗнач.ДатаНачалаПериода = Запрос.ДатаНачалаПериода;
    ТабЗнач.ДнейОтпуска = Запрос.ДнейСумма;
    Прервать;
    КонецЦикла;
    КонецЦикла;

    ТабЗнач.ВыбратьСтроки();
    Для Каждого ТабЗнач.Сотрудник
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    Таб.ВывестиСекцию("ДатаНачалаОтпуска");
    КонецЦикла;

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", ");
    КонецПроцедуры
```
---
Добавьте палочек и изоленты:

```1c
    Пока Запрос.Группировка(1) = 1 Цикл
    Первый = 1;
    Пока Запрос.Группировка(2,-1) = 1 Цикл
    Если Первый = 1 Тогда
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Сотрудник = Запрос.Сотрудник;
    ТабЗнач.ДатаНачалаПериода = Запрос.ДатаНачалаПериода;
    ТабЗнач.ДнейОтпуска = Запрос.ДнейСумма;
    Таб.ВывестиСекцию("ДатаНачалаОтпуска");
    Первый = 0;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
```
---
Добавьте палочек и изоленты:

```1c
    Пока Запрос.Группировка(1) = 1 Цикл
    Первый = 1;
    Пока Запрос.Группировка(2,-1) = 1 Цикл
    Если Первый = 1 Тогда
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Сотрудник = Запрос.Сотрудник;
    ТабЗнач.ДатаНачалаПериода = Запрос.ДатаНачалаПериода;
    ТабЗнач.ДнейОтпуска = Запрос.ДнейСумма;
    Таб.ВывестиСекцию("ДатаНачалаОтпуска");
    Первый = 0;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
```
---
Умно!!!
---
Не могу проверить, сработает ли

```1c
    Группировка ДатаНачалаПериода Упорядочить По ДатаНачалаПериода;
```

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

```1c
    Пока Запрос.Группировка(2,-1)=1 Цикл
```

Второй вариант - добавить функцию

```1c
    Функция МаксДата = Максимум(ДатаНачалаПериода);
```

и для вложенной группировки сравнивать ДатаНачалаПериода с МаксДата родительской группировки.
---
Пока Запрос.Группировка(2,-1)=1 Цикл
Спасибо! Сортировка в обратном порядке получилась!
Сотрудник1| 01.10.2016|14
Сотрудник1| 01.10.2015|28
Сотрудник1| 01.10.2014|28
Сотрудник1| 01.10.2013|28
Сотрудник2| 01.11.2016|4
Сотрудник2| 01.11.2015|28
Сотрудник2| 01.11.2014|28

Только из-за "Прервать" в запросе группировки(2) виснет весь запрос...((
---
Только из-за "Прервать" в запросе группировки(2) виснет весь запрос...((
Измени на

```1c
    Если Запрос.Группировка(2, -1) = 1 Тогда
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Сотрудник = Запрос.Сотрудник;
    ТабЗнач.ДатаНачалаПериода = Запрос.ДатаНачалаПериода;
    ТабЗнач.ДнейОтпуска = Запрос.ДнейСумма;
    КонецЕсли;
```
---
У меня сейчас вот такой запрос:

```1c
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2,-1) = 1 Цикл
    ТабЗнач.НоваяСтрока();
    ТабЗнач.Сотрудник = Запрос.Сотрудник;
    ТабЗнач.ДатаНачалаПериода = Запрос.ДатаНачалаПериода;
    ТабЗнач.ДнейОтпуска = Запрос.ДнейСумма;
    Таб.ВывестиСекцию("ДатаНачалаОтпуска");
    // Прервать;
    КонецЦикла;
    КонецЦикла;
```

Он работает, если за комментировать "Прервать", но выводит все строки по каждому сотруднику сортируя их правильно от большей даты к меньшей. Только мне надо, чтобы выводилась одна строка, поэтому использую "Прервать", да только запрос сразу виснет...
---
Группировка ДатаНачалаПериода Упорядочить По ДатаНачалаПериода;
Не работает это... я изначально так сам хотел сделать.
---
Если Запрос.Группировка(2, -1) = 1 Тогда
Разве не подходит? забыл уже 7.7 но вроде должно работать