Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Ошибка 1С: Индекс находится за границами массива — Причины и решение

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Прерывание выполнения алгоритмов обработки коллекций в 1С:Предприятие.
  • Ошибка времени выполнения: {МодульОбъекта(Строка)}: Индекс находится за границами массива.
  • Сбой при обращении по квадратно-скобочному индексу к Массив[Индекс], строкам ТаблицаЗначений[Индекс] или колонкам.

1. Принцип индексации коллекций в 1С

В платформе 1С:Предприятие индексация всех коллекций (Массив, ТаблицаЗначений, ТабличнаяЧасть, ДеревоЗначений, СписокЗначений) является строго 0-ориентированной (начинается с нуля). Последний элемент всегда имеет индекс Коллекция.Количество() - 1, а верхняя граница массива возвращается методом Коллекция.ВГраница().

2. Анализ и локализация ошибки

Ошибка возникает в двух базовых случаях:

  • Обращение к пустому массиву (индекс 0 при Количество() = 0);
  • Использование индекса >= Коллекция.Количество() либо отрицательного значения.

3. Примеры безопасного кода

Безопасный доступ по конкретному индексу:

Если МассивДанных.Количество() > 0 И Индекс <= МассивДанных.ВГраница() И Индекс >= 0 Тогда
    Значение = МассивДанных[Индекс];
Иначе
    // Обработка случая выхода за границы
    Значение = Неопределено;
КонецЕсли;

Корректный цикл по индексам:

// ПРАВИЛЬНО: до ВГраница()
Для Индекс = 0 По МассивДанных.ВГраница() Цикл
    ТекущийЭлемент = МассивДанных[Индекс];
КонецЦикла;

// ИЛИ использование безопасного итератора Для Каждого:
Для Каждого ТекущийЭлемент Из МассивДанных Цикл
    // Логика обработки
КонецЦикла;

Безопасное удаление элементов в цикле (с конца):

// Удаление с конца предотвращает смещение индексов и выход за границы
Для Счетчик = -МассивДанных.ВГраница() По 0 Цикл
    Индекс = -Счетчик;
    Если НужноУдалить(МассивДанных[Индекс]) Тогда
        МассивДанных.Удалить(Индекс);
    КонецЕсли;
КонецЦикла;
Практический опыт инженера: Если коллекция заполняется асинхронно или из фонового задания, проверяйте метод Количество() непосредственно перед вызовом по индексу, а не кэшируйте его значение в локальную переменную.

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

Почему возникает ошибка при удалении строк из Таблицы Значений в цикле от 0 до Количество()-1?

При вызове метода Удалить() общее количество строк уменьшается, а индексы последующих строк сдвигаются влево. Цикл доходит до старого предельного значения и обращается к уже несуществующему индексу. Удалять элементы необходимо с конца к началу (от ВГраница() до 0 с шагом -1).

Какое значение возвращает метод ВГраница() для пустого массива?

Для пустого массива метод ВГраница() возвращает значение -1. Цикл вида 'Для Индекс = 0 По Массив.ВГраница()' для пустого массива не выполнится ни разу, что исключает падение.

Поддерживает ли 1С отрицательные индексы (как в Python)?

Нет, обращение по отрицательному индексу (например, Массив[-1]) всегда вызывает ошибку 'Индекс находится за границами массива'.

Как быстро получить первый и последний элемент массива без риска падения?

Используйте конструкцию: Первый = ?(Массив.Количество() > 0, Массив[0], Неопределено); Последний = ?(Массив.Количество() > 0, Массив[Массив.ВГраница()], Неопределено).