Здравствуйте. Запрос к этой функции выдаёт ошибку выхода индекса за границы. Однако в отладке показывает что индекс равен 0.

```1c
    &НаСервере
    Функция ЗапросКонтейнеров(Ссылка)
    Перем Счетчик;

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

    Возврат МассивКонтейнеры;

    КонецФункции
```

Делал массив неограниченным, однако всё равно пишет об индексе. Вручную как-то задать его?
---
Вы связали 2 табличных части документа левым соединением, с условием отбора по документу. Это значит ровно следующее:

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

То ваш запрос вернёт вам 15 строк, при текущем условии
---
соединение с самим документом можно было не делать:

```1c
    "ВЫБРАТЬ
    | ПеремещениеТоваровПломбированиеТО.ТипОборудования,
    | ПеремещениеТоваровПломбированиеТО.НомерТО,
    | ПеремещениеТоваровПломбированиеТО.Замок,
    | ПеремещениеТоваровПломбированиеТО.Пломба1,
    | ПеремещениеТоваровПломбированиеТО.Пломба2
    |ИЗ
    | Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |
    |ГДЕ
    | ПеремещениеТоваровПломбированиеТО.Ссылка = &Ссылка";
```
---
одна строка в т.ч., цикл закончился (выборка) и выпал с ошибкой на
```1c
    МассивКонтейнеры[5][5]=Счетчик;
```
 всё как и задумывалось )
---
ошибки в этом коде нет. Скорее всего ошибка уже в вызываемом коде. Приведите полное описание ошибки и сам вызываемый код.
---
{Обработка.ВнешняяОбработкаXML.Форма.Форма.Форма(239)}: Индекс находится за границами массива
 МассивКонтейнеры[Счетчик][0]=ВыборкаКонтейнеры.ТипОборудования;
---
Результат запроса не пустой?
---
Нет, я скриншот приложил же. Но вот когда пытаюсь вызвать функцию, это всё и происходит
```1c
    Массив = ЗапросКонтейнеров(Элемент.Значение);
```
---
В какой строке ошибка?
---
Ошибку тут выдаёт:

```1c
    МассивКонтейнеры[Счетчик][0]=ВыборкаКонтейнеры.ТипОборудования;
```

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

```1c
    Запись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
```
---
Если так, то это значит, что у вас счетчик превысил допустимое значение.
Проблема 1. Нет ограничений на выборку и на количество результата:

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

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

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

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

По сути дела это даст вам количество строк в запросе равное количеству товара, если я ничего не путаю...
---
То может дело в том, что в табличной части этого документа у вас больше 6 строк?
На скриншоте показал, что там одна строчка только выходит.

Строку закомментил, но результат не изменился.

```1c
    //МассивКонтейнеры[5][5]=Счетчик;
```
---
сколько угодно по коду быть не может массив у вас макс 6 ограничьте выборку вам говорят

и еще меня в школе учили что массив может содержать только однотипные данные для разнотипных в 1с есть структура! согласен в школе учили неправильно)
---
Ограничил, выдало результат. Правда одну строку 5 раз продублировало.
---
повторюсь тут.

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

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

По сути дела это даст вам количество строк в запросе равное количеству товара, если я ничего не путаю...
---
Я ввожу номер документа, по нему он должен выдать контейнеры этого документа.
---
Вы связали 2 табличных части документа левым соединением, с условием отбора по документу. Это значит ровно следующее:

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

То ваш запрос вернёт вам 15 строк, при текущем условии
---
Вы правы, загвоздка была в том что 2 табличных части было. Связал с документом, и результат нужный получил. Благодарю за объяснение.
---
соединение с самим документом можно было не делать:

```1c
    "ВЫБРАТЬ
    | ПеремещениеТоваровПломбированиеТО.ТипОборудования,
    | ПеремещениеТоваровПломбированиеТО.НомерТО,
    | ПеремещениеТоваровПломбированиеТО.Замок,
    | ПеремещениеТоваровПломбированиеТО.Пломба1,
    | ПеремещениеТоваровПломбированиеТО.Пломба2
    |ИЗ
    | Документ.ПеремещениеТоваров.ПломбированиеТО КАК ПеремещениеТоваровПломбированиеТО
    |
    |ГДЕ
    | ПеремещениеТоваровПломбированиеТО.Ссылка = &Ссылка";
```
---
а не вызовет ли это ошибку, если у документа не будет контейнеров?
---
просто в цикл не войдет: запрос вернется пустой
---
причем тут номер документа и соединение с табличной частью товары?
Все верно озвучено. Убирайте левое соединение.
---
а не проще ли выгрузить результат запроса в ТЗ и тогда весь процесс отладки станет на порядок легче и не загонять в массив, а потом его "проганять"?
---
Надо посмотреть в отладчике чему равен счетчик в момент ошибки.
---
счётчик равен 5
---
Включите галочку "остановка по ошибке" и смотрите на счетчики