|
построение дерева | ☑ | ||
---|---|---|---|---|
0
djekting
17.06.13
✎
08:48
|
Начал разбираться с построением дерева, непонимаю в чем затык, происходит зацикливание и конфа закрывается... может кто подскажит в чем трабла...
&НаКлиенте Процедура СписокСборокПриАктивизацииСтроки(Элемент) ТекСтрока = Элементы.СписокСборок.ТекущаяСтрока; ДеревоВПодбореНаСервере(ТекСтрока); КонецПроцедуры &НаСервере Процедура ДеревоВПодбореНаСервере(Ссылка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СборкаТабличнаяЧасть.Ссылка, | СборкаТабличнаяЧасть.НомерСтроки, | СборкаТабличнаяЧасть.Наименование, | СборкаТабличнаяЧасть.Родитель, | СборкаТабличнаяЧасть.IDСтроки |ИЗ | Документ.Сборка.ТабличнаяЧасть КАК СборкаТабличнаяЧасть |ГДЕ | СборкаТабличнаяЧасть.Ссылка В(&Ссылка)"; Запрос.Параметры.Вставить("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Дерево = ДеревоЗПодбор.ПолучитьЭлементы(); Дерево.Очистить(); ТаблицаСвязей = Новый ТаблицаЗначений; ТаблицаСвязей.Колонки.Добавить("IDСтроки"); ТаблицаСвязей.Колонки.Добавить("ИдентификаторСтрокиДерева"); Для НомерСт=0 По ВыборкаДетальныеЗаписи.Количество()-1 Цикл Ст = ВыборкаДетальныеЗаписи.Получить(НомерСт); НайдУзел = ТаблицаСвязей.Найти(Ст.Родитель, "IDСтроки"); Если НайдУзел = Неопределено Тогда СтрокаДерева = Дерево.Добавить(); Иначе Родитель = ДеревоЗПодбор.НайтиПоИдентификатору(НайдУзел.ИдентификаторСтрокиДерева); ЭлементыРодителя = Родитель.ПолучитьЭлементы(); СтрокаДерева = ЭлементыРодителя.Добавить(); Конецесли; СтрокаДерева.Узел = Ст.Наименование; СтрокаДерева.IDСтроки = Ст.IDСтроки; НоваяСтрокаСвязи = ТаблицаСвязей.Добавить(); НоваяСтрокаСвязи.IDСтроки = Ст.IDСтроки; НоваяСтрокаСвязи.ИдентификаторСтрокиДерева = СтрокаДерева.ПолучитьИдентификатор(); КонецЦикла; КонецПроцедуры |
|||
1
mikecool
17.06.13
✎
08:49
|
происходит зацикливание и конфа закрывается...- дохера памяти использует и процесс падает
|
|||
2
Wobland
17.06.13
✎
08:50
|
а мы не хотим итоги заюзать для строительства дерева?
|
|||
3
vmv
17.06.13
✎
08:50
|
тут проблема
Если НайдУзел = Неопределено Тогда СтрокаДерева = Дерево.Добавить(); Иначе Родитель = ДеревоЗПодбор.НайтиПоИдентификатору(НайдУзел.ИдентификаторСтрокиДерева); ЭлементыРодителя = Родитель.ПолучитьЭлементы(); СтрокаДерева = ЭлементыРодителя.Добавить(); Конецесли; дальше сам |
|||
4
djekting
17.06.13
✎
08:54
|
падает на этой строке
Ст = ВыборкаДетальныеЗаписи.Получить(НомерСт); |
|||
5
djekting
17.06.13
✎
08:55
|
все что ниже вообще закоментил
|
|||
6
kosts
17.06.13
✎
08:58
|
Переделай на УФ |
|||
7
Бледно Золотистый
17.06.13
✎
09:00
|
Зуб даю -1 строку получить пытаешься
|
|||
8
djekting
17.06.13
✎
09:05
|
(7) НомерСт -- 0
ВыборкаДетальныеЗаписи.Количество()-1 -- 8 щас в отладчике посмотрел пробовал так Ст = ВыборкаДетальныеЗаписи.Получить(НомерСт+1); Ст = ВыборкаДетальныеЗаписи.Получить(НомерСт-1); безразницы. всеравно вылетает |
|||
9
djekting
17.06.13
✎
09:09
|
Ст - индекс не присваивается - в отладчике пишет (Неопределено)
|
|||
10
kosts
17.06.13
✎
09:21
|
(9) Читай в СП про <Индекс>. По факту получаешь значение реквизита (например Ссылки), а не конкретную строку.
Строки выборки получают через Следующий() [СП] ВыборкаИзРезультатаЗапроса (QueryResultSelection) Получить (Get) Синтаксис: Получить(<Индекс>) Параметры: <Индекс> (обязательный) Тип: Число. Индекс поля выборки. Возвращаемое значение: Тип: Произвольный. Описание: Получает значение по индексу. Работает аналогично оператору []. [/СП] |
|||
11
ScreamSaw
17.06.13
✎
09:29
|
Если надо обращаться к строкам по индексу, лучше сделать так:
тзДетальныеЗаписи = Запрос.Выполнить().Выгрузить(); Для НомерСт=0 По тзДетальныеЗаписи.Количество() - 1 Цикл Ст = тзДетальныеЗаписи[НомерСт]; ///// КонецЦикла; |
|||
12
djekting
17.06.13
✎
09:55
|
(10) kosts спс, затупил с утра
решение Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НайдУзел = ТаблицаСвязей.Найти(ВыборкаДетальныеЗаписи.Родитель, "IDСтроки"); Если НайдУзел = Неопределено Тогда СтрокаДерева = Дерево.Добавить(); Иначе Родитель = ДеревоЗПодбор.НайтиПоИдентификатору(НайдУзел.ИдентификаторСтрокиДерева); ЭлементыРодителя = Родитель.ПолучитьЭлементы(); СтрокаДерева = ЭлементыРодителя.Добавить(); Конецесли; СтрокаДерева.Узел = ВыборкаДетальныеЗаписи.Наименование; СтрокаДерева.IDСтроки = ВыборкаДетальныеЗаписи.IDСтроки; НоваяСтрокаСвязи = ТаблицаСвязей.Добавить(); НоваяСтрокаСвязи.IDСтроки = ВыборкаДетальныеЗаписи.IDСтроки; НоваяСтрокаСвязи.ИдентификаторСтрокиДерева = СтрокаДерева.ПолучитьИдентификатор(); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |