Имя: Пароль:
1C
1С v8
ТаблицаЗначение в Дерево
,
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>
Закон Брукера: Даже маленькая практика стоит большой теории.