Имя: Пароль:
1C
1С v8
v8: Зацикливается модуль)
0 IoannVic
 
07.10.13
14:51
Есть рекурсивная функция:

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

когда дохожу до строки

ПодчиненаяСтрока = СтрокаТест.Строки.Добавить();

меня перебрасывает

Процедура СписокПриАктивизацииСтроки(Элемент)
    
    ТекПроект = Элемент.ТекущаяСтрока;
    
    СформироватьСписокЗадач(ТекПроект);
    
    Доп_ОтборыСписковКлиентСервер.ИзменитьЭлементОтбораСписка(УчастникиПроекта, "Проект", Элемент.текущаяСтрока, Истина, ВидСравненияКомпоновкиДанных.Равно);
    
КонецПроцедуры

ВНИМАНИЕ ВОПРОС. Почему????
1 mikecool
 
07.10.13
14:53
потому что активизируется строка, ваш кеп
2 IoannVic
 
07.10.13
14:54
(1) Почему активизируется строка? если я не трогаю список в этой части кода вообще??
3 Нуф-Нуф
 
07.10.13
14:55
исчо как трогаешь
4 IoannVic
 
07.10.13
14:56
(3) Ребят, спасибо, что обратили внимание на мою ветку, но если не затруднит объясните, как, где, и что дальше??
5 Нуф-Нуф
 
07.10.13
14:57
СтрокаТест - это что у тебя?
6 IoannVic
 
07.10.13
14:58
(5) СтрокаТест  - СтрокаДереваЗначений
7 Euguln
 
07.10.13
15:01
Как выглядит первый вызов ВывестиСтрокуИПодчиненные ?
8 Нуф-Нуф
 
07.10.13
15:02
(6) дерево значений случаем не Список называется?
9 IoannVic
 
07.10.13
15:08
(7) Процедура СформироватьСписокЗадач(ТекПроект)    
    
    ГоловнаяТаблица = СформироватьГоловнуюТаблицу(ТекПроект);
    
    Строка = ГоловнаяТаблица.Строки.Получить(0);
        
    СтрокиГоловнойТаблицы = ВывестиСтрокуИПодчиненные(Строка);
    
    Сообщить(СтрокиГоловнойТаблицы);
        
    //ЗначениеВРеквизитФормы(ГоловнаяТаблица, "СписокЗадач");
    
КонецПроцедуры
10 IoannVic
 
07.10.13
15:08
(8) Дерево, да список
11 IoannVic
 
07.10.13
15:22
Людиии, хелп)
12 Euguln
 
07.10.13
15:24
(11) Добавляешь строку в список, на неё переходит фокус. Чем помочь то?
13 IoannVic
 
07.10.13
15:27
(12) Так я же ее не в Список добавляю, а кладу в вообще другую переменную. Что делать в таком случае?
14 Euguln
 
07.10.13
15:28
(13) а в (10) утверждаешь обратное
15 hhhh
 
07.10.13
15:31
(13) ГоловнаяТаблица.Строки.Получить(0) - это ведь в список добавляешь.
16 IoannVic
 
07.10.13
15:46
(15) (14) Все понял, туплю. Рекурсия все соки выпивает)). Спасибо всем большое
17 IoannVic
 
07.10.13
16:25
(15) (14) Ребятаа, я тупанул, это ни хрена не список((
18 IoannVic
 
07.10.13
16:44
Не пойму в чем дела, как может быть связана переменная ГоловнаяТаблица(ДеревоЗначений) и Список(ДинамическийСписок), в котором находиться список проектов, и соотвественно при активизации строки Списка, строится деревоЗначений подчиненых ему задач
19 Нууф-Нууф
 
07.10.13
17:02
Функция ВывестиСтрокуИПодчиненные(Строка)
    
    Если ТипЗнч(Строка.РодительОбъекта) = Тип("ДокументСсылка.Проект") тогда
        СтрокаТест = Строка;
    КонецЕсли;    
    
    Для каждого Подч из Строка.Строки Цикл
       ТекЗадача = Подч.Задача;
       СписокПодзадач = ВыбратьПодзадачи(ТекЗадача);
        Если Не ТипЗнч(Строка.РодительОбъекта) = Тип("ДокументСсылка.Проект") тогда  
            //Сообщить(Строка.РодительОбъекта);

            ХерВамАНеОбработчикАктивизацииСтроки = Истина;
            ПодчиненаяСтрока = СтрокаТест.Строки.Добавить();
            ПодчиненаяСтрока.Дата = Подч.Дата;
            ПодчиненаяСтрока.Дедлайн = Подч.Дедлайн;
            ПодчиненаяСтрока.Задача = Подч.Задача;
            ПодчиненаяСтрока.Исполнитель = Подч.Исполнитель;
            ПодчиненаяСтрока.Наименование = Подч.Наименование;
            ПодчиненаяСтрока.РодительОбъекта = Подч.РодительОбъекта;
            ПодчиненаяСтрока.Родитель = Подч.Родитель;
            ПодчиненаяСтрока.СтатусЗадачи = Подч.СтатусЗадачи;
        КонецЕсли;
       //Сообщить(Подч.Задача);

       Если СписокПодзадач.Строки.Количество()>0 тогда
               ВывестиСтрокуИПодчиненные(СписокПодзадач.Строки.Получить(0));
       КонецЕсли;
   КонецЦикла;
  
   Если ТипЗнч(Строка.РодительОбъекта) = Тип("ДокументСсылка.Проект") тогда  
           Возврат СтрокаТест;
    КонецЕсли;    
  
КонецФункции

Процедура СписокПриАктивизацииСтроки(Элемент)
    
    Если ХерВамАНеОбработчикАктивизацииСтроки Тогда
        ХерВамАНеОбработчикАктивизацииСтроки = Ложь;
        Возврат;
    КонецЕсли;

    ТекПроект = Элемент.ТекущаяСтрока;
    
    СформироватьСписокЗадач(ТекПроект);
    
    Доп_ОтборыСписковКлиентСервер.ИзменитьЭлементОтбораСписка(УчастникиПроекта, "Проект", Элемент.текущаяСтрока, Истина, ВидСравненияКомпоновкиДанных.Равно);
    
КонецПроцедуры
20 IoannVic
 
07.10.13
17:11
(19) Чувак круть, костыль коннечно знатный, сейчас попробую)
21 simol
 
07.10.13
17:29
Запоминай на какой строке вызвал в прошлый раз и сравнивай. Если совпала не вызывай функцию