|
Не обходит выборку по иерархии. | ☑ | ||
---|---|---|---|---|
0
batmansoft
15.07.14
✎
19:09
|
Добрый день. Подскажите пожалуйста, почему вот в такой программе:
Процедура ВыгрузитьНаСервере() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура.Наименование, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.Характеристика, | ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток, | ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.( | Ссылка КАК Поле1, | НомерСтроки КАК Поле2, | Свойство КАК Поле3, | Значение КАК Поле4, | ТекстоваяСтрока КАК Поле5 | ) КАК Реквизиты |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &Дата, | &ПоВсей | ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки |ИТОГИ ПО | Номенклатура ИЕРАРХИЯ" ; Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки); Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре); Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре)); Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ОбходЗапроса(Выборка); КонецПроцедуры Процедура ОбходЗапроса(Выборка) Пока Выборка.Следующий() Цикл сообщить(Выборка.Номенклатура); ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ОбходЗапроса(ВыборкаНиже); КонецЦикла; КонецПроцедуры Выборка идет только до первого уровня, хотя в справочнике Номенклатуры есть и более низкие уровни? |
|||
1
mistеr
15.07.14
✎
19:12
|
(0) Элементы от групп не отличаешь?
|
|||
2
batmansoft
15.07.14
✎
19:14
|
(1) Отличаю. В группе есть подгруппы. И их почему то не выводит.
|
|||
3
Мимохожий Однако
15.07.14
✎
19:27
|
Убери для начала
"| &ПоВсей | ИЛИ |
|||
4
batmansoft
15.07.14
✎
19:52
|
(3) Тоже самое
|
|||
5
alle68
15.07.14
✎
19:55
|
У метода "Выбрать" не хватает 2-го параметра.
|
|||
6
Птица
15.07.14
✎
19:56
|
(0) избыточное употребление иерархии
- или из запроса убери ИЕРАРХИЯ - или обход запроса делай не по ПоГруппировкамСИерархией, а по ПоГруппировкам |
|||
7
batmansoft
15.07.14
✎
19:56
|
Если сделать вот так:
Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией ОбходЗапроса(Выборка); КонецПроцедуры Процедура ОбходЗапроса(Выборка) Пока Выборка.Следующий() Цикл сообщить(Выборка.Номенклатура); ВыборкаНиже=Выборка.Выбрать(); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией ОбходЗапроса(ВыборкаНиже); КонецЦикла; КонецПроцедуры то почему то работает. |
|||
8
batmansoft
15.07.14
✎
19:59
|
(6) Тоесть, это получается, что можно двумя способами получить иерархию? Либо через итоги, либо через выборку, та что ли?
|
|||
9
Птица
15.07.14
✎
20:00
|
(8) угу
|
|||
10
batmansoft
15.07.14
✎
20:34
|
еще подскажите пожалуйста, почему не попадает на самый нижний уровень (там где характеристики), когда я сделал вот так:
Процедура ВыгрузитьНаСервере() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура.Наименование, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.Характеристика, | ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток, | ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.( | Ссылка КАК Ссылка, | Свойство КАК Свойство, | Значение КАК Значение | ) КАК Реквизиты, | ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа КАК ЭтоГруппа |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &Дата, | &ПоВсей | ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки |ИТОГИ ПО | Номенклатура ИЕРАРХИЯ" ; Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки); Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре); Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре)); //Объект.ТЗ=Запрос.Выполнить().Выгрузить(); Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией ОбходЗапроса(Выборка); КонецПроцедуры Процедура ОбходЗапроса(Выборка) Пока Выборка.Следующий() Цикл сообщить(строка(Выборка.Номенклатура)+" "+строка(Выборка.ЭтоГруппа)); Если Выборка.ЭтоГруппа Тогда ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНиже.Следующий() Цикл сообщить("Характеристика "+строка(ВыборкаНиже.Характеристика)); КонецЦикла; иначе ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией ОбходЗапроса(ВыборкаНиже); КонецЕсли; КонецЦикла; КонецПроцедуры Остатки по характеристикам есть. |
|||
11
batmansoft
15.07.14
✎
20:36
|
О, блин, пародн.
Надо Если НЕ Выборка.ЭтоГруппа Тогда сосем заработлася |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |