[КД2] Рекурсивный вызов функции в правилах

1. Drivingblind 228 27.05.20 10:55 Сейчас в теме
Всем привет! Возникла проблема, а именно, необходимо рекурсивно вызывать функцию в ПВД для обхода дерева значений. Подскажите, пожалуйста, каким образом это можно реализовать. С помощью алгоритмов не получается вызывать рекурсивно почему-то.
Заранее спасибо за помощь!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZergKRSK 130 27.05.20 11:02 Сейчас в теме
(1) покажите как вызываете с помощью алгоритмов.
3. Drivingblind 228 27.05.20 13:09 Сейчас в теме
(2) вызываю обычно: Выполнить(Алгоритмы.<ИмяАлгоритма>)
4. fuser 3 28.05.20 07:43 Сейчас в теме
Попробуйте переписать код в виде цикла

Пока Истина Цикл
    ...
    Выполнить(Алгоритмы.ОбработкаУзлаДерева);

КонецЦикла
5. Drivingblind 228 01.06.20 05:45 Сейчас в теме
(4) Не получится. Функция должна выполняться не в цикле, а вызывать сама себя.
7. acanta 01.06.20 10:41 Сейчас в теме
(4) функция для рекурсии должна размещаться в том же модуле, алгоритмы только хранят текст.
6. fuser 3 01.06.20 10:37 Сейчас в теме
в 1 сообщении попросили показать код. Не хотите - как хотите.
Телепаты в отпуске.
8. Drivingblind 228 05.06.20 09:02 Сейчас в теме
(6) Рекурсивный обход дерева. Код прикладываю ниже.

Процедура ВыгрузитьЭлементОтбора(ЭлементОтбора)	
	Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
		
		//формируем строку
		ИсходнаяСтрока= Строка(ЭлементОтбора.ЛевоеЗначение);
		КонечнаяСтрока =Лев(ИсходнаяСтрока,1);
		Для Индекс=2 По СтрДлина(ИсходнаяСтрока) Цикл
			Символ=Сред(ИсходнаяСтрока,Индекс,1);
			КонечнаяСтрока=КонечнаяСтрока+?(ВРег(Символ)=Символ," "+НРег(Символ),Символ);
		КонецЦикла;
		//находим элемент	
		СсылкаНаЭлемент = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(КонечнаяСтрока,Истина);
		
		//выгружаем свойство
		ВыгрузитьПоПравилу(СсылкаНаЭлемент);
		
		ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.["+КонечнаяСтрока+"]"); 
		
		//выгружаем значения
		Если ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СписокЗначений") Тогда
			Для каждого Элемент из ЭлементОтбора.ПравоеЗначение Цикл
				ВыгрузитьПоПравилу(Элемент.Значение); 
			КонецЦикла;
		ИначеЕсли НЕ ЗначениеЗаполнено(ЭлементОтбора.ПравоеЗначение) Тогда
			//Ничего не делаем
		Иначе
			ВыгрузитьПоПравилу(ЭлементОтбора.ПравоеЗначение);  
		КонецЕсли;	
		
	ИначеЕсли ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
		Для каждого Элемент из ЭлементОтбора.Элементы Цикл
			ВыгрузитьЭлементОтбора(Элемент);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры
Показать
9. Drivingblind 228 05.06.20 09:11 Сейчас в теме
(6)
(7)
Единственное, до чего я пока додумался, это подцеплять дополнительную обработку и выполнять обход дерева там.
Подскажите, пожалуйста, возможно ли пойти данным путем? Что почитать про использование доп. обработок в правилах обмена?
Прикрепленные файлы:
Оставьте свое сообщение

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