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

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

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

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, Массив[Массив.ВГраница()], Неопределено).

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