Имя: Пароль:
1C
1С v8
Индекс находится за границами массива (внешний отчет)
0 Arturec05
 
26.12.20
12:01
Добрый день. Разрабатывал отчет для просмотра продаж с отображением цен по накладной и по прайсу, чтоб увидеть разницу.
Возникла ошибка в следующем куске кода:

    РезультатЗапроса = Запрос.Выполнить();    
    ТабЦен = РезультатЗапроса.Выгрузить();
    ТабЦен.Сортировать("Цена ВОЗР");
    СтаршийИндекс = ТабЦен.Количество() - 1;
    Если ЦенаТовара >= ТабЦен[СтаршийИндекс].Цена Тогда
        НужныйТипЦен = ТабЦен[СтаршийИндекс].ТипЦен;
        НужнаяЦена = ТабЦен[СтаршийИндекс].Цена;
        Отклонение = ТабЦен[СтаршийИндекс].Цена - ЦенаТовара;
    Иначе ...

При отладке получил следующие значения:
ТабЦен.Количество() - 7
СтаршийИндекс - 6
ТабЦен[СтаршийИндекс].Цена - 8 000    
ЦенаТовара - 7 500

Вроде бы все правильно, не могу понять на что ругается.
Конфигурация 1с управление торговлей 10.3.28.1
Платформа 1С:Предприятие 8.3 (8.3.13.1865)
1 PR
 
26.12.20
12:05
Держи нас в курсе
2 Kassern
 
26.12.20
12:06
А в запросе все сделать не судьба?
3 Kassern
 
26.12.20
12:09
(0) Вроде и в ошибке все по русски расписано, из-за чего происходит. Значит у тебя в каком то случае идет обращение к индексу за гранью массива. Например при ТабЦен.Количество()=0 ты получишь такую ошибку 100%
4 Arturec05
 
26.12.20
12:17
(3) в шапке показал результаты которые были прям перед появлением ошибки, за границы массива не выхожу
5 Arturec05
 
26.12.20
12:18
оишбка выходит в строке Если ЦенаТовара >= ТабЦен[СтаршийИндекс].Цена Тогда
6 Kassern
 
26.12.20
12:31
(5) чудес не бывает, прям в отладке напиши ТабЦен[6], где ТабЦен имеет 7 элементов и посмотри, что тебе напишет
7 Галахад
 
гуру
26.12.20
12:38
(0) Отсортируй по убыванию, и вычисляй "Младший индекс". :)
8 Arturec05
 
26.12.20
12:45
(3) Проблему нашел, оказалось в товаре у которого на указанную дату не было цен. Спасибо за наводку