Подскажие пожалуйста как наложить условие на поле запроса, являющееся арифметическим значением других полей, т.е
есть запрос
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток,
ВложенныйЗапрос.КоличествоВРезерве КАК КоличествоВРезерве,
ВложенныйЗапрос.КоличествоКПередаче КАК КоличествоКПередаче,
ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче КАК СвободныйОстаток,
ВложенныйЗапрос.Номенклатура.ОсновнойПоставщик КАК НоменклатураОсновнойПоставщик,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
(ВЫБРАТЬ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток,
СУММА(ВложенныйЗапрос.КоличествоВРезерве) КАК КоличествоВРезерве,
СУММА(ВложенныйЗапрос.КоличествоКПередаче) КАК КоличествоКПередаче
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК Склад,
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
0 КАК КоличествоВРезерве,
+ Code
0 КАК КоличествоКПередаче
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыНаСкладахОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыВРозницеОстатки.Склад,
ТоварыВРозницеОстатки.Номенклатура,
ТоварыВРозницеОстатки.КоличествоОстаток,
0,
0
ИЗ
РегистрНакопления.ТоварыВРознице.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыВРозницеОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыВРезервеНаСкладахОстатки.Склад,
ТоварыВРезервеНаСкладахОстатки.Номенклатура,
0,
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
0
ИЗ
РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыВРезервеНаСкладахОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыКПередачеСоСкладовОстатки.Склад,
ТоварыКПередачеСоСкладовОстатки.Номенклатура,
0,
0,
ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыКПередачеСоСкладовОстатки) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Склад,
ВложенныйЗапрос.Номенклатура) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ВыбДата,
&УсловиеНоменклатура
И ТипЦен = &ВыбТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
&УсловиеПоставщик
УПОРЯДОЧИТЬ ПО
Номенклатура ИЕРАРХИЯ УБЫВ
Как отобрать все отрицательные остатки по полю "СвободныйОстаток"?
есть запрос
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток,
ВложенныйЗапрос.КоличествоВРезерве КАК КоличествоВРезерве,
ВложенныйЗапрос.КоличествоКПередаче КАК КоличествоКПередаче,
ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче КАК СвободныйОстаток,
ВложенныйЗапрос.Номенклатура.ОсновнойПоставщик КАК НоменклатураОсновнойПоставщик,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
(ВЫБРАТЬ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток,
СУММА(ВложенныйЗапрос.КоличествоВРезерве) КАК КоличествоВРезерве,
СУММА(ВложенныйЗапрос.КоличествоКПередаче) КАК КоличествоКПередаче
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК Склад,
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
0 КАК КоличествоВРезерве,
+ Code
0 КАК КоличествоКПередаче
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыНаСкладахОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыВРозницеОстатки.Склад,
ТоварыВРозницеОстатки.Номенклатура,
ТоварыВРозницеОстатки.КоличествоОстаток,
0,
0
ИЗ
РегистрНакопления.ТоварыВРознице.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыВРозницеОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыВРезервеНаСкладахОстатки.Склад,
ТоварыВРезервеНаСкладахОстатки.Номенклатура,
0,
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
0
ИЗ
РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыВРезервеНаСкладахОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыКПередачеСоСкладовОстатки.Склад,
ТоварыКПередачеСоСкладовОстатки.Номенклатура,
0,
0,
ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
&ВыбДата,
&УсловиеНоменклатура
И &УсловиеСклад) КАК ТоварыКПередачеСоСкладовОстатки) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Склад,
ВложенныйЗапрос.Номенклатура) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ВыбДата,
&УсловиеНоменклатура
И ТипЦен = &ВыбТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
&УсловиеПоставщик
УПОРЯДОЧИТЬ ПО
Номенклатура ИЕРАРХИЯ УБЫВ
Как отобрать все отрицательные остатки по полю "СвободныйОстаток"?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ИМЕЮЩИЕ в данном случае использовать еще рано, так как агрегатных функций нет. Если действительно ситуация такова, то просто добавляется условие ГДЕ, после которого пишется ваша арифметическая сумма <0.
Но хочу вас предупредить, что в данном случае надо бы свернуть ваш запрос по складам, номенклатурам, основному поставщику (и, возможно, цене). Ибо в случае вашего запроса все записи по одному складу дадут две строки, и суммы по ним не сложатся. И вот тогда нужно использовать и группировки и слово имеющие.
Следовательно, ваш запрос должен выглядеть примерно так:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток,
СУММА(ВложенныйЗапрос.КоличествоВРезерве) КАК КоличествоВРезерве,
СУММА(ВложенныйЗапрос.КоличествоКПередаче) КАК КоличествоКПередаче,
СУММА(ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче) КАК СвободныйОстаток,
ВложенныйЗапрос.Номенклатура.ОсновнойПоставщик КАК НоменклатураОсновнойПоставщик,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ (<ВАШ ВЛОЖЕННЫЙ ЗАПРОС>) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ <Ваш Регистр по ценам>
ПО <Ваше соединение>
ГДЕ <Ваше условие. И если без группировок, то нужно было бы поставить
И ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче<0, но мы используем Сгруппировать, поэтому условие уйдет вниз >
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Склад,
ВложенныйЗапрос.Номенклатура,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИМЕЮЩИЕ СУММА(ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче) <0
УПОРЯДОЧИТЬ ПО
<Ваше упорядочение>
В этом случае все должно быть нормально.
Но хочу вас предупредить, что в данном случае надо бы свернуть ваш запрос по складам, номенклатурам, основному поставщику (и, возможно, цене). Ибо в случае вашего запроса все записи по одному складу дадут две строки, и суммы по ним не сложатся. И вот тогда нужно использовать и группировки и слово имеющие.
Следовательно, ваш запрос должен выглядеть примерно так:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВложенныйЗапрос.Склад КАК Склад,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток,
СУММА(ВложенныйЗапрос.КоличествоВРезерве) КАК КоличествоВРезерве,
СУММА(ВложенныйЗапрос.КоличествоКПередаче) КАК КоличествоКПередаче,
СУММА(ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче) КАК СвободныйОстаток,
ВложенныйЗапрос.Номенклатура.ОсновнойПоставщик КАК НоменклатураОсновнойПоставщик,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ (<ВАШ ВЛОЖЕННЫЙ ЗАПРОС>) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ <Ваш Регистр по ценам>
ПО <Ваше соединение>
ГДЕ <Ваше условие. И если без группировок, то нужно было бы поставить
И ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче<0, но мы используем Сгруппировать, поэтому условие уйдет вниз >
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Склад,
ВложенныйЗапрос.Номенклатура,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИМЕЮЩИЕ СУММА(ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве - ВложенныйЗапрос.КоличествоКПередаче) <0
УПОРЯДОЧИТЬ ПО
<Ваше упорядочение>
В этом случае все должно быть нормально.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот