|   |   | 
| 
 | Научиться использовать тип итогов ИЕРАРХИЯ | ☑ | ||
|---|---|---|---|---|
| 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) листинг из актуального электронного варианта на диске ИТС. отличие только в одной строчке: в книге: ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки)); на ИТС: ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки, Выборка.Группировка())); т.е. в электронном варианте свою явную ошибку они исправили (в примере из печатного варианта ЖКК обход завершается сразу на самом верхнем уровне иерархии), но всё равно данный обход не соответствует приведённому в примере дереву (обход до детальных записей так и не доходит) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |