Составляю отчёт по мотивациям контрагентов. Соответственно, итоги в запросе у меня выводятся по работнику. Результат запроса перебираю рекурсией. Не понимаю как правильно написать эту рекурсию, у меня получается так, что либо макет выводится правильно, но данные получаются только из выборки детальных записей, либо выводятся данные, но структура макета полностью не такая какая нужна.

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

    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Работник");

    ТабДок.НачатьАвтогруппировкуСтрок();

    Пока Выборка.Следующий() цикл
    ЗаполнитьЗначенияСвойств(ОбластьРаботник.Параметры,Выборка);
    ТабДок.Вывести(ОбластьРаботник);
    ТабДок.Вывести(ОбластьОклад);
    ЗаполнитьЗначенияСвойств(ОбластьОплата.Параметры, Выборка);
    ТабДок.Вывести(ОбластьОплата);
    ТабДок.Вывести(ОбластьШапкаК);

    ВыборкаКритерии = Выборка.Выбрать();

    Пока ВыборкаКритерии.Следующий() цикл

    ЗаполнитьЗначенияСвойств(ОбластьКритерии.Параметры, ВыборкаКритерии);

    ТабДок.Вывести(ОбластьКритерии);

    КонецЦикла;
    КонецЦикла;
```
---
Только тут не рекурсия, а иерархия.
Да, данные отражаются только из детальных записей. Ведь на верхнем уровне - только Работник, и не заданы поля вычисления итогов.
---
Как уже сказали, рекурсии у тебя никакой нет. Загугли что такое рекурсия.
И почитай, как работают ИТОГИ.
ИТОГИ просто добавляют итоговые записи, которые ты можешь обходить иерархически (детальные записи остаются на последнем уровне иерархии).
Обход у тебя написан правильно. Как уже сказали, ты просто не добавляешь нужную тебе информацию в итоговые записи. Сейчас у тебя в итоговых записях только "Работник" и больше ничего.
---
куда этот код вставляли? Это часть запроса.
Вместо:

```1c
    |ИТОГИ ПО
    | Работник";
```

Указать:

```1c
    |ИТОГИ
    | СведенияОРаботникахСрезПоследних.Оклад КАК Оклад
    |ПО
    | Работник";
```

Ну и помимо Оклад добавить недостающие поля, если нужно.
---
|ИТОГИ ПО
                       | Работник";
Не указаны поля, которые будут получаться для итогов, соответственно в них будет null.

Нужно указать все поля, которые должны быть в группировке, что-то в этом роде:

```1c
    ИТОГИ
    СведенияОРаботникахСрезПоследних.Оклад КАК Оклад
    ПО
    Работник
```
---
СведенияОРаботникахСрезПоследних.Оклад КАК Оклад

У меня не получается написать по вашему примеру, т.к у меня Оклад получается без функции и 1с ругается на это. Через остановки смотрел, да, и вправду нет значений, но я всё же не понимаю как добиться их получения. Извиняюсь, конечно. за мое непонимание, но опыта не хватает.
---
куда этот код вставляли? Это часть запроса.
Вместо:

```1c
    |ИТОГИ ПО
    | Работник";
```

Указать:

```1c
    |ИТОГИ
    | СведенияОРаботникахСрезПоследних.Оклад КАК Оклад
    |ПО
    | Работник";
```

Ну и помимо Оклад добавить недостающие поля, если нужно.
---
Да, я так и сделал, в итогах он ругается на отсутствие агрегатной функции
---
ясно. Тут такая зависимость: Для Работник теоретически может быть несколько значений Оклад.
Если Оклад всегда один получается для работника, тогда можно использовать агрегатную функцию:
Максимум(СведенияОРаботникахСрезПоследних.Оклад) КАК Оклад
---
можно так:

```1c
    |ИТОГИ
    | МАКСИМУМ(Оклад)
    |ПО
    | Работник";
```
---
Да, оклад появился, спасибо, осталось другое доделать...За толчок огромное спасибо)
---
Ещё вопросик появился: обязательно всегда сначала область макета заполняется и потом выводится или можно сначала вывести, а потом уже заполнить результатами из выборки?
---
заполняете параметры области. Соответственно при выводе области в ТабДок вставляется (копируется) готовая область макета. В самом ТабДок уже нет параметров. Так что сначала заполнять параметры области и потом ее выводить.
---
Всё, большое Вам спасибо, благодаря Вам, большую часть нужного я смог вывести.
---
Только тут не рекурсия, а иерархия.
Да, данные отражаются только из детальных записей. Ведь на верхнем уровне - только Работник, и не заданы поля вычисления итогов.
---
Как уже сказали, рекурсии у тебя никакой нет. Загугли что такое рекурсия.
И почитай, как работают ИТОГИ.
ИТОГИ просто добавляют итоговые записи, которые ты можешь обходить иерархически (детальные записи остаются на последнем уровне иерархии).
Обход у тебя написан правильно. Как уже сказали, ты просто не добавляешь нужную тебе информацию в итоговые записи. Сейчас у тебя в итоговых записях только "Работник" и больше ничего.
---
Так можно, но это уже будет работа на уровне прямого доступа к ячейкам результирующего табличного документа, без всяких плюшек типа секций и параметров. Это чрезвычайно редко используемый прием для крайне специфических случаев. Метод Вывести() возвращает область ячеек результирующего табличного документа, куда вывелась секция макета. И после вывода можно в этой области напрямую менять свойства ячеек. Никаких секций и параметров в этот момент уже не существует. Только "голые" ячейки.
---
Я понял, спасибо.