Как определить уровень в дереве значений

1. sidalexsandr 3 21.08.21 19:29 Сейчас в теме
Выдает ошибку обработка
{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(19)}: Итератор для значения не определен
Для Каждого стрДерева из ДеревоЗн Цикл

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

&НаСервере
Процедура ПодсчитатьУровниНаСервере(СтрДер, К)
	
	Для Каждого стрДерева из ДеревоЗн Цикл 
		
		Если стрДерева.Строки.Количество() <> 0 Тогда 
			ПодсчитатьУровниНаСервере(стрДерева.Строки, К);
			К = стрДерева.Уровень(); 
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
9. sidalexsandr 3 22.08.21 01:14 Сейчас в теме
Ошибку нашел
К = Макс(К, стрДерева.Уровень());
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Release 21.08.21 19:51 Сейчас в теме
(1) И что есть ДеревоЗн? Предположу, что это реквизит с типом ДеревоЗначений. Тогда
Для Каждого стрДерева из ДеревоЗн.Строки Цикл
3. sidalexsandr 3 21.08.21 22:19 Сейчас в теме
ДеревоЗн -это дерево значений на форме обработки (формы управляемые)

{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(21)}: Поле объекта не обнаружено (Строки)
Для Каждого стрДерева из ДеревоЗн.Строки Цикл
4. Release 21.08.21 22:27 Сейчас в теме
(3) Что значит "дерево значений на форме обработки"? Это элемент формы?
Работать нужно с данными элемента, то что в поле ПутьКДанным в свойствах элементах, а не самим элементом.
5. Fox-trot 163 21.08.21 23:45 Сейчас в теме
6. sidalexsandr 3 22.08.21 01:08 Сейчас в теме
7. sidalexsandr 3 22.08.21 01:08 Сейчас в теме
Переписал на
&НаКлиенте
Процедура ПодсчитатьУровни(Команда)
	
	КвоУровней = 0;
	ПодсчитатьУровниНаСервере(КвоУровней);
	Сообщить("Максимальное количество уровней = " + КвоУровней);
	
	
КонецПроцедуры

&НаСервере
Процедура ПодсчитатьУровниНаСервере(КвоУровней)
    ДеревоОбъект = РеквизитФормыВЗначение("ДеревоЗн");
    КвоУровней = 0;
    КолвоУровнейДерева(ДеревоОбъект,КвоУровней);
КонецПроцедуры
&НаСервере
Процедура КолвоУровнейДерева(СтрДер, К)
    Для Каждого стрДерева из СтрДер.Строки Цикл
        К = Макс(К, СтрДер.Уровень());
        Если стрДерева.Строки.Количество() <> 0 Тогда
            КолвоУровнейДерева(стрДерева, К);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
Показать
8. sidalexsandr 3 22.08.21 01:09 Сейчас в теме
Теперь выдает ошибку
{ВнешняяОбработка.ДеревоУровень.Форма.Форма.Форма(21)}: Метод объекта не обнаружен (Уровень)
К = Макс(К, СтрДер.Уровень());
9. sidalexsandr 3 22.08.21 01:14 Сейчас в теме
Ошибку нашел
К = Макс(К, стрДерева.Уровень());
10. user1129453 23.08.21 06:46 Сейчас в теме
А почему нельзя на клиенте рекурсивно посчитать? зачем гонять на сервер?
11. starik-2005 3080 23.08.21 21:18 Сейчас в теме
(10)
зачем гонять на сервер
На клиенте нет такого типа, как дерево значений. У топикастера какой-то изврат, который в переменной лежит общей. Я бы так не стал делать, да и уровень дерева в запросе можно получить (в ряде случаев).
12. user1129453 24.08.21 01:08 Сейчас в теме
(11), а я ничего не писал, что оно есть, на клиенте есть "неудобное" ДанныеФормыДерево.
Относительный аналог "Для Каждого стрДерева из ДеревоЗн.Строки Цикл" является "Для Каждого стрДерева из ДеревоЗн.ПолучитьЭлементы() Цикл"

как вариант: https://forum.infostart.ru/forum9/topic113341/ (сам принцип), понятно, что цикл можно можно сделать рекурсивно

в цикле считай всё, что хочешь
13. starik-2005 3080 24.08.21 09:56 Сейчас в теме
(12) базовый алгоритм работы с деревом - рекурсивный. А данные формы или дерево - разницы ноль.
14. user1129453 24.08.21 11:16 Сейчас в теме
(13) так я о том и говрю, если нет разницы зачем платить больше, лезть на сервер)
15. FatPanzer 24.08.21 11:23 Сейчас в теме
(14) Ну мало ли... Все таки арсенал методов для работы с прикладным ДЗ шире, чем с ДанныеФормыКоллекция... Все зависит от задачи и используемых данных.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот