Добрый день,
Подскажите есть ли простой способ вывести в табличный документ сформированное дерево значений на форме или сохранить напрямую это дерево в excel с сохранением иерархии без формирования табличного документа?
Например есть стандартная команда формы в командной панели "Вывести список", можно ли к ней обратится программно и получить на выходе табличный документ? а полученный табличный документ можно сохранить в формате xls.
---
Задачу сделал так.

```1c
    Перем ТабДок, Секция;

    Процедура ПечатьДерева (СтрокаДерева,Уровень = 0,Колонки)
    Для Каждого стр Из СтрокаДерева.Строки Цикл
    НомерКолонки = 0;
    отступ = ";
    Для н = 1 По Уровень Цикл
    отступ = отступ + " ";
    КонецЦикла;
    Для Каждого КЛ Из Колонки Цикл
    НомерКолонки = НомерКолонки + 1;
    Секция.Область(1, НомерКолонки).Текст = ?(НомерКолонки = 1, отступ+стр[КЛ.Имя], стр[КЛ.Имя]);
    КонецЦикла;
    ТабДок.Вывести(Секция,Уровень+1);
    ПечатьДерева(стр,Уровень+1,Колонки);
    КонецЦикла;
    КонецПроцедуры

    Процедура СформироватьТабДок()
    ТабДок = Новый ТабличныйДокумент;
    Секция = ТабДок.ПолучитьОбласть("R1");
    ТабДок.НачатьАвтогруппировкуСтрок();
    ПечатьДерева (Дерево,,Дерево.Колонки);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ВременныйКаталог = КаталогВременныхФайлов();
    ИмяФайла = "Журнал выгрузки " + Формат( ТекущаяДата(), "ДФ = 'гггг-ММ-дд_чч-мм-сс'") + ".xls";;
    ИмяВременногоФайла = ВременныйКаталог + ИмяФайла;
    ТабДок.Записать(ИмяВременногоФайла , ТипФайлаТабличногоДокумента.XLS);
    КонецПроцедуры
```
---
Как и обещал, пример реализации на СКД
http://start1c.blogspot.ru/2017/02/blog-post.html
---
http://start1c.blogspot.am/2013/03/blog-post_20.html
---
Чем ТД не устраивает?
"Вывести список" через тот же ТД и выводится.
---
возможно, лишние действия
(3) здесь я рассматриваю вывод данных динамического списка формы, у ТС источником данных является дерево значений
(1) можно и компоновкой вывести, все довольно просто, если заранее правильно подготовить дерево значений. Вечером напишу пример.
---
тем, что это в 1С нет ресурсов, чтобы "Вывести список" программно
---
Необходимо исключить действия пользователя, грубо говоря есть обработка, которая пошагово выполняет действия и заполняет журнал выполнения, который отображается в виде дерева значений на форме.
По завершению всех процедур необходимо данный журнал автоматически отправить на почту с сохранением иерархии.
---
Задачу сделал так.

```1c
    Перем ТабДок, Секция;

    Процедура ПечатьДерева (СтрокаДерева,Уровень = 0,Колонки)
    Для Каждого стр Из СтрокаДерева.Строки Цикл
    НомерКолонки = 0;
    отступ = ";
    Для н = 1 По Уровень Цикл
    отступ = отступ + " ";
    КонецЦикла;
    Для Каждого КЛ Из Колонки Цикл
    НомерКолонки = НомерКолонки + 1;
    Секция.Область(1, НомерКолонки).Текст = ?(НомерКолонки = 1, отступ+стр[КЛ.Имя], стр[КЛ.Имя]);
    КонецЦикла;
    ТабДок.Вывести(Секция,Уровень+1);
    ПечатьДерева(стр,Уровень+1,Колонки);
    КонецЦикла;
    КонецПроцедуры

    Процедура СформироватьТабДок()
    ТабДок = Новый ТабличныйДокумент;
    Секция = ТабДок.ПолучитьОбласть("R1");
    ТабДок.НачатьАвтогруппировкуСтрок();
    ПечатьДерева (Дерево,,Дерево.Колонки);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ВременныйКаталог = КаталогВременныхФайлов();
    ИмяФайла = "Журнал выгрузки " + Формат( ТекущаяДата(), "ДФ = 'гггг-ММ-дд_чч-мм-сс'") + ".xls";;
    ИмяВременногоФайла = ВременныйКаталог + ИмяФайла;
    ТабДок.Записать(ИмяВременногоФайла , ТипФайлаТабличногоДокумента.XLS);
    КонецПроцедуры
```
---
Спасибо за метод, заголовки тоже нужны, добавил

```1c
    ТабДок = Новый ТабличныйДокумент;
    СекцияЗаголовка = ТабДок.ПолучитьОбласть("R1");
    НомерКолонки = 0;
    Для Каждого КЛ Из ДанныеДерева.Колонки Цикл
    НомерКолонки = НомерКолонки + 1;
    СекцияЗаголовка.Область(1, НомерКолонки).Текст = КЛ.Имя;
    КонецЦикла;
    ТабДок.Вывести(СекцияЗаголовка);
    Секция = ТабДок.ПолучитьОбласть("R2");
    ТабДок.НачатьАвтогруппировкуСтрок();
    ПечатьДерева (ДанныеДерева,,ДанныеДерева.Колонки);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ВременныйКаталог = КаталогВременныхФайлов();
    ИмяФайла = "Журнал выгрузки " + Формат( ТекущаяДата(), "ДФ = 'гггг-ММ-дд_чч-мм-сс'") + ".xls";;
    ИмяВременногоФайла = ВременныйКаталог + ИмяФайла;
    ТабДок.Записать(ИмяВременногоФайла , ТипФайлаТабличногоДокумента.XLS);
```
---
Как и обещал, пример реализации на СКД
http://start1c.blogspot.ru/2017/02/blog-post.html
---
Сообщение было скрыто модератором.