|
Хелп по вложенным запросам | ☑ | ||
---|---|---|---|---|
0
Nemirov
27.01.20
✎
10:55
|
Имеется запрос с вложенными запросами и виртуальной таблицей... (Студент) Дали задание вывести в таблицу значений Номенклатуру которая отсутствует в приходной накладной сравнивая с расходной(через флажок на форме). Я не прошу писать мне запрос просто помогите словом как правильно сделать? с этими вложенными запросами не могу разобраться в каком месте нужно обратить внимание и как сделать. Запрос корявый непонятный.
|
|||
1
Nemirov
27.01.20
✎
10:56
|
Процедура ВыполнитьЗапросРН()
Текст = "ВЫБРАТЬ | РасходнаяНакладная.Ссылка КАК Ссылка, | РасходнаяНакладная.Дата КАК Дата, | РасходнаяНакладная.Фирма КАК Фирма, | РасходнаяНакладная.Контрагент КАК СтруктурнаяЕдиница, | РасходнаяНакладная.Склад КАК Склад |ПОМЕСТИТЬ тРасходныеНакладные |ИЗ | Документ.РасходнаяНакладная КАК РасходнаяНакладная |ГДЕ | РасходнаяНакладная.Контрагент ССЫЛКА Справочник.СтруктурныеЕдиницы | И (&НеПроверятьДата | ИЛИ РасходнаяНакладная.Дата МЕЖДУ &ДатаНач И &ДатаКон) | И (&НеПроверятьКонтрагент | ИЛИ РасходнаяНакладная.Контрагент = &Контрагент) | И РасходнаяНакладная.Проведен |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | тРасходныеНакладные.Ссылка КАК Документ, | тРасходныеНакладные.Фирма КАК Фирма, | &СтруктурнаяЕдиница КАК Контрагент, | тРасходныеНакладные.Дата КАК Дата |ИЗ ///////////////////////////////////////////////////////////ВЛОЖЕННЫЙ ЗАПРОС////////////////////////////////////////////////////// | (ВЫБРАТЬ | ВложенныйЗапрос.Ссылка КАК Ссылка, | ВложенныйЗапрос.Номенклатура КАК Номенклатура, | ВложенныйЗапрос.ХарактеристикаПартия КАК ХарактеристикаПартия, | СУММА(ВложенныйЗапрос.Количество) КАК Количество | ИЗ | (ВЫБРАТЬ | РасходнаяНакладнаяСостав.Ссылка КАК Ссылка, | РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, | ВЫБОР | КОГДА РасходнаяНакладнаяСостав.ХарактеристикаПартия = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) | ИЛИ РасходнаяНакладнаяСостав.ХарактеристикаПартия = ЗНАЧЕНИЕ(Справочник.Партии.ПустаяСсылка) | ТОГДА НЕОПРЕДЕЛЕНО | ИНАЧЕ РасходнаяНакладнаяСостав.ХарактеристикаПартия | КОНЕЦ КАК ХарактеристикаПартия, | РасходнаяНакладнаяСостав.Количество * РасходнаяНакладнаяСостав.Коэффициент КАК Количество | ИЗ | тРасходныеНакладные КАК тРасходныеНакладные | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав | ПО тРасходныеНакладные.Ссылка = РасходнаяНакладнаяСостав.Ссылка | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ПриходнаяНакладная.ДокОснование, | ПриходнаяНакладнаяСостав.Номенклатура, | ВЫБОР | КОГДА ТИПЗНАЧЕНИЯ(ПриходнаяНакладнаяСостав.ХарактеристикаПартия) = ТИП(ДАТА) | ИЛИ ПриходнаяНакладнаяСостав.ХарактеристикаПартия = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) | ИЛИ ПриходнаяНакладнаяСостав.ХарактеристикаПартия = ЗНАЧЕНИЕ(Справочник.Партии.ПустаяСсылка) | ТОГДА НЕОПРЕДЕЛЕНО | ИНАЧЕ ПриходнаяНакладнаяСостав.ХарактеристикаПартия | КОНЕЦ, | -(ПриходнаяНакладнаяСостав.Количество * ПриходнаяНакладнаяСостав.Коэффициент) | ИЗ | Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная | ВНУТРЕННЕЕ СОЕДИНЕНИЕ тРасходныеНакладные КАК тРасходныеНакладные | ПО ПриходнаяНакладная.ДокОснование = тРасходныеНакладные.Ссылка | ПО ПриходнаяНакладнаяСостав.Ссылка = ПриходнаяНакладная.Ссылка | ГДЕ | ПриходнаяНакладная.Проведен) КАК ВложенныйЗапрос | | СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Ссылка, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.ХарактеристикаПартия | | ИМЕЮЩИЕ | СУММА(ВложенныйЗапрос.Количество) > 0) КАК ВложенныйЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ тРасходныеНакладные КАК тРасходныеНакладные | ПО ВложенныйЗапрос.Ссылка = тРасходныеНакладные.Ссылка | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВложенныйЗапрос.Документ.Ссылка, | ВложенныйЗапрос.Документ.Фирма, | ВложенныйЗапрос.Документ.СтруктурнаяЕдиницаПолучатель, | ВложенныйЗапрос.Документ.Дата |ИЗ | (ВЫБРАТЬ | ВложенныйЗапрос.Ссылка КАК Документ | ИЗ | (ВЫБРАТЬ | ПринятиеКУчетуСостав.Номенклатура КАК Номенклатура, | МАКСИМУМ(ПринятиеКУчетуСостав.Количество) КАК КоличествоРасход, | ПринятиеКУчетуСостав.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | СУММА(ПриходнаяНакладнаяСостав.Количество) КАК КоличествоПриход, | ПринятиеКУчетуСостав.Ссылка КАК Ссылка | ИЗ | Документ.ОжидаемаяПоставка.Состав КАК ПринятиеКУчетуСостав | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав | ПО ПринятиеКУчетуСостав.Ссылка = ПриходнаяНакладнаяСостав.Ссылка.ДокОснование | И (ПриходнаяНакладнаяСостав.Ссылка.Проведен) | ГДЕ | ПринятиеКУчетуСостав.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон | И ПринятиеКУчетуСостав.Ссылка.Проведен | И ПринятиеКУчетуСостав.Ссылка.СтруктурнаяЕдиницаПолучатель = &СтруктурнаяЕдиница | | СГРУППИРОВАТЬ ПО | ПринятиеКУчетуСостав.ЕдиницаИзмерения, | ПринятиеКУчетуСостав.Номенклатура, | ПринятиеКУчетуСостав.Ссылка) КАК ВложенныйЗапрос | ГДЕ | ЕСТЬNULL(ВложенныйЗапрос.КоличествоПриход, 0) = 0 | | СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Ссылка) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО | Дата"; Запрос=Новый Запрос(); Запрос.Текст=Текст; Если НЕ ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.НайтиПоКоду("1")Тогда ЭлементыФормы.Контрагент.Значение = ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница; ЭлементыФормы.Контрагент.Доступность = ЛОЖЬ; КонецЕсли; Запрос.УстановитьПараметр("МоментВремени",ТекущаяДатаСеанса()); Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон)); Запрос.УстановитьПараметр("Контрагент",Контрагент); Запрос.УстановитьПараметр("СтруктурнаяЕдиница",Контрагент); Если Не ЗначениеЗаполнено(Контрагент) Тогда Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Ложь); КонецЕсли; Если Не ЗначениеЗаполнено(ДатаНач) Тогда Запрос.УстановитьПараметр("НеПроверятьДата", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьДата", Ложь); КонецЕсли; Если Не ЗначениеЗаполнено(ДатаКон) Тогда Запрос.УстановитьПараметр("НеПроверятьДата", Истина); Иначе Запрос.УстановитьПараметр("НеПроверятьДата", Ложь); КонецЕсли; Документы=Запрос.Выполнить().Выгрузить(); ЭлементыФормы.Документы.СоздатьКолонки(); КонецПроцедуры |
|||
2
Nemirov
27.01.20
✎
11:01
|
Запрос показывает некорректные перемещения
|
|||
3
fisher
27.01.20
✎
11:16
|
Этот запрос дали для примера? Там внутри есть подходящий блок.
Одним подзапросом выбираются расходы (количество с плюсом), другим подзапросом приходы на основании расходов (количество с минусом). Затем результаты этих подзапросов объединяются и полученное объединение группируется по документу расхода, при этом отбираются только те результаты группировки (ИМЕЮЩИЕ), для которых "схлопнутое" количество больше нуля (т.е. отсеиваются все приходы/расходы, где расход и приход на основании этого расхода имеют одинаковое количество. Остаются только те строки/документы расходов, которые "не покрыты" приходами на основании этих расходов). |
|||
4
fisher
27.01.20
✎
11:19
|
Это аналогично тому, как засунуть в таблицу значений строки расходов с плюсом, затем строки приходов с минусом, выполнить "Свернуть" с итогами по количеству и отобрать из результата строки с положительным количеством.
|
|||
5
Nemirov
27.01.20
✎
11:30
|
(4) Про какой блок вы говорите? Да для примера.
|
|||
6
Nemirov
27.01.20
✎
11:31
|
Точнее этот запрос дали мне для того что бы я вывел номенклатуру (строки/документы расходов) которые не покрыты приходами на основании этих расходов как вы сказали.
|
|||
7
Nemirov
27.01.20
✎
11:32
|
То есть в таком виде мы видим только ссылки документов,а необходимо некорректные значения из документа выводить
|
|||
8
Nemirov
27.01.20
✎
11:35
|
ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0) КАК ВложенныйЗапрос /////////////////Эти 2 блока?////////////////////////// | ГДЕ | ЕСТЬNULL(ВложенныйЗапрос.КоличествоПриход, 0) = 0 |
|||
9
fisher
27.01.20
✎
11:45
|
(8) Второй анализирует расхождения приходов с ожидаемыми поставками. А тебе вроде ж сказано расходов с приходами. Я про первый блок, который заканчивается на ИМЕЮЩИЕ и группирует результат объединения подзапросов по приходам и по расходам. Ты говоришь "не прошу писать мне запрос", но похоже что к тому идет :)
|
|||
10
Nemirov
27.01.20
✎
11:56
|
(9) Да нет зачем мне вас заморачивать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |