|
Объединение запроса | ☑ | ||
---|---|---|---|---|
0
pessok
29.03.12
✎
10:52
|
Народ, что-то туплю, подскажите плз...
Есть простенький запросец ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.ХарактеристикаНоменклатуры, ВложенныйЗапрос.ЦелевойУровень КАК ЦелевойУровень, ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток, ВложенныйЗапрос.КоличествоЗаказано КАК КоличествоЗаказано, ЗаказыПоставщикамОстатки.ЗаказПоставщику ИЗ (ВЫБРАТЬ ПараметрыЗакупкиНоменклатуры.Номенклатура КАК Номенклатура, ПараметрыЗакупкиНоменклатуры.ХарактеристикиНоменклатуры КАК ХарактеристикаНоменклатуры, ПараметрыЗакупкиНоменклатуры.ЦелевойУровень КАК ЦелевойУровень, 0 КАК КоличествоОстаток, 0 КАК КоличествоЗаказано, NULL КАК ЗаказПоставщику ИЗ РегистрСведений.ПараметрыЗакупкиНоменклатуры КАК ПараметрыЗакупкиНоменклатуры ГДЕ ПараметрыЗакупкиНоменклатуры.Номенклатура В ИЕРАРХИИ(&Номенклатура) ОБЪЕДИНИТЬ ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, 0, ТоварыНаСкладахОстатки.КоличествоОстаток, 0, NULL ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки ОБЪЕДИНИТЬ ВЫБРАТЬ ЗаказыПоставщикамОстатки.Номенклатура, ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры, 0, 0, ЗаказыПоставщикамОстатки.КоличествоОстаток, ЗаказыПоставщикамОстатки.ЗаказПоставщику ИЗ РегистрНакопления.ЗаказыПоставщикам.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЗаказыПоставщикамОстатки) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки КАК ЗаказыПоставщикамОстатки ПО ВложенныйЗапрос.ЗаказПоставщику = ЗаказыПоставщикамОстатки.ЗаказПоставщику В результате получается, что во вложенном запросе, при условии, что есть и заказ и остатки на складе по одной номенклатуре формируется две строки, где 1) ЗаказПоставщику - ссылка на доку 2) ЗаказПоставщику - Неопределено. Пробовал делать вместо Неопределено ЗНАЧЕНИЕ(Документ.ЗаказПоставщику.ПустаяСсылка), не взлетает. С утра что-то туплю, не выспался... ПОдскажите плз, как сгруппировать объединение правильно :) |
|||
1
pessok
29.03.12
✎
10:53
|
вместо NULL т.е.
|
|||
2
Ненавижу 1С
гуру
29.03.12
✎
10:54
|
что хотим то?
|
|||
3
Kashemir
29.03.12
✎
10:55
|
Объединение сначала сверни(сгруппируй), а потом присоединяй заказы
|
|||
4
Kashemir
29.03.12
✎
10:56
|
(3) А хотя в твоем случае не поможет.
|
|||
5
cViper
29.03.12
✎
10:56
|
(0) Зачем вот это " ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки КАК ЗаказыПоставщикамОстатки
ПО ВложенныйЗапрос.ЗаказПоставщику = ЗаказыПоставщикамОстатки.ЗаказПоставщику" |
|||
6
cViper
29.03.12
✎
10:57
|
У тебя в регистры неопределено пишется?
|
|||
7
pessok
29.03.12
✎
10:59
|
(2) хотим отчет, в котором в строку будет Заказ - Остаток на складе - Остаток по заказу ну и остальные поля
(3) не взлетит, угу (5) да не нужно по идее это левое соединение, можно из вложенного выводить, разницы никакой (6) в регистрах измерения ЗаказПоставщику нету (ТоварыНаСкладах, ПараметрыЗакупки) |
|||
8
cViper
29.03.12
✎
11:01
|
(7) Поэтому и спрашиваю. Разница в том что это влияет на производительность, отрицательно влияет.
|
|||
9
cViper
29.03.12
✎
11:03
|
(7) Так а зачем ты делаешь объединить? Делай соединение по номенклатуре.
|
|||
10
pessok
29.03.12
✎
11:07
|
(8) да это я просто не убрал. Объединение надо, т.к. три разных регистра, и выводить надо если есть записи хотя бы в одном
|
|||
11
Kashemir
29.03.12
✎
11:07
|
(7) У тебя ресурсы вроде не пересекаются
Путь минимального вмешательства в твой запрос но довольно топорный по реализации: сгруппировать объединение по Номенклатура и Характеристике, агрегация сумм по ресурсам и агрегация ЗаказПоставщику через максимум. Правда что такое ЦелевойУровень у тебя хз |
|||
12
cViper
29.03.12
✎
11:09
|
(10) По хорошему, тебе бы еще товары в резерве надо учитывать.
|
|||
13
cViper
29.03.12
✎
11:12
|
ВЫБРАТЬ
ЗаказыПоставщикамОстатки.ЗаказПоставщику КАК ЗаказПоставщику, ЗаказыПоставщикамОстатки.Номенклатура КАК Номенклатура, ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ЗаказыПоставщикамОстатки.КоличествоОстаток КАК КоличествоЗаказано, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоЗарезервировано ИЗ РегистрНакопления.ЗаказыПоставщикам.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЗаказыПоставщикамОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки ПО ЗаказыПоставщикамОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыВРезервеНаСкладахОстатки ПО ЗаказыПоставщикамОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура И ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры |
|||
14
Kashemir
29.03.12
✎
11:21
|
+(11) P.s. взлетит только если тебя интересует вывод 1 произвольный заказ и множества номенклатура+характеристика.
Вообще такие задачи проще всего соединением наборов с СКД решать. Где в одном наборе будет итог для множества (ресурсы первых двух таблиц) и присоединение уточняющего набора по заказам. Либо же значения ресурсов первых двух таблиц надо пропорционально раскидать по заказам (кинуть на пустой если нет ни одного) |
|||
15
pessok
29.03.12
✎
11:25
|
(14) инетересуте вывод как раз наоборот. в общем вопрос отпал сам собой, будем оставлять две строки :)
но спасибо за участие. объединение наборов надо покурить, не использовал никогда |
|||
16
Kashemir
29.03.12
✎
11:28
|
(15) Объединение наборов курить не надо, покури соединение :)
|
|||
17
cViper
29.03.12
✎
11:29
|
(15) Тебе в (14) написали то что тебе нужно. Проанализируй внимательно.
|
|||
18
Kashemir
29.03.12
✎
11:30
|
(15) Кстати строк будет не 2, а 1 + количество заказов
|
|||
19
Kashemir
29.03.12
✎
11:32
|
(17) И как будет выглядеть результат твоего запроса на примере ниже ?
остатки: Номенклатура1 Характеристика1 Остаток=100 Заказы: Номенклатура1 Характеристика1 Заказ1 КвоЗаказа=20 Номенклатура1 Характеристика1 Заказ2 КвоЗаказа=30 |
|||
20
Kashemir
29.03.12
✎
11:36
|
+(19) Вопрос к (15) :)
|
|||
21
pessok
29.03.12
✎
11:39
|
не нужно мне соединения, я ж говорю. ОБЯЗАТЕЛЬНО надо выводить инфу по всем трем источникам данных, а не прицеплять одно к другому
(19) Уоряво будет выглядеть, согласен. В общем оставляю так, как есть сейчас. Так все выводится корректно. |
|||
22
cViper
29.03.12
✎
11:48
|
(21) так тебе нужно выводить все остатки вне зависимости от того, были ли сделаны на них заказы?
|
|||
23
pessok
29.03.12
✎
12:27
|
(22) от именно :)
|
|||
24
pessok
29.03.12
✎
12:28
|
+(23) я как бы прекрасно понимаю разницу между соединением и объединением, и то, когда что надо использовать :)
затык был именно с группировками, но (19) убедил меня, что надо спать дольше :) |
|||
25
Kashemir
29.03.12
✎
12:42
|
(24) Пример как вывести данные с разной детализацией и общими итогами
Набор 1: Изм: Субконто1, ресурс остаток Набор 2: Изм: Субконто1, Субконто2, ресурс оборот. соединение наборов по субконто1 http://s019.radikal.ru/i609/1203/d3/3136352c5e74.jpg |
|||
26
pessok
29.03.12
✎
12:55
|
(25) вот за это спасибо отдельное!
|
|||
27
Kashemir
29.03.12
✎
12:56
|
(26) На здоровье :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |