Бесконечная рекурсия

В модулях 1С:Предприятия может быть организован рекурсивный вызов процедуры. Простейшим примером является вызов процедуры из этой же процедуры. Возможность рекурсивного вызова может использоваться для реализации различных алгоритмов. Например, с помощью рекурсивного вызова может реализовываться обход результата запроса по иерархии справочника, так как количество уровней группировок иерархии справочника заранее не определено.  

При реализации рекурсивного вызова разработчик конфигурации должен обеспечить выход из рекурсии по какому-либо условию и не допустить бесконечной рекурсии.

Следует учитывать, что на каждом уровне вызова процедуры система использует некоторое количество памяти. Если возникает бесконечная рекурсия, то сначала происходит «зависание» системы, так как выполняется многократный вызов процедуры, а потом, когда исчерпывается доступная память, происходит аварийное завершение. При этом система не может диагностировать такую ошибку, как ошибку выполнения модуля, так как нет возможности определить, когда рекурсия соответствует замыслу разработчика, а когда рекурсия становится бесконечной из-за ошибки в алгоритме. Поэтому при ошибке в модуле, приведшей к бесконечной рекурсии, не выдается сообщение об ошибке встроенного языка, а происходит аварийное завершение работы системы.

Также следует учитывать, что бесконечная рекурсия может быть инициирована не только явным вызовом процедуры из этой же процедуры, но и вызовом из некоторого обработчика действия, вызывающего этот же обработчик. Например, если в форме в обработчике ПриСменеСтраницы() установить активную страницу панели, то будет снова вызван обработчик ПриСменеСтраницы() и т.д. Таким образом, будет инициирована бесконечная рекурсия, и произойдет аварийное завершение работы системы.