Вот такая рекурсивная функция
Процедура ВывестиСтроку2(тб,ТекущийУровень,ВсегоУровней, тбТовары)
Перем СуммыПериодов[2], стр;
Если ТекущийУровень > 1 Тогда
Возврат;
Конецесли;
//тб.ВыбратьСтроки();
Для НомерПериода = 1 по Периоды.РазмерСписка() Цикл
СуммыПериодов[НомерПериода] = 0;
Период = Периоды.ПолучитьЗначение(НомерПериода,стр);
Отбор = СоздатьОбъект("СписокЗначений");
Отбор.ДобавитьЗначение(тбТовары.Товар, "Товар");
Отбор.ДобавитьЗначение(Период, "Период");
тбСклады.ВыбратьСтроки();
Пока тбСклады.ПолучитьСтроку() = 1 Цикл
Отбор.ВставитьЗначение(3,тбСклады.Склад,"Склад");
Если ТекущийУровень = 0 Тогда
НомерНайденнойСтроки = тб.НайтиСтроку("Товар",Отбор,0,1);
Если НомерНайденнойСтроки <> 0 Тогда
СуммыПериодов[НомерПериода] = СуммыПериодов[НомерПериода] + тб.Сумма;
КонецЕсли;
Иначе
Если тб.тзПотомки.КоличествоИндексов() = 0 Тогда
тб.тзПотомки.ДобавитьИндекс("Товар2","Товар,Период,Склад");
КонецЕсли;
НомерНайденнойСтроки = тб.тзПотомки.НайтиСтроку("Товар2",Отбор,0,1);
Если НомерНайденнойСтроки <> 0 Тогда
СуммыПериодов[НомерПериода] = СуммыПериодов[НомерПериода] + тб.тзПотомки.Сумма;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить(Формат(ТекущийУровень,"Ч(0)"+Строка(ТекущийУровень))+ " | " + Строка(тбТовары.Товар) + " | " + Строка(СуммыПериодов[1]) + " | " + Строка(СуммыПериодов[2]));
Если ТипЗначенияСтр(тбТовары.тзПотомки) = "ИндексированнаяТаблица" Тогда
тбТовары.тзПотомки.ВыбратьСтроки();
Пока тбТовары.тзПотомки.ПолучитьСтроку() = 1 Цикл
ВывестиСтроку2(тб, ТекущийУровень+1,ВсегоУровней, тбТовары.тзПотомки)
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Ругается НомерНайденнойСтроки = тб.тзПотомки.НайтиСтроку("Товар2",Отбор,0,1);
- Индекс с именем Товар2 не найден !