|
Как сравнить два запроса | ☑ | ||
---|---|---|---|---|
0
1СникомХочу Стать
17.05.21
✎
14:46
|
Добрый день! Столкнулся с задачей и не знаю как дальше решить:
Делаю проверку, которая будет сравнивать количество в табличной часте документа ”ЗаказКлиентаТовары.Количество” и ресурс Регистра накопления ”СвободныеОстаткиОстатки.ВНаличииОстаток”. Как объединить в 1 запрос, чтобы получать остаток из РН по конкретному документу и номенклатуре? Поэтому сделал два запроса в консоли: 1 запрос) получаю количество свободных остатков из РН ”СвободныеОстаткиОстатки.ВНаличииОстаток ” ВЫБРАТЬ СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура, СвободныеОстаткиОстатки.Характеристика КАК Характеристика, СвободныеОстаткиОстатки.Склад КАК Склад, СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток ИЗ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки ГДЕ СвободныеОстаткиОстатки.Номенклатура = &Номенклатура И СвободныеОстаткиОстатки.Склад = &Склад И СвободныеОстаткиОстатки.Характеристика = &Характеристика Показать 2 запрос) получаю Кол-во по номенклатуре из табличной части Товары ВЫБРАТЬ ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, ЗаказКлиентаТовары.Характеристика КАК Характеристика, ЗаказКлиентаТовары.КоличествоУпаковок КАК КоличествоУпаковок, ЗаказКлиентаТовары.Количество КАК Количество ИЗ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары ГДЕ ЗаказКлиентаТовары.Ссылка = &Ссылка |
|||
1
Kassern
17.05.21
✎
14:48
|
(0) почитайте про левое соединение в запросе
|
|||
2
1СникомХочу Стать
17.05.21
✎
15:13
|
(1) спасибо, а разве не через Объединение или через виртуальные таблицы такое делается?
|
|||
3
Kassern
17.05.21
✎
15:18
|
(2) попробуйте все варианты соединения таблиц на небольшой выборке данных, чтобы на практике убедиться, какой метод что делает. Как только осознание появится, таких вопросов уже задавать не будете.
|
|||
4
RomanYS
17.05.21
✎
15:22
|
ВЫБРАТЬ
Т1.ключ, Т1.Значение КАК Значение1, 0 КАК Значение2 ПОМЕСТИТЬ ВТ ИЗ Т1 КАК Т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Т2.ключ, 0, Т2.Значение ИЗ Т2 КАК Т2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.ключ, СУММА(ВТ.Значение1) КАК Значение1, СУММА(ВТ.Значение2) КАК Значение2, СУММА(ВТ.Значение1 - ВТ.Значение2) КАК Разница ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.ключ |
|||
5
Kassern
17.05.21
✎
16:10
|
(4) зачем так сложно то? У него простая задачка:
таб1 //заказы Кастрюля|10шт Таб2 //Остатки Кастрюля|30шт Сковорода|5шт //Нужно получить следующее, как я понял: Кастрюля|10шт|30шт Проще всего левым соединением к таблице заказов прикрутить таблицу остатков. Вывести остатки через ЕстьNull(СвободныеОстаткиОстатки.ВНаличииОстаток,0). |
|||
6
RomanYS
17.05.21
✎
16:47
|
(5) Ну начинается с левого соединения - оказывается что запись может быть только в правой таблице - переписываем на полное, все ключи заворачиваем в ЕстьNull.
Дальше оказывается, что ключи не уникальны - переписываем всё на ВрТ с предварительной группировкой. Потом оказывается, что сравнивать нужно не 2 таблицы, а три и нормальное полное соединение на троих - это прикольный ребус. В общем лучше сразу (4) ;-) |
|||
7
Kassern
17.05.21
✎
16:56
|
(6) Это все на берегу решается, до того, как садишься писать отчет. Самое главное понимать какую задачу решает этот отчет. Если понимание есть, то неопределенность в соединениях сводится к минимуму. Опыт подскажет, что еще может понадобиться клиенту для решения данного вопроса. В случае ТС, вообще странно, он берет товары из заказа, хочет по ним остатки, но ему даже в голову не пришло на какую дату нужны остатки.
|
|||
8
Kesim
17.05.21
✎
18:00
|
скорее всего это не отчет, а проверка остатков перед проведением)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |