Имя: Пароль:
1C
1С v8
Итератор для значения не определен
,
0 sidalexsandr
 
21.08.21
19:13
{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(19)}: Итератор для значения не определен
    Для Каждого стрДерева из ДеревоЗн Цикл

Вот текст обработки
&НаКлиенте
Процедура ПодсчитатьУровни(Команда)
    
    КоличествоУровней = 0;
    СтрокиДер = 0;
    
    
    ПодсчитатьУровниНаСервере(СтрокиДер,СтрокиДер );
    
    Сообщить("Максимальное количество уровней = " + КоличествоУровней);
    
    
КонецПроцедуры

&НаСервере
Процедура ПодсчитатьУровниНаСервере(СтрДер, К)
    
    Для Каждого стрДерева из ДеревоЗн Цикл
        
        Если стрДерева.Строки.Количество() <> 0 Тогда
            ПодсчитатьУровниНаСервере(стрДерева.Строки, К);
            К = стрДерева.Уровень();
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры
1 youalex
 
21.08.21
19:14
ДеревоЗн.Строки
2 sidalexsandr
 
21.08.21
19:17
(1) {ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(19)}: Поле объекта не обнаружено (Строки)
    Для Каждого стрДерева из ДеревоЗн.Строки Цикл
3 МихаилМ
 
21.08.21
19:29
4 Andreyyy
 
21.08.21
19:30
(1) РеквизитФормыВЗначение
5 sidalexsandr
 
21.08.21
19:31
(4) Напиши пожалуйста где это написать
6 youalex
 
21.08.21
19:33
тогда ПолучитьЭлементы()
7 sidalexsandr
 
21.08.21
19:41
(6) Для Каждого стрДерева из ДеревоЗн.ПолучитьЭлементы() Цикл

{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(21)}: Поле объекта не обнаружено (Строки)
        Если стрДерева.Строки.Количество() <> 0 Тогда
8 hhhh
 
21.08.21
20:18
(7) вот тут фигня какая-то

СтрокиДер = 0;
    
    
    ПодсчитатьУровниНаСервере(СтрокиДер,СтрокиДер );


получается берете потом СтрДер.Строки от 0. А у числа 0 нет поля Строки
9 серый КТУЛХУ
 
21.08.21
20:26
&НаСервере
Процедура ПодсчитатьУровниНаСервере(СтрДер, К)
    ДеревоОбъект = РеквизитФормыВЗначение("ДеревоЗн");
    Для Каждого стрДерева из ДеревоОбъект Цикл
10 sidalexsandr
 
21.08.21
22:16
(9) {ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(21)}: Итератор для значения не определен
    Для Каждого стрДерева из ДеревоОбъект Цикл
11 hhhh
 
21.08.21
22:34
(10) из ДеревоОбъект.Строки
12 sidalexsandr
 
21.08.21
22:36
(11) Написал
&НаСервере
Процедура ПодсчитатьУровниНаСервере(СтрДер, К)
    
    ДеревоОбъект = РеквизитФормыВЗначение("ДеревоЗн");
    
    Для Каждого стрДерева из ДеревоОбъект.Строки Цикл
        
        Если стрДерева.Строки.Количество() <> 0 Тогда
            ПодсчитатьУровниНаСервере(стрДерева.Строки, К);
            К = стрДерева.Уровень();                 
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры


Когда создаю второй уровень вложенности на форме 1с вылетает
13 Andreyyy
 
21.08.21
23:02
(12) Зацикливание, потому и вылетает.
14 youalex
 
21.08.21
23:03
(12)просто не твоё
15 hhhh
 
21.08.21
23:19
(12) СтрДер у тебя вообще не используется, зачем ты ее передаешь?
16 серый КТУЛХУ
 
22.08.21
00:19
не дорос до рекурсии ишшо...
17 серый КТУЛХУ
 
22.08.21
00:42
&НаСервере
Процедура ПодсчитатьУровниНаСервере()
    ДеревоОбъект = РеквизитФормыВЗначение("ДеревоЗн");
    КвоУровней = 0;
    КолвоУровнейДерева(ДеревоОбъект,КвоУровней);
КонецПроцедуры
&НаСервере
Процедура КолвоУровнейДерева(СтрДер, К)
    Для Каждого стрДерева из СтрДер.Строки Цикл
        К = Макс(К, СтрДер.Уровень());
        Если стрДерева.Строки.Количество() <> 0 Тогда
            КолвоУровнейДерева(стрДерева, К);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
18 sidalexsandr
 
22.08.21
01:01
(17) Спасибо за помощь. Мне надо вывести с помощью Сообщить максимальный уровень вложенности, а у тебя обе функции с директивой компиляции НаСервере. Где вставить процедуру с директивой компиляции НаКлиенте и вывести макс уровень вложенности с помощью Сообщить?
19 sidalexsandr
 
22.08.21
01:05
{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(21)}: Метод объекта не обнаружен (Уровень)
        К = Макс(К, СтрДер.Уровень());
20 sidalexsandr
 
22.08.21
01:14
(17) Ошибку нашел вот
К = Макс(К, стрДерева.Уровень());

Всё теперь работает огромное спасибо