1C-CodeОшибки 1С → Программа зависла

Зависание в 1С: бесконечный цикл и запрос внутри цикла

Сообщение платформы: Программа зависла

Сообщения об ошибке нет вовсе — платформа просто перестаёт отвечать. Это хуже любой ошибки: непонятно, где искать. Причин ровно две, и они разные.

Отчего это бывает

1. Условие цикла никогда не становится ложным

Пока Остаток > 0 Цикл
	// Остаток внутри не меняется — выхода нет
КонецЦикла;

Проверьте, что переменная из условия действительно меняется в теле, и что меняется в нужную сторону.

2. Рекурсия без условия выхода

Функция Развернуть(Узел)
	Возврат Развернуть(Узел.Родитель);   // до самого верха и дальше
КонецФункции

3. Запрос внутри цикла

Для Каждого Строка Из Таблица Цикл
	Запрос.Выполнить();      // тысяча строк — тысяча походов в базу
КонецЦикла;

Это не зависание, а медленная работа, но выглядит одинаково: на десяти строках незаметно, на десяти тысячах — минуты. Один запрос вместо тысячи решается соединением или параметром В (&Список).

Что сделать

Остановите сеанс и посмотрите замером производительности, на какой строке проводится время. Для циклов помогает счётчик-предохранитель: если число шагов превысило разумное, вызывайте исключение с понятным текстом — так вы узнаете о поломке раньше пользователя.

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

Открыть тренажёр

Разобраться глубже

Другие частые ошибки

Поле объекта не обнаружено Значение не является значением объектного типа Переменная не определена Метод объекта не обнаружен Индекс находится за границами массива Деление на ноль