|
ТаблицаЗначение в Дерево | ☑ | ||
---|---|---|---|---|
0
NeoVision
13.10.14
✎
11:59
|
Подскажите плз можно ли конвертировать таблицу значение типа
http://fotki.yandex.ru/users/neovision2011/view/1088533 в Дерево значений http://fotki.yandex.ru/next/users/neovision2011/album/454350/view/1088534 без перебора строк (построителем запроса)? |
|||
1
vicof
13.10.14
✎
12:00
|
"таблицу значение". Сильно. Внушает.
Передай свою "таблицу значение" в запрос, настрой итоги, выгрузи в дерево. |
|||
2
МихаилМ
13.10.14
✎
12:02
|
нет
|
|||
3
Fish
13.10.14
✎
12:02
|
Можно
|
|||
5
H A D G E H O G s
13.10.14
✎
12:06
|
(1) Плохо.
ТЗ в ДЗ конвертируется так: 1) ТЗ сортируется по колонкам группировки. 2) ТЗ обходится в цикле, как только текущее группировочное поле отличается от предыдущего - в ДЗ создается новая строка - родитель. |
|||
6
NeoVision
13.10.14
✎
12:09
|
(1)
Если делать так ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка1].Измерение = Истина; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка2].Измерение = Истина; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка1].Итог = "Максимум("+ГруппировкаКолонка1+")"; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка2].Итог = "Максимум("+ГруппировкаКолонка2+")"; то образуется лишний уровень группировки, вот как от него избавиться? |
|||
7
H A D G E H O G s
13.10.14
✎
12:09
|
Это делается так:
Пока Выборка.Следующий() Цикл Если ТекущийКонтрагент<>Выборка.Контрагент или ТекущийПунктРазгрузки<>Выборка.КонтрагентПунктРазгрузки Тогда ТекущийКонтрагент=Выборка.Контрагент; ТекущийПунктРазгрузки=Выборка.КонтрагентПунктРазгрузки; СтрокаКонтрагента=ДеревоДанных.Строки.Добавить(); КонецЕсли; СтрокаДетали=СтрокаКонтрагента.Строки.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаДетали,Выборка); КонецЦикла; |
|||
8
gae
13.10.14
✎
12:10
|
(7) А вот интересно, на больших объемах быстрее будет работать через запрос или "ручками"?
|
|||
9
H A D G E H O G s
13.10.14
✎
12:10
|
Естественно, у меня не ТЗ, а выборка, отсортированная по колонкам
Контрагент КонтрагентПунктРазгрузки |
|||
10
H A D G E H O G s
13.10.14
✎
12:11
|
(8) Ручками, если только источник данных - не выборка.
При этом, не всегда можно годно использовать ИТОГИ в запросе и часто тоже надо ручками. |
|||
12
NeoVision
13.10.14
✎
12:20
|
(10) у меня изначально таблица (из xml)
|
|||
13
H A D G E H O G s
13.10.14
✎
12:22
|
(11) Быстрее, быстрее, Нуф-Нуф.
Грузите SQL по максимуму, херли, у вас же тестово шустро работает, похер что будет на сотнях пользователей. |
|||
15
H A D G E H O G s
13.10.14
✎
12:28
|
(14) Этим можно оправдать любой лютокод.
|
|||
17
Chameleon1980
13.10.14
✎
12:44
|
нате - пользуйтесь:
&НаСервере Функция ЧтениеXMLВДерево(Путь) Дерево = Новый ДеревоЗначений; Дерево.Колонки.Добавить("Имя"); Дерево.Колонки.Добавить("Значение"); XMLФайл = Новый ЧтениеXML; XMLФайл.ОткрытьФайл(Путь); ПрочитатьXMLПоТегам(XMLФайл, Дерево.Строки); XMLФайл.Закрыть(); Возврат Дерево; КонецФункции //&НаСервереБезКонтекста Процедура ПрочитатьXMLПоТегам(XMLФайл, ТекущийНаборСтрок) Пока XMLФайл.Прочитать() Цикл Если XMLФайл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда НоваяСтрока = ТекущийНаборСтрок.Добавить(); НоваяСтрока.Имя = XMLФайл.Имя; НоваяСтрока.Значение = ""; Пока XMLФайл.ПрочитатьАтрибут() Цикл НоваяСтрокаАтрибут = НоваяСтрока.Строки.Добавить(); НоваяСтрокаАтрибут.Имя = XMLФайл.Имя; НоваяСтрокаАтрибут.Значение = СокрЛП(XMLФайл.Значение); КонецЦикла; ПрочитатьXMLПоТегам(XMLФайл, НоваяСтрока.Строки); ИначеЕсли XMLФайл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Возврат; ИначеЕсли XMLФайл.ТипУзла = ТипУзлаXML.Текст Тогда ТекущийНаборСтрок.Родитель.Значение = СокрЛП(XMLФайл.Значение); Иначе Сообщить("Тип узла: " + XMLФайл.ТипУзла + " НЕ ОБРАБОТАН", СтатусСообщения.Важное); Конецесли; КонецЦикла; КонецПроцедуры |
|||
18
NeoVision
13.10.14
✎
12:53
|
(17) не, это совсем из другой оперы, у меня xml плоский и разбирается через XPath
|
|||
19
Chameleon1980
13.10.14
✎
12:55
|
а дай свой хмл. с чего взял, что не взлетит? попробуй
|
|||
20
MaxS
13.10.14
✎
12:57
|
Таблицу загрузить в запрос и выгрузить из запроса в дерево, в тексте запроса должен быть итог по полям.
|
|||
21
NeoVision
13.10.14
✎
12:58
|
(18) типа такого
<?xml version="1.0" encoding="UTF-8"?> <Database><DataSource1><PTSNO>3</PTSNO><PTSSERIA>63</PTSSERIA></DataSource1> <DataSource2>...</DataSource2> </Database> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |