Индекс находится за границами массива

1. Vhett 18.01.18 13:02 Сейчас в теме
Здравствуйте. Запрос к этой функции выдаёт ошибку выхода индекса за границы. Однако в отладке показывает что индекс равен 0.
&НаСервере
Функция ЗапросКонтейнеров(Ссылка)
	Перем Счетчик;

	МассивКонтейнеры = Новый Массив(6, 6);
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПеремещениеТоваровПломбированиеТО.ТипОборудования,
	|	ПеремещениеТоваровПломбированиеТО.НомерТО,
	|	ПеремещениеТоваровПломбированиеТО.Замок,
	|	ПеремещениеТоваровПломбированиеТО.Пломба1,
	|	ПеремещениеТоваровПломбированиеТО.Пломба2
	|ИЗ
	|	Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
	|		ПО ПеремещениеТоваровПломбированиеТО.Ссылка = ПеремещениеТоваровТовары.Ссылка
	|ГДЕ
	|	ПеремещениеТоваровТовары.Ссылка = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка", Ссылка);	              
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаКонтейнеры = РезультатЗапроса.Выбрать();
	Счетчик=0;
	Пока ВыборкаКонтейнеры.Следующий() Цикл                                  
	МассивКонтейнеры[Счетчик][0]=ВыборкаКонтейнеры.ТипОборудования;
	МассивКонтейнеры[Счетчик][1]=ВыборкаКонтейнеры.НомерТО;
	МассивКонтейнеры[Счетчик][2]=ВыборкаКонтейнеры.Замок;
	МассивКонтейнеры[Счетчик][3]=ВыборкаКонтейнеры.Пломба1;
	МассивКонтейнеры[Счетчик][4]=ВыборкаКонтейнеры.Пломба2;
	Счетчик=Счетчик+1;
	КонецЦикла;
	МассивКонтейнеры[5][5]=Счетчик;

	Возврат МассивКонтейнеры;
	
КонецФункции
Показать

Делал массив неограниченным, однако всё равно пишет об индексе. Вручную как-то задать его?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
19. zeltyr 570 18.01.18 14:02 Сейчас в теме
(17)
Вы связали 2 табличных части документа левым соединением, с условием отбора по документу. Это значит ровно следующее:

Например, если у вас В ТЧ "Товары" - 5 строк, а в ТЧ ПломбированиеТО - 3 строки

То ваш запрос вернёт вам 15 строк, при текущем условии
22. spacecraft 18.01.18 14:12 Сейчас в теме
(21) соединение с самим документом можно было не делать:
"ВЫБРАТЬ
    |    ПеремещениеТоваровПломбированиеТО.ТипОборудования,
    |    ПеремещениеТоваровПломбированиеТО.НомерТО,
    |    ПеремещениеТоваровПломбированиеТО.Замок,
    |    ПеремещениеТоваровПломбированиеТО.Пломба1,
    |    ПеремещениеТоваровПломбированиеТО.Пломба2
    |ИЗ
    |    Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |        
    |ГДЕ
    |    ПеремещениеТоваровПломбированиеТО.Ссылка = &Ссылка";
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. BackinSoda 18.01.18 13:15 Сейчас в теме
(1) одна строка в т.ч., цикл закончился (выборка) и выпал с ошибкой на
МассивКонтейнеры[5][5]=Счетчик;
всё как и задумывалось )
5. spacecraft 18.01.18 13:21 Сейчас в теме
(1) ошибки в этом коде нет. Скорее всего ошибка уже в вызываемом коде. Приведите полное описание ошибки и сам вызываемый код.
8. Vhett 18.01.18 13:41 Сейчас в теме
(5)
{Обработка.ВнешняяОбработкаXML.Форма.Форма.Форма(239)}: Индекс находится за границами массива
МассивКонтейнеры[Счетчик][0]=ВыборкаКонтейнеры.ТипОборудования;
2. buganov 200 18.01.18 13:09 Сейчас в теме
Результат запроса не пустой?
7. Vhett 18.01.18 13:39 Сейчас в теме
(2) Нет, я скриншот приложил же. Но вот когда пытаюсь вызвать функцию, это всё и происходит
Массив = ЗапросКонтейнеров(Элемент.Значение); 
4. doslix 18.01.18 13:21 Сейчас в теме
В какой строке ошибка?
6. Vhett 18.01.18 13:36 Сейчас в теме
Ошибку тут выдаёт:
МассивКонтейнеры[Счетчик][0]=ВыборкаКонтейнеры.ТипОборудования;


Тут оставил точку останова:

ЗаписьXML.ЗаписатьНачалоЭлемента("Containers");
	Массив = ЗапросКонтейнеров(Элемент.Значение);     //Поставил точку
		Счетчик = 0;
		    Пока Счетчик<>Массив[5][5] Цикл 
			    ЗаписьXML.ЗаписатьНачалоЭлемента("Container");
			    ЗаписьXML.ЗаписатьНачалоЭлемента("ContainerKind");
			    ЗаписьXML.ЗаписатьТекст(Строка(Массив[Счетчик][0]));
				ЗаписьXML.ЗаписатьКонецЭлемента(); 
				ЗаписьXML.ЗаписатьНачалоЭлемента("ContainerNumber");
			    ЗаписьXML.ЗаписатьТекст(Строка(Формат(Массив[Счетчик][1], "ЧГ=")));
				ЗаписьXML.ЗаписатьКонецЭлемента();
				ЗаписьXML.ЗаписатьНачалоЭлемента("NumberLock");
			    ЗаписьXML.ЗаписатьТекст(Строка(Формат(Массив[Счетчик][2], "ЧГ=")));
				ЗаписьXML.ЗаписатьКонецЭлемента();
				ЗаписьXML.ЗаписатьНачалоЭлемента("NumberSeal");
			    ЗаписьXML.ЗаписатьТекст(Строка(Формат(Массив[Счетчик][3], "ЧГ=")));
				ЗаписьXML.ЗаписатьКонецЭлемента();
				ЗаписьXML.ЗаписатьНачалоЭлемента("NumberSeal2");
			    ЗаписьXML.ЗаписатьТекст(Строка(Формат(Массив[Счетчик][4], "ЧГ=")));
				ЗаписьXML.ЗаписатьКонецЭлемента();
			ЗаписьXML.ЗаписатьКонецЭлемента(); 
			Счетчик= Счетчик+1;
			КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();   //Containers
Показать
9. zeltyr 570 18.01.18 13:42 Сейчас в теме
(6)
Если так, то это значит, что у вас счетчик превысил допустимое значение.
Проблема 1. Нет ограничений на выборку и на количество результата:

1) В запросе не стоит, например, ВЫБРАТЬ ПЕРВЫЕ 5
2) Запрос вы делаете из табличной части: "Документ.ПеремещениеТоваров.ПломбированиеТО"

То может дело в том, что в табличной части этого документа у вас больше 6 строк?

Проблема 2.
На кой чёрт у вас в запросе вообще левое соединение?

|    Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
    |        ПО ПеремещениеТоваровПломбированиеТО.Ссылка = ПеремещениеТоваровТовары.Ссылка


По сути дела это даст вам количество строк в запросе равное количеству товара, если я ничего не путаю...
Vhett; AnnieCoder; +2 Ответить
10. Vhett 18.01.18 13:47 Сейчас в теме
(9)
То может дело в том, что в табличной части этого документа у вас больше 6 строк?

На скриншоте показал, что там одна строчка только выходит.

Строку закомментил, но результат не изменился.
//МассивКонтейнеры[5][5]=Счетчик;
12. user623969_dusa 18.01.18 13:48 Сейчас в теме
(10) сколько угодно по коду быть не может массив у вас макс 6 ограничьте выборку вам говорят

и еще меня в школе учили что массив может содержать только однотипные данные для разнотипных в 1с есть структура! согласен в школе учили неправильно)
15. Vhett 18.01.18 13:55 Сейчас в теме
(12) Ограничил, выдало результат. Правда одну строку 5 раз продублировало.
16. zeltyr 570 18.01.18 13:57 Сейчас в теме
(15)
повторюсь тут.

Проблема 2.
На кой чёрт у вас в запросе вообще левое соединение?
|    Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
    |        ПО ПеремещениеТоваровПломбированиеТО.Ссылка = ПеремещениеТоваровТовары.Ссылка


По сути дела это даст вам количество строк в запросе равное количеству товара, если я ничего не путаю...
spacecraft; +1 Ответить
17. Vhett 18.01.18 13:59 Сейчас в теме
(16) Я ввожу номер документа, по нему он должен выдать контейнеры этого документа.
19. zeltyr 570 18.01.18 14:02 Сейчас в теме
(17)
Вы связали 2 табличных части документа левым соединением, с условием отбора по документу. Это значит ровно следующее:

Например, если у вас В ТЧ "Товары" - 5 строк, а в ТЧ ПломбированиеТО - 3 строки

То ваш запрос вернёт вам 15 строк, при текущем условии
21. Vhett 18.01.18 14:10 Сейчас в теме
(19) Вы правы, загвоздка была в том что 2 табличных части было. Связал с документом, и результат нужный получил. Благодарю за объяснение.
22. spacecraft 18.01.18 14:12 Сейчас в теме
(21) соединение с самим документом можно было не делать:
"ВЫБРАТЬ
    |    ПеремещениеТоваровПломбированиеТО.ТипОборудования,
    |    ПеремещениеТоваровПломбированиеТО.НомерТО,
    |    ПеремещениеТоваровПломбированиеТО.Замок,
    |    ПеремещениеТоваровПломбированиеТО.Пломба1,
    |    ПеремещениеТоваровПломбированиеТО.Пломба2
    |ИЗ
    |    Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |        
    |ГДЕ
    |    ПеремещениеТоваровПломбированиеТО.Ссылка = &Ссылка";
Показать
23. Vhett 18.01.18 14:16 Сейчас в теме
(22) а не вызовет ли это ошибку, если у документа не будет контейнеров?
24. spacecraft 18.01.18 14:17 Сейчас в теме
(23) просто в цикл не войдет: запрос вернется пустой
20. spacecraft 18.01.18 14:03 Сейчас в теме
(17) причем тут номер документа и соединение с табличной частью товары?
Все верно озвучено. Убирайте левое соединение.
11. Pixar0000 18.01.18 13:48 Сейчас в теме
а не проще ли выгрузить результат запроса в ТЗ и тогда весь процесс отладки станет на порядок легче и не загонять в массив, а потом его "проганять"?
13. doslix 18.01.18 13:53 Сейчас в теме
Надо посмотреть в отладчике чему равен счетчик в момент ошибки.
18. Vhett 18.01.18 14:02 Сейчас в теме
14. BackinSoda 18.01.18 13:55 Сейчас в теме
Включите галочку "остановка по ошибке" и смотрите на счетчики
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот