рекурсивный вызов процедуры 1с
В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия)








Рассмотрим на примере.
В справочнике Номенклатура для групп и элементов выведен реквизит "Вывод". Необходимо чтобы при изменении реквизита "Вывод" для группы (папки), элементам и группам находящимся в этой папке, присваивалось такое же значение реквизита.





Код получается вот такой:


Процедура ВыводПриИзменении(Элемент)  // событие при изменении реквизита "Вывод"
ИзменитьВыводАссортиментаУподчиненныхЭлементов();	
КонецПроцедуры

Процедура ИзменитьВыводАссортиментаУподчиненныхЭлементов(родитель=неопределено)
Если родитель=неопределено тогда родитель=ЭтотОбъект.Ссылка; конецЕсли;
выборка=ВыборкаПодчиненныхЭлементов(Родитель);

Пока выборка.Следующий() цикл
	Если выборка.ссылка.этоГруппа тогда
	ИзменитьВыводАссортиментаУподчиненныхЭлементов(выборка.ссылка);//Вызываем рекурсивно	
	КонецЕсли;	
	элНом=выборка.ссылка.получитьОбъект();
	//+ указываем какие реквизиты нужно поменять
	элНом.Вывод=Вывод;
	//- указываем какие реквизиты нужно поменять
	элНом.записать();	
конецЦикла;
	
конецПроцедуры

Функция ВыборкаПодчиненныхЭлементов(родитель)
	запрос=новый запрос;
	запрос.Текст=  "ВЫБРАТЬ
	              |	Номенклатура.Ссылка
	              |ИЗ
	              |	Справочник.Номенклатура КАК Номенклатура
	              |ГДЕ
	              |	Номенклатура.Родитель = &Родитель";
	запрос.УстановитьПараметр("родитель",Родитель);
	выборка=запрос.Выполнить().Выбрать();	
	возврат выборка;
конецФункции

Процедуру ИзменитьВыводАссортиментаУподчиненныхЭлементов(родитель=неопределено) вызываем рекурсивно из самой себя.

Можно было конечно сразу при первом вызове из события указать "ИзменитьВыводАссортиментаУподчиненныхЭлементов(ЭтотОбъект.ссылка)" и тогда бы не пришлось у процедуры писать "родитель=неопределено", но это уже на Ваше усмотрение.

И так и так корректно.