Имя: Пароль:
1C
1С v8
Запрос один к многим с итогами
0 DrLekter
 
01.06.16
12:05
Есть документ с двумя табличными частями - ТЧ1 и ТЧ2. Одной строке ТЧ1 может соответствовать одна или несколько строк ТЧ2 (связаны через реквизит, назовем его Идентификатор, например), а может и не соответствовать. Задача: сформировать выборку вида:

- СтрокаТЧ1 Сумма(КоличествоТЧ1)
------СтрокаТЧ2_1 Сумма(КоличествоТЧ2_1)
------СтрокаТЧ2_2 Сумма(КоличествоТЧ2_2)
------.....
с вариантом:
- СтрокаТЧ1 Сумма(КоличествоТЧ1)
------Дополнительная группировка (например, документ) Сумма(КоличествоТЧ1)
----------СтрокаТЧ2_1 Сумма(КоличествоТЧ2_1)
----------СтрокаТЧ2_2 Сумма(КоличествоТЧ2_2)
------.....

Физический смысл задачи: анализ замен на производстве.
Не хочу делать переборами, хочу красивым и быстрым запросом :) Пока понимаю только, как на последнем этапе вместо группировки получить ТЗ, а как потом суммировать ее "внутренности"?
1 mistеr
 
01.06.16
12:51
Так в чем конкретно проблема? И выложи текущий вариант.

Кстати, а "Дополнительная группировка (например, документ)" из ТЧ1 или ТЧ2?
2 mistеr
 
01.06.16
12:52
Да, и зачем ТЗ?
3 Мимохожий Однако
 
01.06.16
13:07
Вытаскивай в запрос две таблицы с разными ТЧ и соединяй через СвойЛюбимыйИдентификатор. Начни тренироваться в консоли запросов.
4 DrLekter
 
01.06.16
13:20
(1) Документ один и тот же
(3) Я так и делаю, но, кажется, будет двоиться количество. Пока дошел вот до такого:

"ВЫБРАТЬ
                          |    ПроизводствоЗамены.КарточкаЗамены,
                          |    ПроизводствоЗамены.Ссылка,
                          |    ПроизводствоЗамены.Номенклатура,
                          |    ПроизводствоЗамены.Количество,
                          |    ПроизводствоЗамены.КоличествоФактическое,
                          |    ПроизводствоЗамены.Ссылка.Дата,
                          |    ПроизводствоЗамены.Ссылка.МестоОбработки
                          |ПОМЕСТИТЬ Замены
                          |ИЗ
                          |    Документ.Производство.Замены КАК ПроизводствоЗамены
                          |ГДЕ
                          |    ПроизводствоЗамены.Ссылка.Проведен = &Проведен
                          |    И ПроизводствоЗамены.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    ПроизводствоИспользовано.КарточкаЗамены,
                          |    ПроизводствоИспользовано.Ссылка,
                          |    ПроизводствоИспользовано.Номенклатура,
                          |    ПроизводствоИспользовано.Количество,
                          |    ПроизводствоИспользовано.ФактическоеКоличество,
                          |    ПроизводствоИспользовано.Ссылка.Дата,
                          |    ПроизводствоИспользовано.Ссылка.МестоОбработки
                          |ПОМЕСТИТЬ Использовано
                          |ИЗ
                          |    Документ.Производство.Использовано КАК ПроизводствоИспользовано
                          |ГДЕ
                          |    ПроизводствоИспользовано.Ссылка.Проведен = &Проведен
                          |    И ПроизводствоИспользовано.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    Замены.КарточкаЗамены,
                          |    Замены.Ссылка,
                          |    Замены.Дата КАК Дата,
                          |    Замены.МестоОбработки,
                          |    Замены.Номенклатура КАК НоменклатураЗамены,
                          |    Замены.Количество КАК ПлановоеКоличествоЗамены,
                          |    Замены.КоличествоФактическое КАК ФактическоеКоличествоЗамены,
                          |    Использовано.Номенклатура КАК ПлановаяНоменклатура,
                          |    Использовано.Количество КАК ПлановоеКоличество,
                          |    Использовано.ФактическоеКоличество КАК ФактическоеКоличество
                          |ПОМЕСТИТЬ ПредварительнаяВыборка
                          |ИЗ
                          |    Замены КАК Замены
                          |        ЛЕВОЕ СОЕДИНЕНИЕ Использовано КАК Использовано
                          |        ПО Замены.Ссылка = Использовано.Ссылка
                          |            И Замены.КарточкаЗамены = Использовано.КарточкаЗамены;
                          "

и тут до меня дошло, что в случае, когда в ТЧ Замены две строки соответствуют одной, количество по ТЧ Использовано удвоится, когда начну суммировать итоги. Если бы не нужно былдо суммировать количество - вообще не проблема, если бы не нужны были дополнительные группировки - можно было бы исползовать МАКСИМУМ() вместо СУММА(). А так пока задумался...
5 4eater
 
01.06.16
13:41
Делай через объединение
6 Тролль главный
 
01.06.16
13:53
(5)+1
7 DrLekter
 
01.06.16
14:37
О, спасибо! Как я про Объединить все  забыл ))
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой