|
Ошибка впри обработке таблицы значений | ☑ | ||
---|---|---|---|---|
0
Nysha1210
25.12.18
✎
22:57
|
Всем привет. Задача - нужно результат запроса перебросить в таблицу значений с неизвестным количеством колонок (кол-во колонок вычисляется программно для каждого запроса). Процедура полностью работает, но только при переходе к записи последней колонки - выдаёт ошибку, что превышен лимит ((((( Прошу помощи. Спасибо
ТекЗаказ = ЭлементыФормы.Список.ТекущаяСтрока; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекЗаказ",ТекЗаказ); Запрос.Текст = "ВЫБРАТЬ | ИзмТЧЗак.Период, | ИзмТЧЗак.Заказ, | ИзмТЧЗак.Номенклатура, | ИзмТЧЗак.Автор, | ИзмТЧЗак.Количество, | ИзмТЧЗак.Цена, | ИзмТЧЗак.Сумма, | ИзмТЧЗак.Операция |ИЗ | РегистрСведений.ИзмТЧЗак КАК ИзмТЧЗак |ГДЕ | ИзмТЧЗак.Заказ = &ТекЗаказ"; ЗапросЗ = Запрос.Выполнить().Выгрузить(); Сообщить(ЗапросЗ.Количество()); ТабШапка= новый ТаблицаЗначений; ТабШапка = ЗапросЗ.Скопировать(,"Период,Автор,Операция"); ТабШапка.Свернуть("Период,Автор,Операция",); Сообщить(ТабШапка.Количество()); ТабЗн = новый ТаблицаЗначений; ТабЗн.Колонки.Добавить(); ТекКол=2; Для каждого ТабШапкаСтрока из ТабШапка цикл Контроль=1; ТекОпер=ТабШапкаСтрока.Операция; Для каждого ТабСтрока из ЗапросЗ цикл Если ТабСтрока.Операция = ТекОпер и Контроль=1 тогда ТабЗн.Колонки.Добавить(); ТабЗн.Колонки.Добавить(); ТабЗн.Колонки.Добавить(); Сообщить(ТабЗн.Колонки.Количество()); ТекСтр = ТабЗн.Добавить(); ТекСтр.Установить(1,ТабСтрока.Номенклатура); ТекСтр.Установить(ТекКол,ТабСтрока.Количество); ТекКол=ТекКол+1; ТекСтр.Установить(ТекКол,ТабСтрока.Цена); ТекКол=ТекКол+1; ТекСтр.Установить(ТекКол,ТабСтрока.Сумма); Сообщить(ТабЗн.Количество()); КонецЕсли; КонецЦикла; КонецЦикла; |
|||
1
Nysha1210
25.12.18
✎
23:00
|
{Документ.ЗаказПокупателя.Форма.ФормаСписка.Форма(221)}: Error calling context method (Установить)
ТекСтр.Установить(ТекКол,ТабСтрока.Сумма); because: Index value exceeds range limits |
|||
2
Franchiser
гуру
25.12.18
✎
23:05
|
Колонки таблицы значений нумеруются с 0 по (количество колонок) - 1.
Ошибка означает, что нет такого номера колонки. |
|||
3
palsergeich
25.12.18
✎
23:06
|
А зачем используете Установить?
Не проще Сделать массив имен колонок? И воспользоваться чем то типо такого Если МассивКолонок.Найти(ТекКол)<> Неопределено Тогда ТекСтр[ТекКол] = чемуТоТам; КонецЕсли |
|||
4
palsergeich
25.12.18
✎
23:09
|
А если честно - мне в принципе представленный код не нравится, я бы сделал его раза в 3 короче и понятнее(((
|
|||
5
Nysha1210
25.12.18
✎
23:11
|
Не использую массив, потому что потом данную таблицу нужно будет свернуть, отсортировать, просумировать часть колонок. С таблицей это проще. Спасибо, с нумерацией попробую разобраться.
|
|||
6
Nysha1210
25.12.18
✎
23:12
|
Если можете помочь, буду рада. Это первая проба (((
|
|||
7
palsergeich
25.12.18
✎
23:15
|
(5) Массив - это всего лишь дополнительная абстракция, которая в моей реализации - те колонки, которые должны быть в итоговой таблице.
|
|||
8
Nysha1210
25.12.18
✎
23:19
|
Ок, спасибо за идеи. Я попробую.
|
|||
9
Franchiser
гуру
25.12.18
✎
23:35
|
Никто такой код в 8ке уже не пишет: использование ТЗ считается плохим тоном.
Открой для себя Итоги в запросе, временные таблицы, метод ЗаполнитьЗначенияСвойств(). |
|||
10
Nysha1210
25.12.18
✎
23:52
|
Спасибо. Буду учиться.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |