Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Индексированная таблица Вначало([Индекс]) (число прочтений - 1157 )
DartVader
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 13. Марта 2015
Индексированная таблица Вначало([Индекс])
14. Апреля 2017 :: 13:55
Печать  
Приветствую! Не дайте умереть молодым..
Сделал код на индексированной таблице, он упорно не работает. Алгоритм таков: Берем 1 строку по ней все ищем , все что нашли удаляем, ищем вторую строку и т.д. Первая отрабатывается, вторая уже нет, хотя строки в таблице остались.

тбГруппы.Группировать("Осн:Родитель*,Ребенок*","");
     тбГруппы.ДобавитьИндекс("Родитель","Родитель*");
     тбГруппы.ДобавитьИндекс("Ребенок","Ребенок*");
                                                      
     тбГруппы.Сортировать("Родитель, Ребенок");
            
     тбДерево.УдалитьСтроки();
     
     ИнитТбВетки();
        
     ключь = СоздатьОбъект("СписокЗначений");
     Пока 1=1 Цикл               
           Попытка               
                 тбГруппы.ВНачало("Осн"); 
                 тбГруппы.СледующаяСтрока("Осн");
                 ключь.УдалитьВсе();
                 ключь.ДобавитьЗначение(тбГруппы.Родитель);
                 ключь.ДобавитьЗначение(тбГруппы.Ребенок);
           Исключение
                 Прервать;
           КонецПопытки;
           
           тбДерево.НоваяСтрока();
           
           стволВетки = тбГруппы.Ребенок;
           
           тбГруппы.УстановитьФильтр(ключь, ключь, "Осн");
           
           тбГруппы.УдалитьСтроки("Осн");
           ЗаполнДетьми(тбДерево, стволВетки, тбГруппы);
           тбДерево.Пиктограммы = 0;
           тбДерево.НазваниеВетки = СокрЛП(стволВетки);
           тбДерево.Идентификатор = стволВетки;
     КонецЦикла;


Первый раз отрабатывает , второй раз никуда не переходит хотя строк 358
тбГруппы.ВНачало("Осн"); 
тбГруппы.СледующаяСтрока("Осн");
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Индексированная таблица Вначало([Индекс])
Ответ #1 - 14. Апреля 2017 :: 14:07
Печать  
Установлен фильтр тбГруппы.УстановитьФильтр(ключь, ключь, "Осн");
Надо его сбрасывать командой ВыключитьФильтр

Зачем так сложно? Можно же группировать с РасшифровкаПоследнегоУровня =1 и обходить подветки через тзПотомки.
  
Наверх
www  
IP записан
 
DartVader
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 13. Марта 2015
Re: Индексированная таблица Вначало([Индекс])
Ответ #2 - 14. Апреля 2017 :: 14:35
Печать  
Написал рекурсию для тренировки


//*******************************************
Процедура ЗаполнДетьми(ТбВетка, родитель, тбИсходная)
     тбВеткаЛокал = ЗначениеИзСтрокиВнутр(стрВетка);
     тбДетейВрем = СоздатьОбъект("ТаблицаЗначений");
     тбИсходная.УстановитьФильтр(родитель, родитель, "Родитель");
     тбИсходная.Выгрузить(тбДетейВрем,"Родитель");
                                    
     тбДетейВрем.ВыбратьСтроки();
     Пока тбДетейВрем.ПолучитьСтроку()>0 Цикл
           тбВеткаЛокал.НоваяСтрока();   
         тбВеткаЛокал.Пиктограммы      = 0;
           тбВеткаЛокал.НазваниеВетки      = СокрЛП(тбДетейВрем.Ребенок);
           тбВеткаЛокал.Идентификатор      = тбДетейВрем.Ребенок;
     КонецЦикла;
     тбИсходная.УдалитьСтроки("Родитель");
     ТбВетка.Ветка = тбВеткаЛокал;
     Если тбВеткаЛокал.КоличествоСтрок() > 0 Тогда
         тбВеткаЛокал.ВыбратьСтроки();
           Пока тбВеткаЛокал.ПолучитьСтроку()>0 Цикл                           
                 ЗаполнДетьми(тбВеткаЛокал, тбВеткаЛокал.Идентификатор, тбИсходная);   
           КонецЦикла;
           
     КонецЕсли;
     
КонецПроцедуры
  
Наверх
 
IP записан
 
DartVader
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 13. Марта 2015
Re: Индексированная таблица Вначало([Индекс])
Ответ #3 - 14. Апреля 2017 :: 14:40
Печать  
Все получилось спасибо! Нужно было ВыключитьФильтр("Осн")
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать