|   |   | 
| 
 | Обход результата запроса ПоГруппировкамСИерархией | ☑ | ||
|---|---|---|---|---|
| 0
    
        andrewks 20.11.11✎ 20:17 | 
        есть такая процедурка:
  Процедура ВыборкаПоГруппе(ТекВыб,Способ) инд=0; Пока ТекВыб.Следующий() Цикл Преф="Уровень: "+ТекВыб.Уровень(); инд=инд+1; ТипЗап=ТекВыб.ТипЗаписи(); Если (ТипЗап=ТипЗаписиЗапроса.ИтогПоГруппировке) ИЛИ (ТипЗап=ТипЗаписиЗапроса.ИтогПоИерархии) Тогда Преф=Преф+"; "+"ИТОГ ПО: "+ТекВыб.Группировка(); ИначеЕсли (ТипЗап=ТипЗаписиЗапроса.ОбщийИтог) Тогда Преф=Преф+"; "+"ОБЩИЙ ИТОГ: "; ИначеЕсли (ТипЗап=ТипЗаписиЗапроса.ДетальнаяЗапись) Тогда Преф=Преф+"; "+"Детальная запись: "; КонецЕсли; Сообщить(Преф+"; "+"№"+(инд)+": "+ТекВыб.Материал+Символы.Таб+ТекВыб.Накладная+Символы.Таб+ТекВыб.Склад+Символы.Таб+ТекВыб.Количество+Символы.Таб+ТекВыб.Сумма); ВыборкаПоГруппе(ТекВыб.Выбрать(Способ),Способ); КонецЦикла; КонецПроцедуры вызываю так: //ТипОбхода=ОбходРезультатаЗапроса.Прямой; ТипОбхода=ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; //ТипОбхода=ОбходРезультатаЗапроса.ПоГруппировкам; Выборка=РезЗапр.Выбрать(ТипОбхода); Сообщить("Выборка:"); ВыборкаПоГруппе(Выборка,ТипОбхода); никак не разберу, почему при способах Прямой и ПоГруппировкам всё выводится, как надо, а при ПоГруппировкамСИерархией происходит затык после вывода уровня выборки 1 (Следующий() возвращает Ложь)? где косяк? | |||
| 1
    
        andrewks 20.11.11✎ 21:48 | 
        есть мысли?     | |||
| 2
    
        Лефмихалыч 20.11.11✎ 21:54 | 
        в запрсе что?     | |||
| 3
    
        andrewks 20.11.11✎ 21:58 | 
        | select
  | ПрихНаклМат.Материал | ,ПрихНакл.Ссылка as Накладная | ,ПрихНакл.Склад | ,sum(ПрихНаклМат.Количество) | ,sum(ПрихНаклМат.Сумма) | from | Документ.ПриходнаяНакладная as ПрихНакл | right join | Документ.ПриходнаяНакладная.Материалы as ПрихНаклМат | on ПрихНакл.Ссылка=ПрихНаклМат.Ссылка | group by | ПрихНаклМат.Материал | ,ПрихНакл.Ссылка | order by | ПрихНаклМат.Материал | ,ПрихНакл.Ссылка | totals by | ПрихНаклМат.Материал hierarchy | |||
| 4
    
        Лефмихалыч 20.11.11✎ 22:24 | 
        нет идей...     | |||
| 5
    
        andrewks 20.11.11✎ 22:31 | 
        странно. код практически один в один как в ЖКК, там он приведён как рабочий именно для обхода ПоГруппировкамСИерархией 
  попробовал сейчас в файловой базе - то же самое | |||
| 6
    
        andrewks 20.11.11✎ 22:55 | 
        чё-то такое ощущение складывается, что в этом вопросе в ЖКК опять звиздёжь и провокация.
  куча тем в инете, но пока не нашёл ни одного внятного ответа по этому вопросу | |||
| 7
    
        andrewks 20.11.11✎ 23:06 | 
        v8: v8: Выборка с иерархией - как обойти иерархию ПоГруппировкамСИерархией
  нужно обязательно указывать название группировки. более того, до детальных записей при таком обходе спуститься не получается даже с таким указанием имени группировки, только с другими порядками обхода в документации наглая ложь | |||
| 8
    
        mikecool 20.11.11✎ 23:06 | 
        переделай на левое соединение запрос     | |||
| 9
    
        andrewks 20.11.11✎ 23:10 | 
        (8) это не влияет, тоже обходит не так, как заявлено разработчиками в документации
  причём тема с бородой, ветки аж с 2008 г. идут, и до сих пор никаких сдвигов, ни реализацию, ни документацию поправить не потрудились | |||
| 10
    
        andrewks 21.11.11✎ 09:52 | 
        короче, если универсально, то получается так:
  Процедура ВыборкаПоГруппе(ТекВыб,Способ) инд=0; Пока ТекВыб.Следующий() Цикл Преф="Уровень: "+ТекВыб.Уровень(); инд=инд+1; ТипЗап=ТекВыб.ТипЗаписи(); Если (ТипЗап=ТипЗаписиЗапроса.ИтогПоГруппировке) Тогда Преф=Преф+"; "+"ИТОГ ПО: "+ТекВыб.Группировка(); ИначеЕсли (ТипЗап=ТипЗаписиЗапроса.ИтогПоИерархии) Тогда Преф=Преф+"; "+"ИТОГ ПО ИЕРАРХИИ: "+ТекВыб.Группировка(); ИначеЕсли (ТипЗап=ТипЗаписиЗапроса.ОбщийИтог) Тогда Преф=Преф+"; "+"ОБЩИЙ ИТОГ: "; ИначеЕсли (ТипЗап=ТипЗаписиЗапроса.ДетальнаяЗапись) Тогда Преф=Преф+"; "+"Детальная запись: "; КонецЕсли; Сообщить(Преф+"; "+"№"+(инд)+": "+ТекВыб.Материал+Символы.Таб+ТекВыб.Накладная+Символы.Таб+ТекВыб.Склад+Символы.Таб+ТекВыб.Количество+Символы.Таб+ТекВыб.Сумма); Если (ТипЗап=ТипЗаписиЗапроса.ИтогПоИерархии) Тогда СледВыб=ТекВыб.Выбрать(Способ,ТекВыб.Группировка()); Иначе СледВыб=ТекВыб.Выбрать(Способ); КонецЕсли; ВыборкаПоГруппе(СледВыб,Способ); КонецЦикла; КонецПроцедуры | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |