|
Что-то намудрил с запросом | ☑ | ||
---|---|---|---|---|
0
Storm03
30.09.20
✎
22:32
|
Что-то под вечер голова совсем не работает.
Есть вот такой запрос: Запрос.Текст = "ВЫБРАТЬ | ОстаткиНоменклатуры.Номенклатура.Ссылка КАК Товар |ПОМЕСТИТЬ ТОВАРЫ |ИЗ | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры |ГДЕ | ОстаткиНоменклатуры.Период > &Период | И ОстаткиНоменклатуры.Склад = &Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТОВАРЫ.Товар.Ссылка КАК Товар, | ЕСТЬNULL(ЦеныКомпанииСрезПоследних_Розн.Цена, 0) КАК ЦенаРозн, | ЕСТЬNULL(ЦеныКомпанииСрезПоследних_Закуп.Цена, 0) КАК ЦенаЗакуп, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Остаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.Партия.Контрагент.Ссылка, """") КАК Контрагент |ИЗ | ТОВАРЫ КАК ТОВАРЫ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(, ТипЦен = &ТипРозн) КАК ЦеныКомпанииСрезПоследних_Розн | ПО ТОВАРЫ.Товар.Ссылка = ЦеныКомпанииСрезПоследних_Розн.Номенклатура.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(, ТипЦен = &ТипЗакуп) КАК ЦеныКомпанииСрезПоследних_Закуп | ПО ТОВАРЫ.Товар.Ссылка = ЦеныКомпанииСрезПоследних_Закуп.Номенклатура.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки | ПО ТОВАРЫ.Товар.Ссылка = ОстаткиНоменклатурыОстатки.Номенклатура |ГДЕ | ЦеныКомпанииСрезПоследних_Розн.Склад = &Склад | И ЦеныКомпанииСрезПоследних_Закуп.Склад = &Склад | И ОстаткиНоменклатурыОстатки.Склад = &Склад"; Запрос должен (по идее) выводить всю номенклатуру, которая есть на остатке и по которой был оборот за определённый период. Однако в таком виде запрос выводит только то, что есть на остатке; Пиво этого года;Поставщик Пива;5;50;100 Продукт этого года;Поставщик продуктов;10;150;200 Водка этого года;Поставщик Алкоголя;5;100;200 Если же удалить последнюю строчку в запросе, то выводит всё как надо: Водка с прошлого года;;0;80;160 Пиво с прошлого года;;0;40;80 Продукт с прошлого года;;0;70;90 Пиво этого года;Поставщик Пива;5;50;100 Продукт этого года;Поставщик продуктов;10;150;200 Водка этого года;Поставщик Алкоголя;5;100;200 |
|||
1
VKS
30.09.20
✎
22:35
|
левое соединение, основная таблица остатки, соответственно и будет показывать товар из этой таблице
|
|||
2
Storm03
30.09.20
✎
22:38
|
Делал и внутреннее. Толку нет(((
|
|||
3
RomanYS
30.09.20
✎
22:43
|
(2) Условия на правые таблицы перенести в условия соединения, а в данном случае в параметры виртуальных таблиц
|
|||
4
RomanYS
30.09.20
✎
22:44
|
В первом запросе добавить "различные" или использовать ВТ Обороты
|
|||
5
Storm03
30.09.20
✎
22:58
|
Что-то я не догоняю. При чем здесь соединение и первый запрос, если проблема в строке "И ОстаткиНоменклатурыОстатки.Склад = &Склад"?
Если её убрать, то выводит и то, чего нет на остатке, но по всем складам: Запрос.Текст = "ВЫБРАТЬ | ОстаткиНоменклатуры.Номенклатура.Ссылка КАК Товар |ПОМЕСТИТЬ ТОВАРЫ |ИЗ | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры |ГДЕ | ОстаткиНоменклатуры.Период > &Период | И ОстаткиНоменклатуры.Склад = &Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТОВАРЫ.Товар.Ссылка КАК Товар, | ЕСТЬNULL(ЦеныКомпанииСрезПоследних_Розн.Цена, 0) КАК ЦенаРозн, | ЕСТЬNULL(ЦеныКомпанииСрезПоследних_Закуп.Цена, 0) КАК ЦенаЗакуп, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Остаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.Партия.Контрагент.Ссылка, """") КАК Контрагент |ИЗ | ТОВАРЫ КАК ТОВАРЫ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(, ТипЦен = &ТипРозн) КАК ЦеныКомпанииСрезПоследних_Розн | ПО ТОВАРЫ.Товар.Ссылка = ЦеныКомпанииСрезПоследних_Розн.Номенклатура.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(, ТипЦен = &ТипЗакуп) КАК ЦеныКомпанииСрезПоследних_Закуп | ПО ТОВАРЫ.Товар.Ссылка = ЦеныКомпанииСрезПоследних_Закуп.Номенклатура.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки | ПО ТОВАРЫ.Товар.Ссылка = ОстаткиНоменклатурыОстатки.Номенклатура |ГДЕ | ЦеныКомпанииСрезПоследних_Розн.Склад = &Склад | И ЦеныКомпанииСрезПоследних_Закуп.Склад = &Склад"; |
|||
6
RomanYS
30.09.20
✎
23:02
|
(5) Проблема именно в этой строке: нет остатка - в нем нет склада - условие не выполнилось.
Разберись чем отличаются левое внутреннее и полное соединения и поймёшь, почему нельзя ставить условие на правую таблицу при левом соединении в разделе ГДЕ |
|||
7
Storm03
30.09.20
✎
23:07
|
Всё. Понял. Если в виртуальной таблице записей нет, то и нефик там искать склад.)))
Всем спасибо. До свидания! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |