Значение индекса выходит за границы диапазона 1с как исправить

Данная ошибка возникает в случае обращения к несуществующему элементу универсальной коллекции (массива, списка значений или таблицы значений) по ошибочному индексу.
Индекс всегда должен находиться в пределах диапазона: от 0 до количества элементов коллекции минус единица. Например, если в массиве 3 элемента, то самый младший из них будет иметь индекс = 0, а самый последний — индекс = 2.

Давайте рассмотрим на примерах, как правильно работать с коллекциями, чтобы такие ошибки не возникали.

Работаем с массивом программно без ошибок:

Индекс элемента массива должен находиться в пределах от 0 до значения, возвращаемого методом ВГраница():

м = Новый Массив;
м.Добавить(1);
//Инд содержит произвольный числовой индекс
Инд = 3;
Если Инд >= 0 И Инд <= м.ВГраница() Тогда
	//выполнение действия
	Сообщить(м[Инд]);
КонецЕсли;

Работаем со списком значений программно без ошибок:

Индекс элемента списка значений должен находиться в пределах от 0 до значения, возвращаемого методом Количество() минус 1:

сз = Новый СписокЗначений;
сз.Добавить(1);
Инд = 3;
Если Инд >= 0 И Инд <= сз.Количество() - 1 Тогда
	//выполнение действия
	Сообщить(сз[Инд]);
КонецЕсли;

Поделиться страницей в соц.сетях

Значение индекса выходит за границы диапазона — такая ошибка является результат ошибки при разработке конфигурации.

Она появляется, когда в коде разработчик пытается обратиться к элементу коллекции по его индексу, но система не находит такого элемента. Например, у вас есть массив из 3-х элементов.

Корзинка
Картинка
Картонка

В коде написано.

Код Выделить Развернуть

Элемент = Массив[3];

Будет выдана ошибка. Нумерация индексов массива начинается с 0. Соответственно попытка найти 4-й элемент будет неудачной.

День добрый. Есть такой код:

ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;

    ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;

    ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

    
    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

        
    ПостроительОтчета = Новый ПостроительОтчета;    

    ПостроительОтчета.ИсточникДанных = ИсточникДанных;

    ПостроительОтчета.Выполнить();

    
    // Результат выгружаем в таблицу значений.

    ТабЗначений = ПостроительОтчета.Результат.Выгрузить();

    
    
    Для Каждого ТЗ Из ТабЗначений Цикл

        
        
            КодОС = Справочники.ОсновныеСредства.НайтиПоКоду(ТЗ.Получить(«1»));

                        
            Сообщить(КодОС);

                
        КонецЦикла;

        
    Возврат ТабЗначений

В табличный документ вставляю данные из экселя в первую колонку, и при выполнении пишет «Значение индекса выходит за границы диапазона», как это исправить? Может в коде допустил ошибку? И может ли это из-за того, что в колонке в экселе указан тип «Общий»

  1. 21.10.2015, 15:23


    #1

    valzap вне форума


    Гость форума


    По умолчанию Значение индекса выходит за границы диапазона

    Доброго всем времени суток. Вероятно после обновления платформы и конфы возникла проблема: При попытке войти в редактирование на вкладке -Организации
    выскакивает окошко -Значение индекса выходит за границы диапазона.
    Платформа: 1С:Предприятие 8.3 (8.3.6.2237)
    Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.42.37)
    Режим: Файловый (без сжатия)

    Сообщение из конфигуратора при отладке:

    {ОбщийМодуль.УправлениеКон тактнойИнформациейБП.Моду� �ь(376)}: Ошибка при вызове метода контекста (Получить)
    КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
    по причине:
    Значение индекса выходит за границы диапазона

    Подскажите,пожалуйста,что делать…
    Заранее благодарен.


  2. 22.10.2015, 05:36


    #2

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Значение индекса выходит за границы диапазона

    Ошибка при вызове метода контекста (Получить)
    КонтактнаяИнформация

    Похоже косяк с контактной информацией. Что делать? Зайти в отладчик и «поймать» ошибку и посмотреть — на какой конкретно контактной информации все валится, ну и затем все починить


  3. 22.10.2015, 22:12


    #3

    valzap вне форума


    Гость форума


    По умолчанию Re: Значение индекса выходит за границы диапазона

    Спасибо ,что откликнулись)Честно говоря ,не очень понимаю, что смотреть.Отладчик останавливается здесь:
    КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
    ДобавитьСтрокуКонтактнойИ нформации(Форма, СтрокаКИ, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока);

    КонецЕсли;
    и пишет служебное сообщение :
    {ОбщийМодуль.УправлениеКон тактнойИнформациейБП.Моду� �ь(376)}: Ошибка при вызове метода контекста (Получить)
    КонтактнаяИнформация.Полу� �ить(КонтактнаяИнформация.� �ндекс(СтрокаКИ) + 1));
    по причине:
    Значение индекса выходит за границы диапазона
    Значение индекса выходит за границы диапазона
    Что дальше?


  4. 23.10.2015, 07:13


    #4

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Значение индекса выходит за границы диапазона

    Нужно не дальше, нужно «до» :dance:

    Установите флажок отладчика «остановить по ошибке » (чтобы произошёл останов программы именно в месте ошибки и именно при ошибочных данных).
    Далее определяете, к какому именно элементу относится эта контактная информация и именно о каком конкретно элементе контактной информации речь — ну и вуаля.. либо исправляете этот элемент, либо тупо удаляете (очищаете) соответствующую контактную информацию «от греха подальше)

    ПыСы. Механизм контактной информации довольно хитрый и вполне возможно его «повреждение» при обновлении

    Удачи


  5. 25.10.2015, 01:57


    #5

    valzap вне форума


    Гость форума


    По умолчанию Re: Значение индекса выходит за границы диапазона

    Цитата Сообщение от avm3110
    Посмотреть сообщение

    Нужно не дальше, нужно «до» :dance:

    Установите флажок отладчика «остановить по ошибке » (чтобы произошёл останов программы именно в месте ошибки и именно при ошибочных данных).
    Далее определяете, к какому именно элементу относится эта контактная информация и именно о каком конкретно элементе контактной информации речь — ну и вуаля.. либо исправляете этот элемент, либо тупо удаляете (очищаете) соответствующую контактную информацию «от греха подальше)

    ПыСы. Механизм контактной информации довольно хитрый и вполне возможно его «повреждение» при обновлении

    Удачи

    В результате обнаружил задвоение элементов справочника «организации». Вероятно это не единственное, что задвоилось. Теперь понятна причина «болезни» — делал выгрузку загрузку счетов через XML. Не подскажете, где можно взять обработку почистить базу?


  6. 25.10.2015, 09:54


    #6

    По умолчанию Re: Значение индекса выходит за границы диапазона

    В результате обнаружил задвоение элементов справочника «организации». Вероятно это не единственное, что задвоилось. Теперь понятна причина «болезни» — делал выгрузку загрузку счетов через XML. Не подскажете, где можно взять обработку почистить базу?

    В Бухгалтерии 3.0 есть штатная обработка «Поиск и удаление дублей», воспользуйтесь ей


Подобные ошибки можно увидеть при отладке программ практически на любом языке программирования или на СУБД, где фигурируют коллекции значений. В данном случае речь идет об индексе как о счетчике элементов, например, массива. Если в вашем коде используются подобные типы данных, то есть вероятность встретить ошибку и нужно уметь ее решить.

Рис.1 Индекс находится за пределами массива 1С 8.3. Системное сообщение.
Рис.1 Индекс находится за пределами массива 1С 8.3. Системное сообщение.

Суть и решение проблемы

Чаще всего можно увидеть такое сообщение об ошибке, когда в коде идет обращение к элементу массива по индексу. И в том случае, если программист не предусмотрел проверку на количество элементов в коллекции, 1С будет получать значения. И рано или поздно наступит момент, когда в массиве элементы кончатся, а 1С продолжит пытаться получить значение. В этом случае и вылетит сообщение о том, что индекс элемента массива 1С находится за пределами.

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

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


        	МассивЗначений = Новый Массив;
        	МассивЗначений.Добавить("1");
        	МассивЗначений.Добавить("2");
        	МассивЗначений.Добавить("3");

            Индекс = 0;
        	Пока Индекс < 3 цикл
                    	Сообщить(МассивЗначений[Индекс]);
                    	Индекс = Индекс + 1;
        	КонецЦикла;

Здесь проблема заключается в том, что создается массив с тремя значениями. В цикле же перебираются 11 значений из массива, так как нумерация индексов элементов в коллекции начинается с 0. И данный код выведет пользователю только 3 значения, а на 4 – вызовет ошибку «Индекс за пределами массива 1С». Чтобы исправить это недоразумение, необходимо либо изменить цикл, либо добавить условие с проверкой количества элементов в массиве.

Следует отметить, что в массивах индексы играют важную роль. Помните, чтобы получить индекс массива 1С, достаточно узнать количество элементов специальным методом «Количество()» и вычесть 1. Используя их, можно добавлять значения в коллекцию, изменять их, получать значение конкретного элемента массива и удалять их.

Зная природу этой ошибки, можно сделать вывод о том, что необходимо быть очень осторожными при работе с коллекциями значений, особенно, если речь идет о типовых конфигурациях, где после небольшой правки неквалифицированным разработчиком может перестать работать абсолютно все.

  • Пользуйтесь услугами профессионалов;
  • Обязательно делайте резервные копии перед любым изменением;
  • Сделайте тестовую базу данных и тщательно проверяйте на ней все изменения.

Это три золотых правила, которые резко снизят количество подобных ошибок в конфигурации.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти ширину щели дифракционной решетки
  • Для этого участка местности нет данных яндекс карты как исправить
  • Как составить протокол собрания директоров
  • Как найти стим гуард на компе
  • Как исправить плохой почерк взрослому

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии