|
рекурсивный вызов функции | ☑ | ||
---|---|---|---|---|
0
rosveta
24.12.14
✎
10:00
|
Добрый день. Не могу решить проблему. Есть функция, которая должна проверять реквизит всех родителей элемента. УТ 11, клиент-сервер
&НаСервере Функция ПроверитьРодителейГруппы(Группа) Если ЗначениеЗаполнено(Группа.Родитель) Тогда Если Группа.Родитель.РС_ВыгружатьНаСайт Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Корневой каталог уже выгружается"; Сообщение.Сообщить(); Возврат Истина; Иначе ПроверитьРодителейГруппы(Группа.Родитель);; КонецЕсли; Иначе Возврат Ложь; КонецЕсли; КонецФункции Проблема в том, что когда функция попала уже в Возврат Ложь http://clip2net.com/s/39m037W После этого функция еще попадает в другое место http://clip2net.com/s/39m0dY7 Подскажите, в чем ошибка? |
|||
1
vicof
24.12.14
✎
10:01
|
Ни в чем, выходит из рекурсии.
|
|||
2
Asmody
24.12.14
✎
10:03
|
Иначе
Возврат ПроверитьРодителейГруппы(Группа.Родитель); |
|||
3
xXeNoNx
24.12.14
✎
10:04
|
Функция ПроверитьРодителейГруппы(Группа)
Если НЕ ЗначениеЗаполнено(Группа) Тогда возврат Ложь; КонецЕсли; ПроверитьРодителейГруппы(Группа.Родитель); КонецФункции |
|||
4
xXeNoNx
24.12.14
✎
10:05
|
(3) И вообще, почему функция, а не процедура?
|
|||
5
igork1966
24.12.14
✎
10:06
|
Рекурсивная функция не использующая результат ее вызова... мне трудно такую представить...
|
|||
6
igork1966
24.12.14
✎
10:06
|
(4) => (5) + (2)
|
|||
7
rosveta
24.12.14
✎
10:07
|
(2), Спасибо! Ваш вариант сработал.
(3), Думаю, что и Ваш тоже сработает. (4), потому что она вызывается в другом месте и в зависимости от того, что возвращается происходят дальнейшие действия |
|||
8
xXeNoNx
24.12.14
✎
10:08
|
Функция ПроверитьРодителейГруппы(Группа)
Если НЕ ЗначениеЗаполнено(Группа) Тогда возврат Ложь; ИНАЧЕЕСЛИ Группа.Родитель.РС_ВыгружатьНаСайт Тогда возврат Истина; КонецЕсли; ПроверитьРодителейГруппы(Группа.Родитель); КонецФункции |
|||
9
Asmody
24.12.14
✎
10:18
|
При использовании рекурсии всегда проверяйте точки выхода. Если сомневаетесь, сократите точку выхода до одной, например, введя переменную Результат.
|
|||
10
rosveta
24.12.14
✎
10:22
|
(9), Спасибо за совет.
|
|||
11
igork1966
24.12.14
✎
10:24
|
(8) Вот настойчивый. Рекурсивная функция не использующая результат вызова НОНСЕНС.
|
|||
12
rosveta
24.12.14
✎
10:29
|
(3), (8)- Все-таки не подходит.
|
|||
13
rosveta
24.12.14
✎
10:30
|
&НаСервере
Функция ПроверитьРодителейГруппы(Группа) Если ЗначениеЗаполнено(Группа.Родитель) Тогда Если Группа.Родитель.РС_ВыгружатьНаСайт Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Корневой каталог уже выгружается"; Сообщение.Сообщить(); Возврат Истина; Иначе Возврат ПроверитьРодителейГруппы(Группа.Родитель); КонецЕсли; Иначе Возврат Ложь; КонецЕсли; КонецФункции Этот вариант работает |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |