|
v8: Помогите разобраться с соединениями в запросе | ☑ | ||
---|---|---|---|---|
0
sashka2009
01.07.13
✎
10:47
|
ЗАдача следующая - Получить остатки по оптовому складу, и, если по этим позициям есть остаток на Розничном складе, вывести остаток. Отборы: склад оптовый, склад розничный, остаток на розничном складе... остаток на розничном складе - это фильтр , который работает по принципу: на розничном остаток больше Дельты - выводим в отчет данные. Склады оптовые и розничные могут меняться фильтрами. Отчет нужен чтобы во время с оптового склада переместить товар, который закончился на розничном складе. Запрос написал, но проблема в том, что он работает по принципу если есть остаток на оптовом складе, то он выведет остаток на розничном. НО, если на розничном остатка нет - он этот товар и по оптовому складу не покажет!
|
|||
1
sashka2009
01.07.13
✎
10:48
|
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, | ТоварыНаСкладахОстатки.СерияНоменклатуры, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток, | ЕСТЬNULL(ВложенныйЗапрос.ОстатокРезерв, 0) КАК ОстатокРезерв, | ТоварыНаСкладахОстатки.Склад, | ВложенныйЗапрос.СкладРозница |{ВЫБРАТЬ | Номенклатура.*, | ХарактеристикаНоменклатуры.*, | СерияНоменклатуры.*, | Остаток, | ОстатокРезерв, | Склад.*, | СкладРозница.*} |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ТоварыВРезервеНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыВРезервеНаСкладахОстатки.Склад КАК СкладРозница, | ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры, | ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокРезерв | ИЗ | РегистрНакопления.ТоварыВРознице.Остатки(&ДатаКон, ) КАК ТоварыВРезервеНаСкладахОстатки) КАК ВложенныйЗапрос | ПО ТоварыНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура |{ГДЕ | ТоварыНаСкладахОстатки.Склад.*, | ТоварыНаСкладахОстатки.Номенклатура.*, | ВложенныйЗапрос.СкладРозница.*, | (ЕСТЬNULL(ВложенныйЗапрос.ОстатокРезерв, 0)) КАК ОстатокРезерв} |{УПОРЯДОЧИТЬ ПО | Номенклатура.*} |ИТОГИ | СУММА(Остаток), | СУММА(ОстатокРезерв) |ПО | ОБЩИЕ |{ИТОГИ ПО | Номенклатура.*} |АВТОУПОРЯДОЧИВАНИЕ"; |
|||
2
Mitriy
01.07.13
✎
10:49
|
левое соединение и условия в соединении, а не в где...
|
|||
3
Mitriy
01.07.13
✎
10:49
|
(2)+ про левое соединение можно не читать...
|
|||
4
Галахад
гуру
01.07.13
✎
10:51
|
Это чо?
ПО ТоварыНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура |
|||
5
sashka2009
01.07.13
✎
10:51
|
В "ГДЕ" условия помещены, т.к. запрос находится в процедуре Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
чтобы потом пользоваться Универсальным отчетом |
|||
6
Галахад
гуру
01.07.13
✎
10:52
|
Тфу. Нфига вложенный запрос вообще?
|
|||
7
sashka2009
01.07.13
✎
10:54
|
у меня до этого было и невложенным.... работают одинаково неправильно ((((...
|
|||
8
Bober
01.07.13
✎
10:57
|
(0)
" Получить остатки по оптовому складу, и, если по этим позициям есть остаток на Розничном складе, вывести остаток." ... "Отчет нужен чтобы во время с оптового склада переместить товар, который закончился на розничном складе. " все правильно? |
|||
9
Галахад
гуру
01.07.13
✎
10:57
|
(7) Смотри (2)
Убери | ВложенныйЗапрос.СкладРозница.*, | (ЕСТЬNULL(ВложенныйЗапрос.ОстатокРезерв, 0)) КАК ОстатокРезерв} |
|||
10
Bober
01.07.13
✎
10:58
|
(0) в этой ситуации нужно делать запросы через объединение
ВЫБРАТЬ ... ( ВЫБРАТЬ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ...) КАК Данные СГРУППИРОВАТЬ ПО |
|||
11
sashka2009
01.07.13
✎
11:00
|
А через ОБЪЕДИНИТЬ ВСЕ будет универсальный отчет работать?
|
|||
12
Bober
01.07.13
✎
11:01
|
(11) будет, (лучше конечнео на записать в СКД) только не забудь выставить управляющие конструкции
|
|||
13
sashka2009
01.07.13
✎
11:02
|
через СКД пользователям не удобно
|
|||
14
Bober
01.07.13
✎
11:03
|
(1) из выборок выкинуть склады, оставить только в параметров внурт таблиц.
Делается это так: РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {Склад.* КАК ОптовыйСклад}) |
|||
15
sashka2009
01.07.13
✎
11:04
|
Убери
| ВложенныйЗапрос.СкладРозница.*, | (ЕСТЬNULL(ВложенныйЗапрос.ОстатокРезерв, 0)) КАК ОстатокРезерв} если я это уберу - то отбор по Розничному складу работать не будет |
|||
16
Bober
01.07.13
✎
11:07
|
(15) если сделать через объединение, то такие конструкции не потребуются
|
|||
17
sashka2009
01.07.13
✎
11:08
|
сделал через РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {Склад.* КАК ОптовыйСклад}) , вроде работает, щас тестирую
|
|||
18
sashka2009
01.07.13
✎
11:13
|
Спасибо! Пока все круто )
|
|||
19
Bober
01.07.13
✎
11:14
|
(18) сделал через объединение?
|
|||
20
sashka2009
01.07.13
✎
11:15
|
Нет, оставил вложенный запрос, только убрал склады из "ГДЕ" и вставил в РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {Склад.* КАК ОптовыйСклад})
|
|||
21
Bober
01.07.13
✎
11:49
|
(20) не айс.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |