Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 03:12

Рекурсивный перебор дерева значений и вывод в макет

Автор demon3, 07 фев 2014, 22:07

0 Пользователей и 1 гость просматривают эту тему.

demon3

написал вот такой код. но почему то при нажатии кнопки печать,выводится столько табл документов,сколько элементов в дереве значений. и в последних двух табличн документах только строки номенклатуры. поправьте пожалуйста.

Процедура ОсновныеДействияФормыПечать(Кнопка)

Дерево(деревоспецификаций);


КонецПроцедуры


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

GRADUS

Цитата: demon3 от 07 фев 2014, 22:07
написал вот такой код. но почему то при нажатии кнопки печать,выводится столько табл документов,сколько элементов в дереве значений. и в последних двух табличн документах только строки номенклатуры. поправьте пожалуйста.

Процедура ОсновныеДействияФормыПечать(Кнопка)

Дерево(деревоспецификаций);


КонецПроцедуры


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


Вроде рекурсии нет, по-моему только первый уровень дерева у тебя выводится.
Не уверен, что вот это: "Дерево(СтрДерева,Уровень+1);" Вообще что то должно сделать с твоим деревом.

demon3

Цитата: GRADUS от 09 фев 2014, 18:25
Цитата: demon3 от 07 фев 2014, 22:07
написал вот такой код. но почему то при нажатии кнопки печать,выводится столько табл документов,сколько элементов в дереве значений. и в последних двух табличн документах только строки номенклатуры. поправьте пожалуйста.

Процедура ОсновныеДействияФормыПечать(Кнопка)

Дерево(деревоспецификаций);


КонецПроцедуры


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


Вроде рекурсии нет, по-моему только первый уровень дерева у тебя выводится.
Не уверен, что вот это: "Дерево(СтрДерева,Уровень+1);" Вообще что то должно сделать с твоим деревом.

у меня выводится все как надо. но только открываются много табличных документов для печати, я так понимаю строка :ТабДокумент.Показать() не там стоит где надо
Помог ответом, скажи спасибо

GRADUS

Цитата: demon3 от 09 фев 2014, 19:45
Цитата: GRADUS от 09 фев 2014, 18:25
Цитата: demon3 от 07 фев 2014, 22:07
написал вот такой код. но почему то при нажатии кнопки печать,выводится столько табл документов,сколько элементов в дереве значений. и в последних двух табличн документах только строки номенклатуры. поправьте пожалуйста.

Процедура ОсновныеДействияФормыПечать(Кнопка)

Дерево(деревоспецификаций);


КонецПроцедуры


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


Вроде рекурсии нет, по-моему только первый уровень дерева у тебя выводится.
Не уверен, что вот это: "Дерево(СтрДерева,Уровень+1);" Вообще что то должно сделать с твоим деревом.

у меня выводится все как надо. но только открываются много табличных документов для печати, я так понимаю строка :ТабДокумент.Показать() не там стоит где надо

Аааа, вот что за Дерево() xDDDD
У тебя не может все как надо выводиться, так как ты создаешь таб доки столько раз, сколько уровней у дерева.
+ Вывод каждого уровня у тебя отдельно идет.

Отделяй рекурсия от создания и от вывода.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск