Имя: Пароль:
1C
1С v8
Запрос иерархия
,
0 Михей
 
21.03.12
18:02
Хеллоу.  

Никак не могу сообразить, есть запрос:

ВЫБРАТЬ
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Номенклатура,
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ХарактеристикаНоменклатуры,
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Цена КАК Цена,
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Количество КАК Количество,
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ВалютаЦены,
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ЕдиницаИзмерения
ИЗ
   РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(
           &Дата,
           ДоговорКонтрагента = &ДоговорКонтрагента
               И Номенклатура В ИЕРАРХИИ (&МассивНоменклатуры)) КАК УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре
ГДЕ
   УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.Цена <> 0



В этом запросе поле Номенклатура может быть группой. Необходимо на выходе получить результат развернутый до элементов.

Спасибо!
1 Axel2009
 
21.03.12
18:02
а что не работает то?
2 Михей
 
21.03.12
18:07
ну как бы в таком виде он не подходит, думаю что и не получится это запросом, онле обработка результата
3 palpetrovich
 
21.03.12
18:11
(0) а какие могут быть у группы Цена, Количество? типа в группе 10 элементов, всего остаток 8 - кому ты это количество отдашь при развертывании? ...или я чего-то не понимаю или однно из двух :)
4 palpetrovich
 
21.03.12
18:15
+3 а, РегистрСведений, недочитал  :)
5 Михей
 
21.03.12
18:16
(3) ну так сделано, например на группу "Туфли" идет цена 100 руб., значит каждый элемент этой группы стоит 100 руб., правда нужно учесть еще приоритеты, если есть вложенные группы
6 Axel2009
 
21.03.12
18:17
ну и? каков алгоритм?
7 palpetrovich
 
21.03.12
18:21
как вариант - проверяй в выборке, если группа - запрос к этой группе и выводи этот результата с кво и ценами из первого :)
8 Кокос
 
21.03.12
18:22
ИТОГИ ПО юзай.
9 Михей
 
21.03.12
18:23
Пример, справочник Номенклатуры:

Туфли
 - Мужские
   - 45 размер
   - 46 размер
 - Женские
   - 36 размер
   - 37 размер

В регистре информация хранится в таком виде:

Товар:         Цена:
Туфли          100 руб.
Мужские        150 руб.
37 размер      70 руб.


На выходе должны получить:

Товар:         Цена:
45 размер      150 руб.
46 размер      150 руб.
36 размер      100 руб.
37 размер      70 руб.


как то так
10 Кокос
 
21.03.12
18:24
а не. тут наверное надо ЛЕВОЕ СОЕДИНЕНИЕ юзать
11 Михей
 
21.03.12
18:25
(10) думал, но оно не работает В ИЕРАРХИИ
12 le_
 
21.03.12
18:25
По-моему, одним запросом не сделать.
Соединение по условию В ИРЕРАРХИИ работать не будет.
13 Кокос
 
21.03.12
18:27
(12) зачем по условию в иерархии. просто делает ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ и тут новый запрос уже к иерархии а не к элементам) КАК Внтруеннийзапрос ПО ВрехнийЗАпрос.Родитель = Внтруеннийзапрос.Ссылка
14 Михей
 
21.03.12
18:28
(13) это если я знаю количество уровней иерархии
15 le_
 
21.03.12
18:28
(13) А если там вложенные группы есть?
16 Кокос
 
21.03.12
18:29
(15) все можно решить. я просто не понял до конца условий запроса.
17 Кокос
 
21.03.12
18:30
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ и тут новый запрос уже к иерархии а не к элементам) КАК Внтруеннийзапрос ПО ВрехнийЗАпрос.Родитель = Внтруеннийзапрос.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ и тут новый запрос уже к иерархии а не к элементам) КАК Внтруеннийзапрос ПО ВрехнийЗАпрос.Родитель.Родитель = Внтруеннийзапрос.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ и тут новый запрос уже к иерархии а не к элементам) КАК Внтруеннийзапрос ПО ВрехнийЗАпрос.Родитель.Родитель.Родитель = Внтруеннийзапрос.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ и тут новый запрос уже к иерархии а не к элементам) КАК Внтруеннийзапрос ПО ВрехнийЗАпрос.Родитель.Родитель.Родитель.Родитель = Внтруеннийзапрос.Ссылка

накрайняк :)) только внутренний запрос куда нибудь вывести. вобщем хз. или одним соединением можно справиться.
18 Кокос
 
21.03.12
18:31
Ого. Как хорошо у меня русский пошел :))
19 Кокос
 
21.03.12
18:37
чтото типа:

ВЫБРАТЬ
....
КАК ВНУТРЕННИЙЗАПРОС
ПОМЕСТИТЬ ВнутрЗапрос;

ВЫБРАТЬ
ВЫБОР КОГДА Внутр1.Цена > 0 ТОгда ВНУТР1.Цена ИНАЧЕ
ВЫБОР КОГДА Внутр2.Цена > 0 ТОгда ВНУТР2.Цена ИНАЧЕ
ВЫБОР КОГДА Внутр3.Цена > 0 ТОгда ВНУТР1.Цена ИНАЧЕ
....
КОНЕЦ КОНЕЦ ... КОНЕЦ КАК ЦенаЭлемента,
..Другие поля

ВЫБРАТЬ ИЗ ...
ЛЕВОЕ СОЕДИНЕНИЕ ВНУТРЕННИЙЗАПРОС КАК Внутр1 ПО ВрехнийЗАпрос.Родитель = Внутр1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ВНУТРЕННИЙЗАПРОС КАК Внутр2 ПО ВрехнийЗАпрос.Родитель.Родитель = Внутр2.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ВНУТРЕННИЙЗАПРОС КАК Внутр3 ПО ВрехнийЗАпрос.Родитель.Родитель.Родитель = Внутр3.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ ВНУТРЕННИЙЗАПРОС КАК Внутр4 ПО ВрехнийЗАпрос.Родитель.Родитель.Родитель.Родитель = Внутр4.Ссылка
... и т.д.
20 Кокос
 
21.03.12
18:38
ну и соответственно если надо обратные цены то начинаешь ВЫБОР делать с верхних уровней.
21 Axel2009
 
21.03.12
18:39
(0) можно выгрузить иерархию в ДЗ и пробежаться по строкам, проставить в соответствии с ДЗ.
22 Кокос
 
21.03.12
18:39
(21) запросы наше всё. :)
23 Кокос
 
21.03.12
18:40
(21) а если он хочет вывести в динамический список результат или в СКД выдать результат одним запросом?:)
24 Михей
 
21.03.12
18:42
(19) не кошерно
25 Кокос
 
21.03.12
18:44
(24) почему? я более мощные запросы писал. работает быстро даже при низкой скорости соединения.