|
Научиться использовать тип итогов ИЕРАРХИЯ | ☑ | ||
---|---|---|---|---|
0
Rumus89
27.02.12
✎
16:54
|
Здрасти!!! Не могу понять в чем дело, вроде имеется простой запрос
ВЫБРАТЬ Номенклатура.Ссылка КАК Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура ИТОГИ ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ необходимо вывести элементы справочника со всеми вышестоящими группами, при обработке результатов запроса выводятся только элементы имеющие уровень вложенности 1 т.е есть группа A в ней эл1 эл2 эл3 они выводятся, а в случае если есть группа В в ней группа С эл1 эл2 группа D эл3 эл4 то эти элементы группы С и группы D не выводятся. Подскажите пожалуйста в чем может быть проблема? |
|||
1
el-gamberro
27.02.12
✎
16:58
|
(0) Звездишь?
|
|||
2
el-gamberro
27.02.12
✎
16:58
|
В условии только иерархия элементы не выводятся
|
|||
3
Mort
27.02.12
✎
16:59
|
а) Запрос плохой.
б) как обходишь покажи (2) элементы там есть и без итогов. |
|||
4
andrewks
27.02.12
✎
17:00
|
(0) э-э-э... а какие тут итоги?
(2) да ну! |
|||
5
Mort
27.02.12
✎
17:03
|
(4) Баранки гну.
Добавление итогов никак не влияет на присутствие элементов в изначальной выборке. А если обходить через заднее место, можно конечно и не только элементы потерять. |
|||
6
andrewks
27.02.12
✎
17:03
|
(5) ась?
|
|||
7
Rumus89
27.02.12
✎
17:04
|
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока Выборка.Следующий() Цикл Выборка2 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока Выборка2.Следующий() Цикл Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока Выборка3.Следующий() Цикл КонецЦикла; КонецЦикла; КонецЦикла; |
|||
8
Rumus89
27.02.12
✎
17:05
|
Мне просто интересно куда они пропадают?
|
|||
9
Mort
27.02.12
✎
17:05
|
(6) Сори, перепутал, думал (2) в (4) это к (3).
|
|||
10
andrewks
27.02.12
✎
17:05
|
нужно проверять на тип записи, и если не итоги, то использовать прямой обход
|
|||
11
Mort
27.02.12
✎
17:07
|
(8) А если количество уровней в иерархии не ограничено? ))
(0) Используй сортировку по иерархии. Или отбор ЭтоГруппа=ЛОжь + итоги только иерархия. |
|||
12
andrewks
27.02.12
✎
17:07
|
(7) и вообще, рекурсивно обходи
|
|||
13
Rumus89
27.02.12
✎
17:08
|
Спасибо, сейчас попробую!
|
|||
14
Rumus89
27.02.12
✎
17:08
|
Но мне и группы надо вывести..
|
|||
15
andrewks
27.02.12
✎
17:09
|
(14) а мы тебе не запрещали. выводи
|
|||
16
andrewks
27.02.12
✎
17:09
|
кстати, в ЖККшных и хелповских примерах - звиздёжь и провокация, не верь глазам своим
|
|||
17
Rumus89
27.02.12
✎
17:10
|
OK!! Не буду!!!
|
|||
18
Mort
27.02.12
✎
17:12
|
(16) Не увидел там ничего такого.
|
|||
19
andrewks
27.02.12
✎
17:16
|
||||
20
Rumus89
27.02.12
✎
17:19
|
Спасибо, думаю разберусь!
|
|||
21
Mort
27.02.12
✎
17:24
|
(19) Имхо все дело в кривизне запросов. Щас попробую повторить.
|
|||
22
andrewks
27.02.12
✎
17:24
|
(21) да не, проверено, описалово врёт. по крайней мере, для 8.2. (для 8.1 не проверял)
|
|||
23
Mort
27.02.12
✎
17:31
|
(22) Ну по запросу в (19) ясно, одной выборкой и иерархию и детали обходить система не будет. То что это криво описано в ЖК... Может быть, не встречал.
|
|||
24
andrewks
27.02.12
✎
17:41
|
(23) да даже в свежей редакции с диска ИТС:
Процедура ВыполнитьЗапрос() // Создадим запрос. Запрос = Новый Запрос; // Установим текст запроса Запрос.Текст = "ВЫБРАТЬ |РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, |РасходнаяНакладнаяСостав.Количество КАК Количество |ИЗ |Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав |УПОРЯДОЧИТЬ ПО |РасходнаяНакладнаяСостав.Номенклатура |ИТОГИ |СУММА(Количество) |ПО |Номенклатура ИЕРАРХИЯ"; // Выполним запрос и запишем результат в переменную // РезультатЗапроса. РезультатЗапроса = Запрос.Выполнить(); // Получим выборку из результата запроса. СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; Выборка = РезультатЗапроса.Выбрать(СпособВыборки); ВыдатьРекурсивно(Выборка); КонецПроцедуры Процедура ВыдатьРекурсивно(Выборка) // Пока в выборке есть записи ... Пока Выборка.Следующий() Цикл // ... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество = Выборка.Количество; Сообщить("Товар: " + Товар + " Количество: " + Количество); // Продолжим выборку подчиненных записей СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки, Выборка.Группировка())); КонецЦикла; КонецПроцедуры полный игнорёж типа записи, как следствие - болт |
|||
25
Mort
27.02.12
✎
17:53
|
(24) Здрасте. Тут полная иерархия с итогами по элементам, поэтому всё работает. А "детали" не обходятся за ненадобностью.
|
|||
26
Mort
27.02.12
✎
17:55
|
+(25) Поэтому в запросе (24) даже не делается группировка по номенклатуре - в итогах она итак сгруппирована. А вот если внутри выборки по иерархии обходить ещё и детали, можно докопаться до строчек, где номенклатура не уникальна.
|
|||
27
andrewks
27.02.12
✎
21:38
|
(25) Здрасьте. вообще-то, в ЖКК рассматривается конкретный пример, с конкретным набором данных и конкретным, описываемом результатом обхода, который иллюстрируется приведённым листингом.
в печатном варианте ЖКК для 8.2 листинг практически такой же, как и приведённый в (24) листинг из актуального электронного варианта на диске ИТС. отличие только в одной строчке: в книге: ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки)); на ИТС: ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки, Выборка.Группировка())); т.е. в электронном варианте свою явную ошибку они исправили (в примере из печатного варианта ЖКК обход завершается сразу на самом верхнем уровне иерархии), но всё равно данный обход не соответствует приведённому в примере дереву (обход до детальных записей так и не доходит) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |