Имя: Пароль:
1C
1С v8
Вывести дерево значений на форму
0 abda123
 
24.08.15
06:15
Доброго времени суток. Подскажите как вывести на форму результат запроса в виде дерева.
1 abda123
 
24.08.15
06:18
Вот как делаю. Добавил на форму табличное поле, тип дерево значений.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    КМРейсНаОтправку.Ссылка.Маршрут КАК Маршрут,
|    КМРейсНаОтправку.Ссылка.Фура КАК Фура,
|    КМРейсНаОтправку.Город КАК Город,
|    КМРейсНаОтправку.Ссылка,
|    КМРейсНаОтправку.КоличествоМест КАК КоличествоМест,
|    КМРейсНаОтправку.ВесПосылки КАК ВесПосылки,
|    КМРейсНаОтправку.Ссылка.ВремяЗагрузки
|ИЗ
|    Документ.КМРейс.НаОтправку КАК КМРейсНаОтправку
|ИТОГИ
|    СУММА(КоличествоМест),
|    СУММА(ВесПосылки)
|ПО
|    Маршрут,
|    Фура,
|    Город";
Дерево =
Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).Скопировать();
2 abda123
 
24.08.15
06:19
На форме в дерево значений добавил колонки, с таким же наименованием и типом как поля запроса, но он выдает только одну строку, итоговую.
3 abda123
 
24.08.15
06:26
В консоли запросов, выбираешь способ выгрузки "Дерево" и он выдает результат в виде дерева. Вот также надо вывести на форму.
4 abda123
 
24.08.15
06:33
Добавил группировки в запрос, не помогло.
5 abda123
 
24.08.15
06:37
Платформа 8.2.
6 kosts
 
24.08.15
06:41
Делай не выгрузку, а вложенные переборы и заполняй дерево.
типа так

Пока Выборка1.Следующий() Цикл
    Выборка2 = Выборка1.Выбрать();
    Пока Выборка2.Следующий() Цикл
        Выборка3 = Выборка1.Выбрать();
        Пока Выборка3.Следующий() Цикл
        КонецЦикла;
    КонецЦикла;
КонецЦикла;
7 abda123
 
24.08.15
06:45
Ясно, спасибо. Жаль нельзя сразу напрямую вывести результат запроса на форму, по моему в динамических списках можно сразу результат запроса выводить.
8 kosts
 
24.08.15
06:46
поправил

        Выборка3 = Выборка2.Выбрать();
9 abda123
 
24.08.15
06:49
(8) а какой тип обхода результата запроса выставлять при выгрузке?
10 kosts
 
24.08.15
06:50
Такой же
11 abda123
 
24.08.15
06:57
(10) а сворачивание по уровням, при таком методе будет, или он просто все строки списком будет показывать?
12 kosts
 
24.08.15
07:03
(11) Какое же это дерево будет, если списком сделаешь...
13 kosts
 
24.08.15
07:07
(0) Вот это зачем?
.Скопировать()
14 kosts
 
24.08.15
07:09
(0) Проверь, что ты выбрал нужный тип списка на форме - дерево. Возможно дерево и построилось, только плюсиков нету.
15 abda123
 
24.08.15
07:11
(14) На форме добавлено табличное поле с типом "Дерево значений". Туда добавлены колонки с именем и типом совпадающие с полями запроса.
16 kosts
 
24.08.15
07:14
Вообще метод из (0) в принципе рабочий, только "Выгрузка" в это дерево вызывает разрыв элемента на форме и данных.

После выгрузки надо делать ЭлементыФормы.Дерево.СоздатьКолонки();

По этому если колонки надо настраивать заранее, то надо обходить и заполнять дерево циклом.
17 patria0muerte
 
24.08.15
07:17
(16) Так можно же сразу в данные выгружать. А данные объявить уже как реквизит формы.

СоздатьКолонки() вызывать не обязательно, но для самой левой колонки вроде нужно установить ОтображатьИерархию. Тогда дерево будет раскрываться
18 kosts
 
24.08.15
07:19


Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл
    СтрокаДерева1 = Дерево.Строки.Добавить();
    СтрокаДерева1.Колонка1 = Выборка.Колонка1;
    ВыборкаДетали = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаДетали.Следующий() Цикл
        СтрокаДерева2 = СтрокаДерева1.Строки.Добавить();
        СтрокаДерева2.Колонка1 = ВыборкаДетали.Колонка1;
    КонецЦикла;
КонецЦикла;

19 abda123
 
24.08.15
07:21
(18) Т.е. колонки изначально создавать не нужно на форме?
20 kosts
 
24.08.15
07:24
(19) Можно не создавать, если автоматическое создание устроит.
Если создаешь, тогда уж нужно следить, что бы не пропадали.
21 patria0muerte
 
24.08.15
07:25
(19) Твой метод из (0) должен работать, только отображать иерархию у одной колонки поставь и пропиши после выгрузки разворачивание дерева, если необходимо

(20) +1
22 abda123
 
24.08.15
07:30
Поподробней можете объяснить. Поясняю что есть, у меня есть обработка АРМ Оператора в транспортной компании. На форме есть панель из 3-х страниц.На 3 страницея хочу чтобы отображалась  информация по загружаемым фурам на отправку, согласно запросу.  Надо ли создать табличную часть, с соответствующими реквизитами и ее кинуть на форму и программно заполнять ее результатом запроса?
Или создать на форме просто табличное поле с типом дерево и его заполнять. В этом случае колонки налдо создавать заранее или при формировании дерева их создавать?
23 kosts
 
24.08.15
07:30
(18) блин в одном и том же месте косячу... так надо тогда

ВыборкаДетали = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
24 kosts
 
24.08.15
07:32
(22) И так и так можно. На твое усмотрение. Я предпочитаю красиво всё заранее на форме настроить и потом заполнить построчно.
25 patria0muerte
 
24.08.15
07:35
(22)
1) Создаешь реквизиты формы "Дерево", с типом дерево значений
2) Создаешь и размещаешь табличное поле на форме. В данных указываешь "Дерево"
3) В табличном поле создаешь колонки. У колонки "Маршрут" (в твоем случае) устанавливаешь ОтображатьИерархию = Истина
4) Выполняешь свой запрос из (0)
5) Пишешь для красоты что-то типа ;

Для каждого СтрокаДерева Из Дерево.Строки Цикл
ЭлементыФормы.Дерево.Развернуть(СтрокаДерева, Истина);
КонецЦикла;

Вот и вся любовь
26 abda123
 
24.08.15
07:37
(25) ок, спс)) сейчас попробую..
27 patria0muerte
 
24.08.15
07:38
+(25) *4) Запрос из (1), разумеется включая строчку

Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
28 abda123
 
24.08.15
07:41
(27) скопировать не использовать? Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).Скопировать();
29 kosts
 
24.08.15
07:42
(28) лишнее
30 patria0muerte
 
24.08.15
07:42
(27) А зачем? У тебя и так и так дерево значений, только при скопировать() ты лишнюю операцию выполняешь.
31 abda123
 
24.08.15
07:43
Заработало! Все спасибо. Получается единственное что нужно было, это отображать иерархию в истина поставить)
32 abda123
 
24.08.15
07:43
(30) Да и скпоировать лишнее.
33 patria0muerte
 
24.08.15
07:45
(31) Да, так и есть. Сначала тоже долго не мог понять в чем суть. )
2 + 2 = 3.9999999999999999999999999999999...