Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

1C_STACK_OVERFLOW 1С:Предприятие и СУБД

Превышен лимит рекурсивных вызовов процедуры в 1С (Stack Overflow)

Обновлено: 25.08.2026 · Официальная документация ↗
  • Аварийное завершение рабочего процесса rphost или аварийное закрытие тонкого клиента 1С.
  • Текст ошибки: Превышен максимально допустимый уровень рекурсии (лимит стека вызовов).
  • В журнале ОС Windows регистрируется сбой в модуле core83.dll (Exception code: 0xc00000fd).
  • 100% утилизация ядра процессора до момента падения сеанса.

1. Ограничение глубины рекурсии программным счетчиком

Добавьте во все рекурсивные алгоритмы параметр контроля глубины стека:

Процедура ОбойтиДеревоИерархии(Элемент, ТекущаяГлубина = 0)
    
    МАКСИМАЛЬНАЯ_ГЛУБИНА = 200;
    
    Если ТекущаяГлубина > МАКСИМАЛЬНАЯ_ГЛУБИНА Тогда
        ВызватьИсключение "Обнаружено зацикливание иерархии для элемента: " + Строка(Элемент);
    КонецЕсли;
    
    Выборка = Справочники.Номенклатура.Выбрать(Элемент);
    Пока Выборка.Следующий() Цикл
        ОбойтиДеревоИерархии(Выборка.Ссылка, ТекущаяГлубина + 1);
    КонецЦикла;
    
КонецПроцедуры

2. Замена глубокой рекурсии стеком на базе массива

Стек = Новый Массив;
Стек.Добавить(КореньИерархии);

Пока Стек.Количество() > 0 Цикл
    ТекущийУзел = Стек[Стек.Количество() - 1];
    Стек.Удалить(Стек.Количество() - 1);
    
    // Обработка узла
    Для Каждого Подчиненный Из ПолучитьПодчиненные(ТекущийУзел) Цикл
        Стек.Добавить(Подчиненный);
    КонецЦикла;
КонецЦикла;

3. Проверка циклических ссылок родителей в СУБД

Выполните поиск элементов, у которых Родитель равен самому себе или образует кольцевую зависимость (A -> B -> A).

💡 Практика специалистов: Чаще всего переполнение стека возникает при обходе спецификаций номенклатуры в ERP-системах, когда полуфабрикат ошибочно включает в состав сам себя.

Частые вопросы (FAQ)

Каков жесткий лимит глубины вызовов в платформе 1С:Предприятие?

В зависимости от разрядности платформы (x86 или x64) и объема стека ОС лимит составляет порядка 1000–2000 вложенных вызовов процедур.

Как найти процедуру, вызывающую Stack Overflow, если клиент падает без стека?

Включите сбор технологического журнала с событиями EXCP, CALL и SCALL с фильтром по процессу rphost, либо воспользуйтесь отладчиком с точкой останова в начале подозрительного модуля.

Может ли событие формы ПриИзменении вызвать переполнение стека?

Да, если внутри обработчика ПриИзменении программно меняется значение этого же реквизита или активируется связанный элемент без отключения обработки оповещений.

Поможет ли переход на 64-битную версию сервера 1С избавиться от ошибки?

Переход на x64 увеличит размер доступного адресного пространства, но не решит проблему бесконечного зацикливания — сервер упадет позже с исчерпанием ресурсов потока.

Полезные материалы
Рекомендуем