Данная ошибка возникает в случае обращения к несуществующему элементу универсальной коллекции (массива, списка значений или таблицы значений) по ошибочному индексу.
Индекс всегда должен находиться в пределах диапазона: от 0 до количества элементов коллекции минус единица. Например, если в массиве 3 элемента, то самый младший из них будет иметь индекс = 0, а самый последний — индекс = 2.
Давайте рассмотрим на примерах, как правильно работать с коллекциями, чтобы такие ошибки не возникали.
Работаем с массивом программно без ошибок:
Индекс элемента массива должен находиться в пределах от 0 до значения, возвращаемого методом ВГраница():
м = Новый Массив; м.Добавить(1); //Инд содержит произвольный числовой индекс Инд = 3; Если Инд >= 0 И Инд <= м.ВГраница() Тогда //выполнение действия Сообщить(м[Инд]); КонецЕсли;
Работаем со списком значений программно без ошибок:
Индекс элемента списка значений должен находиться в пределах от 0 до значения, возвращаемого методом Количество() минус 1:
сз = Новый СписокЗначений; сз.Добавить(1); Инд = 3; Если Инд >= 0 И Инд <= сз.Количество() - 1 Тогда //выполнение действия Сообщить(сз[Инд]); КонецЕсли;
Поделиться страницей в соц.сетях
Значение индекса выходит за границы диапазона — такая ошибка является результат ошибки при разработке конфигурации.
Она появляется, когда в коде разработчик пытается обратиться к элементу коллекции по его индексу, но система не находит такого элемента. Например, у вас есть массив из 3-х элементов.
Корзинка
Картинка
Картонка
В коде написано.
Код Выделить Развернуть
Элемент = Массив[3];
Будет выдана ошибка. Нумерация индексов массива начинается с 0. Соответственно попытка найти 4-й элемент будет неудачной.
День добрый. Есть такой код:
ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;
ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;
ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
// Результат выгружаем в таблицу значений.
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Для Каждого ТЗ Из ТабЗначений Цикл
КодОС = Справочники.ОсновныеСредства.НайтиПоКоду(ТЗ.Получить(«1»));
Сообщить(КодОС);
КонецЦикла;
Возврат ТабЗначений
В табличный документ вставляю данные из экселя в первую колонку, и при выполнении пишет «Значение индекса выходит за границы диапазона», как это исправить? Может в коде допустил ошибку? И может ли это из-за того, что в колонке в экселе указан тип «Общий»
-
21.10.2015, 15:23
#1
Гость форума
Значение индекса выходит за границы диапазона
Доброго всем времени суток. Вероятно после обновления платформы и конфы возникла проблема: При попытке войти в редактирование на вкладке -Организации
выскакивает окошко -Значение индекса выходит за границы диапазона.
Платформа: 1С:Предприятие 8.3 (8.3.6.2237)
Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.42.37)
Режим: Файловый (без сжатия)Сообщение из конфигуратора при отладке:
{ОбщийМодуль.УправлениеКон тактнойИнформациейБП.Моду� �ь(376)}: Ошибка при вызове метода контекста (Получить)
КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
по причине:
Значение индекса выходит за границы диапазонаПодскажите,пожалуйста,что делать…
Заранее благодарен.
-
22.10.2015, 05:36
#2
Гордость форума PRO
Re: Значение индекса выходит за границы диапазона
Ошибка при вызове метода контекста (Получить)
КонтактнаяИнформацияПохоже косяк с контактной информацией. Что делать? Зайти в отладчик и «поймать» ошибку и посмотреть — на какой конкретно контактной информации все валится, ну и затем все починить
-
22.10.2015, 22:12
#3
Гость форума
Re: Значение индекса выходит за границы диапазона
Спасибо ,что откликнулись)Честно говоря ,не очень понимаю, что смотреть.Отладчик останавливается здесь:
КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
ДобавитьСтрокуКонтактнойИ нформации(Форма, СтрокаКИ, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока);КонецЕсли;
и пишет служебное сообщение :
{ОбщийМодуль.УправлениеКон тактнойИнформациейБП.Моду� �ь(376)}: Ошибка при вызове метода контекста (Получить)
КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
по причине:
Значение индекса выходит за границы диапазона
Значение индекса выходит за границы диапазона
Что дальше?
-
23.10.2015, 07:13
#4
Гордость форума PRO
Re: Значение индекса выходит за границы диапазона
Нужно не дальше, нужно «до» :dance:
Установите флажок отладчика «остановить по ошибке » (чтобы произошёл останов программы именно в месте ошибки и именно при ошибочных данных).
Далее определяете, к какому именно элементу относится эта контактная информация и именно о каком конкретно элементе контактной информации речь — ну и вуаля.. либо исправляете этот элемент, либо тупо удаляете (очищаете) соответствующую контактную информацию «от греха подальше)ПыСы. Механизм контактной информации довольно хитрый и вполне возможно его «повреждение» при обновлении
Удачи
-
25.10.2015, 01:57
#5
Гость форума
Re: Значение индекса выходит за границы диапазона
Сообщение от avm3110
Нужно не дальше, нужно «до» :dance:
Установите флажок отладчика «остановить по ошибке » (чтобы произошёл останов программы именно в месте ошибки и именно при ошибочных данных).
Далее определяете, к какому именно элементу относится эта контактная информация и именно о каком конкретно элементе контактной информации речь — ну и вуаля.. либо исправляете этот элемент, либо тупо удаляете (очищаете) соответствующую контактную информацию «от греха подальше)ПыСы. Механизм контактной информации довольно хитрый и вполне возможно его «повреждение» при обновлении
Удачи
В результате обнаружил задвоение элементов справочника «организации». Вероятно это не единственное, что задвоилось. Теперь понятна причина «болезни» — делал выгрузку загрузку счетов через XML. Не подскажете, где можно взять обработку почистить базу?
-
25.10.2015, 09:54
#6
Re: Значение индекса выходит за границы диапазона
В результате обнаружил задвоение элементов справочника «организации». Вероятно это не единственное, что задвоилось. Теперь понятна причина «болезни» — делал выгрузку загрузку счетов через XML. Не подскажете, где можно взять обработку почистить базу?
В Бухгалтерии 3.0 есть штатная обработка «Поиск и удаление дублей», воспользуйтесь ей
Подобные ошибки можно увидеть при отладке программ практически на любом языке программирования или на СУБД, где фигурируют коллекции значений. В данном случае речь идет об индексе как о счетчике элементов, например, массива. Если в вашем коде используются подобные типы данных, то есть вероятность встретить ошибку и нужно уметь ее решить.

