|
Не работает выборка из запроса | ☑ | ||
---|---|---|---|---|
0
Invis91
02.05.12
✎
01:51
|
Всем привет. Возникла следующая проблема, сломал голову уже себе, имеется результат запроса(с иерархией), вида:
-Вентиляция -Кондиционирование -Кондиционер1 -Кондиционер2 -Холодильное оборудование -Холод -Кондиционер3 Ну собственно делаю выборку: РезультатЗапроса = Запрос.Выполнить(); ВыборкаРаздела = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаРаздела.Следующий() Цикл //выбирается первый уровень иерархии "Вентиляция" //тут какие-то действия ВыборкаПодраздела = ВыборкаРаздела.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаПодраздела.Следующий() Цикл //снова какие-то действия КонецЦикла; КонецЦикла; И вся проблема в том, что когда я выбираю первый уровень иерархии (ВыборкаРаздела), то все благополучно выбирается, но вот ВыборкаПодраздела.Следующий() сразу же возвращает Ложь и выкидывает из цикла, то есть "Кондиционирование" я выбрать никак не могу. В чем может быть проблема? |
|||
1
Злобный Фей
02.05.12
✎
02:19
|
Запрос давай
|
|||
2
Invis91
02.05.12
✎
02:33
|
ВЫБРАТЬ
НоменклатураРазделыНоменклатуры.РазделНоменклатуры КАК Раздел, НоменклатураРазделыНоменклатуры.Ссылка КАК Номенклатура ИЗ Справочник.Номенклатура.РазделыНоменклатуры КАК НоменклатураРазделыНоменклатуры ГДЕ НоменклатураРазделыНоменклатуры.Ссылка В (&Номенклатура) ИТОГИ ПО Раздел ИЕРАРХИЯ Тут конечно получается чуть не так, как я написал, а именно: Раздел | Номенклатура --------------------------------------- -Вентиляция | -Кондиционирование | -Кондиционирование |Кондиционер1 -Кондиционирование |Кондиционер2 -Холодильное оборудование| -Холод | -Холод |Кондиционер3 Но смысл вопроса из-за этого, я думаю, не меняется. |
|||
3
Invis91
02.05.12
✎
02:35
|
Блин, криво отобразилось, вобщем так:
-Вентиляция -Кондиционирование -Кондиционирование Кондиционер1 -Кондиционирование Кондиционер2 -Холодильное оборудование -Холод -Холод Кондиционер3 |
|||
4
golden-pack
02.05.12
✎
05:16
|
Отчет ?
|
|||
5
catena
02.05.12
✎
06:47
|
А так?
ВыборкаПодраздела = ВыборкаРаздела.Выбрать(); |
|||
6
Crongwild
02.05.12
✎
09:48
|
Обход нужен по иерархии, а иерархия в разных группах справочника может иметь разные уровни.
Например, в Вентиляции может быть два уровня вложенности - нужны два вложенных цикла, а если в ХО, например, один уровень - нужен один вложенный цикл. Соответственно, выход в рекурсивном обходе. |
|||
7
ptrtss
02.05.12
✎
09:49
|
Надо указывать имя группировки, чтобы на уровень ниже автоматом не спускалось
Если вид группировки по иерархии, то еще выборка по номенклатуре (кажется там номенклатура у вас), если не по иерархии - то по следующей группировке |
|||
8
ptrtss
02.05.12
✎
09:51
|
А можно еще проще. Обход поставить по группировкам, тогда все итоги по иерархии будут выводиться на одно уровне, в одном цикле. Уровень для сдвигов в печатной форме все равно будет доступен
|
|||
9
Invis91
02.05.12
✎
14:09
|
Просто смысл в том, чтобы в табличном поле(дерево) вывести результат запроса в иерархии, а так как в самом запросе иерархия имеется только между разделами и подразделами(прим. Вентиляция - Кондиционирование), а между подразделом и номенклатурой(прим. Кондиционирование - Кондиционер1) иерархии нет, а надо чтобы она была, поэтому и приходится Дерево Значений заполнять в цикле, то есть сначала заполняю Вентиляцию, потом перехожу на уровень ниже - Кондиционирование(вот тут как раз и не могу перейти), затем перехожу еще на уровень ниже и уже вручную добавляю номенклатуру как потомка "Кондиционирования".
Вот примерный код: РезультатЗапроса = Запрос.Выполнить(); ВыборкаРаздела = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаРаздела.Следующий() Цикл //выбирается первый уровень иерархии "Вентиляция" СтрокаРаздела = Дерево.Строки.Добавить(); СтрокаРаздела.Номенклатура = ВыборкаРаздела.Раздел; ВыборкаПодраздела = ВыборкаРаздела.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаПодраздела.Следующий() Цикл СтрокаПодраздела = СтрокаРаздела.Строки.Добавить(); СтрокаПодраздела.Номенклатура = ВыьоркаПодраздела.Раздел; //ну и аналогично для кондиционеров СтрокаНоменклатуры = СтрокаПодраздела.Строки.Добавить() и т.д. КонецЦикла; КонецЦикла; |
|||
10
Invis91
02.05.12
✎
14:17
|
(6) Нет, везде одинаковый уровень вложенности, Раздел(прим. Вентилляция) и Подраздел (прим.Кондиционирование) - я беру из справочника РазделыНоменклатуры(справочник соответсвенно иерархический, иерархия элементов)
Вот сам справочник, пока особо не заполненный, в нем всегда только 2 уровня иерархии: -Вентилляция -Кондиционирование -Холодильное оборудование -Холод -Электрика |
|||
11
Invis91
02.05.12
✎
14:26
|
И причем самое странное, что Вентиляция и Кондиционирование, находятся в простой иерархии, никакой лишней вложенности, и я вообще без понятия, почему не работает обход, бред какой-то.
|
|||
12
hhhh
02.05.12
✎
15:06
|
(11) ну у вас же одна группировка. Наверно, и разделы и подразделы находятся в одной выборке: Выборка. Другой группировки в итогах нет.
|
|||
13
Invis91
02.05.12
✎
15:30
|
(12) Нет, в Выборке(ВыборкаРазделов) находятся только Разделы.
(6) - Спасибо, помогло. Надо было лишь указать имя группировки во второй выборке. Вот работающее решение: РезультатЗапроса = Запрос.Выполнить(); ВыборкаРаздела = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаРаздела.Следующий() Цикл //выбирается первый уровень иерархии "Вентиляция" //тут какие-то действия ВыборкаПодраздела = ВыборкаРаздела.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией,"Раздел"); Пока ВыборкаПодраздела.Следующий() Цикл //снова какие-то действия КонецЦикла; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |