Вход | Регистрация

1С:Предприятие ::

Метки: 

ДеревоЗначений с выводом в макет

Я
   Popkorm
 
20.08.18 - 14:46
Приветствую вас.
Вроде как обычно в рекурсии делаю,но не работает,где я ошибься.

Функция ВывестиДеревеЗначений(мСтрокиДерева,Макет,ТабДок,Уровень) 
    
    ОбластьСтроки = Макет.ПолучитьОбласть("Строка1");
    Для Каждого СтрокаНоменклатуры Из мСтрокиДерева.Строки Цикл 
            
            ОбластьСтроки.Параметры.Номенклатура       = СтрокаНоменклатуры.Номенклатура;
            ОбластьСтроки.Параметры.КоличествоУпаковок = СтрокаНоменклатуры.КоличествоУпаковок;
        
        ТабДок.Вывести(ОбластьСтроки, Уровень);
        ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок , СтрокаНоменклатуры.Уровень()+1);
        
    КонецЦикла;
 
 
   Popkorm
 
1 - 20.08.18 - 14:49
Вот на форме результат

https://clip2net.com/s/3WahDrQ

в отчете группируется только одна

https://clip2net.com/s/3WahSGy
   Deon
 
2 - 20.08.18 - 15:21
(1) А зачем ты Уровень параметром передаешь? Используй его только в Вывести.
Хотя, суть, по идее, меняться не должна. А ещё перед параметром Уровень я бы "Знач" пихнул, а то хз переопределяется оно при рекурсии или нет
   Fedor-1971
 
3 - 20.08.18 - 15:24
(0) После вывода шапки
ТабДок.НачатьАвтогруппировкуСтрок()
  ..... твой вывод рекурсией
ТабДок.ЗавершитьАвтогруппировкуСтрок()

Если не поможет, начинай и завершай группировку для каждой ветки первого уровня
   Fedor-1971
 
4 - 20.08.18 - 15:24
3+ по-моему ещё есть СгруппироватьСтроки
   Popkorm
 
5 - 20.08.18 - 15:27
(3) Это все делаю
        Если СтрокиДеревоВложение.Количество() Тогда
            ТабДок.НачатьАвтогруппировкуСтрок();
            ВывестиДеревеЗначений(СтрокиДерева,Макет,ТабДок,1,ОбластьСтроки2);
            ТабДок.ЗакончитьАвтогруппировкуСтрок();
        КонецЕсли;    


а что имел виду : "Если не поможет, начинай и завершай группировку для каждой ветки первого уровня"
   Fedor-1971
 
6 - 20.08.18 - 15:37
(5)

   Для Каждого СтрокаНоменклатуры Из мСтрокиДерева.Строки Цикл 
            
            ОбластьСтроки.Параметры.Номенклатура       = СтрокаНоменклатуры.Номенклатура;
            ОбластьСтроки.Параметры.КоличествоУпаковок = СтрокаНоменклатуры.КоличествоУпаковок;
        
        ТабДок.Вывести(ОбластьСтроки, Уровень);
 ... начатьАвтогруппировку
        ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок , СтрокаНоменклатуры.Уровень()+1);
.... ЗакончитьАвтогруппировку
        
    КонецЦикла;
 
Идея, что следующие строки то-же должны иметь группировку
   Fedor-1971
 
7 - 20.08.18 - 15:42
можешь поиграться таким функционалом:
ТабДок.Область().Сгруппировать() - по сути указываешь, что сию область нужно сгруппировать
   Popkorm
 
8 - 20.08.18 - 15:44
(6) не сработало,мне кажется с уровнями какая та лажа
   Fedor-1971
 
9 - 20.08.18 - 16:00
(8)  ВывестиДеревеЗначений(СтрокаНоменклатуры,Макет,табДок ,

Вместо СтрокаНоменклатуры.Уровень()+1);  Уровень+1?
   Popkorm
 
10 - 20.08.18 - 16:05
(9) да вроде все есть


https://clip2net.com/s/3WaqLHq
 
 Рекламное место пустует
   Popkorm
 
11 - 20.08.18 - 16:14
он вообще не группирует,просто взял в одном цикле прошелся

https://clip2net.com/s/3WarS0m
   Fedor-1971
 
12 - 20.08.18 - 16:23
(11) попробуй так:
 ... начатьАвтогруппировку
       ТабДок.Вывести(ОбластьСтроки, Уровень);

т.е. сначала выводим строку основу, потом группируем
и начни уровни с 2 или 3 (шапка, то у тебя уже есть, у неё то же есть уровень
   Popkorm
 
13 - 20.08.18 - 16:39
   dezss
 
14 - 20.08.18 - 16:47
а попробуй использовать НачатьГруппуСтрок, а не НачатьАвтогруппировкуСтрок
   Popkorm
 
15 - 20.08.18 - 16:52
(14) Веселуха,так стал группировать,спасибо,пошел допилю рекурсию
   dezss
 
16 - 20.08.18 - 17:06
(6) По логике НачатьАвтогруппировкуСтрок пишется только один раз?

(11) Читай СП, если уровень всего 1, то что группировать?

(15) У тебя какая глубина получается, смотрел отладчиком?
Просто надо бы внимательно посмотреть что происходит в твоей рекурсии.
К тому же, тебе не надо самому вычислять уровень, он есть в самой строке дерева, метод Уровень(), т.е. у тебя будет так:
      ТабДок.Вывести(ОбластьСтроки, СтрокаНоменклатуры.Уровень());
   Fedor-1971
 
17 - 20.08.18 - 17:16
(16) по уму - да, если правильно расставлены уровни, но бывает, и при правильно выданных уровнях, группировка глючит - тогда помогает её вызов несколько раз
   dezss
 
18 - 20.08.18 - 17:25
(17) ну с табдоками работаю редко, НачатьАвтогруппировкуСтрок как-то даже особо не использовал.

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


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует