1C-CodeОшибки 1С → Индекс находится за границами массива

Индекс находится за границами массива — почему цикл выходит за край

Сообщение платформы: Индекс находится за границами массива

Вы обратились к элементу по номеру, которого в коллекции нет. Индексы в 1С начинаются с нуля, поэтому у массива из пяти элементов последний номер — четвёртый.

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

1. Цикл до Количество() вместо Количество() − 1

Для Сч = 0 По Массив.Количество() Цикл      // на последнем шаге вылет
Для Сч = 0 По Массив.Количество() - 1 Цикл  // верно

Классика. В 1С граница цикла ВКЛЮЧАЕТСЯ, в отличие от многих языков, и последний шаг оказывается лишним.

2. Удаление внутри цикла

Для Сч = 0 По Массив.Количество() - 1 Цикл
	Массив.Удалить(Сч);      // размер уменьшился, индексы сдвинулись
КонецЦикла;

Удалять надо с конца: Для Сч = Массив.Количество() - 1 По 0 Цикл с шагом −1. Тогда сдвиг не задевает ещё не пройденные элементы.

3. Коллекция оказалась пустой

Первый = Массив[0];    // если ничего не нашлось — вылет

Что сделать

Там, где номер не нужен, берите Для Каждого Элемент Из Массив Цикл — у него выйти за границу нельзя в принципе. Индекс нужен редко: почти всегда это привычка из другого языка.

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

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

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

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

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