Суть и решение проблемы
Чаще всего можно увидеть такое сообщение об ошибке, когда в коде идет обращение к элементу массива по индексу. И в том случае, если программист не предусмотрел проверку на количество элементов в коллекции, 1С будет получать значения. И рано или поздно наступит момент, когда в массиве элементы кончатся, а 1С продолжит пытаться получить значение. В этом случае и вылетит сообщение о том, что индекс элемента массива 1С находится за пределами.
Приглашаем на
бесплатный вебинар!
06 июня в 11:00 мск
1 час
Для разработчиков хорошо, что 1С при сообщении об ошибке позволяет просмотреть, на какой строке кода совершилось недопустимое действие. По кнопке «Подробно» вы получите информацию о том, какая команда отработала с ошибкой, где и на какой строке. Посмотрим на пример кода, который точно приведет к подобной ошибке:
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("1");
МассивЗначений.Добавить("2");
МассивЗначений.Добавить("3");
Индекс = 0;
Пока Индекс < 3 цикл
Сообщить(МассивЗначений[Индекс]);
Индекс = Индекс + 1;
КонецЦикла;
Здесь проблема заключается в том, что создается массив с тремя значениями. В цикле же перебираются 11 значений из массива, так как нумерация индексов элементов в коллекции начинается с 0. И данный код выведет пользователю только 3 значения, а на 4 – вызовет ошибку «Индекс за пределами массива 1С». Чтобы исправить это недоразумение, необходимо либо изменить цикл, либо добавить условие с проверкой количества элементов в массиве.
Следует отметить, что в массивах индексы играют важную роль. Помните, чтобы получить индекс массива 1С, достаточно узнать количество элементов специальным методом «Количество()» и вычесть 1. Используя их, можно добавлять значения в коллекцию, изменять их, получать значение конкретного элемента массива и удалять их.
Зная природу этой ошибки, можно сделать вывод о том, что необходимо быть очень осторожными при работе с коллекциями значений, особенно, если речь идет о типовых конфигурациях, где после небольшой правки неквалифицированным разработчиком может перестать работать абсолютно все.
- Пользуйтесь услугами профессионалов;
- Обязательно делайте резервные копии перед любым изменением;
- Сделайте тестовую базу данных и тщательно проверяйте на ней все изменения.
Это три золотых правила, которые резко снизят количество подобных ошибок в конфигурации.

