Запрос помогите
13.02.2009
14:09
#1
Проблемка такая:
Нужен запрос, который отбирает ту номенклатуру из документа приходная накладная по которой не заданы цены в закупочном прайсе
типа :
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.ТипЦен
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = ПоступлениеТоваровУслуг.Товары.Номенклатура)
ГДЕ
ПоступлениеТоваровУслуг.Ссылка = &Ссылка
только тут он выбирает ту номенклатуру которая есть в прайсе, а надо наоборот
Нужен запрос, который отбирает ту номенклатуру из документа приходная накладная по которой не заданы цены в закупочном прайсе
типа :
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.ТипЦен
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = ПоступлениеТоваровУслуг.Товары.Номенклатура)
ГДЕ
ПоступлениеТоваровУслуг.Ссылка = &Ссылка
только тут он выбирает ту номенклатуру которая есть в прайсе, а надо наоборот
13.02.2009
14:47
#2
Так работает:
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Количество
ИЗ
(ВЫБРАТЬ
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Номенклатура, &ПустаяНоменклатура) КАК Номенклатура,
РеализацияТоваровУслугТовары.Количество КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
РеализацияТоваровУслугТовары.Ссылка = &ЭтаНакладная) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос.Номенклатура <> &ПустаяНоменклатура
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Количество
ИЗ
(ВЫБРАТЬ
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Номенклатура, &ПустаяНоменклатура) КАК Номенклатура,
РеализацияТоваровУслугТовары.Количество КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
РеализацияТоваровУслугТовары.Ссылка = &ЭтаНакладная) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос.Номенклатура <> &ПустаяНоменклатура
13.02.2009
16:43
#7
Вот полностью готовый запрос который проверяет, если цены изменились или их нет в закупочном прайсе
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Сумма,
ВложенныйЗапрос.Количество,
(ВложенныйЗапрос.Сумма + ВложенныйЗапрос.СуммаНДС) / ВложенныйЗапрос.Количество КАК ЦенаДок,
ВложенныйЗапрос.НоменклатураТип,
ВложенныйЗапрос.Цена
ИЗ
(ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
ПоступлениеТоваровУслугТовары.Сумма КАК Сумма,
ПоступлениеТоваровУслугТовары.Количество КАК Количество,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Номенклатура, &ПустаяНоменклатура) КАК НоменклатураТип,
ПоступлениеТоваровУслугТовары.СуммаНДС КАК СуммаНДС
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ПО (ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка) КАК ВложенныйЗапрос
ГДЕ
(ВложенныйЗапрос.Цена <> (ВложенныйЗапрос.Сумма + ВложенныйЗапрос.СуммаНДС) / ВложенныйЗапрос.Количество
ИЛИ ВложенныйЗапрос.НоменклатураТип = &ПустаяНоменклатура)
Расшифровка параметров
&ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупочные")
&ПустаяНоменклатура=Справочники.Номенклатура.ПустаяСсылка
&Ссылка=ЭтотОбъект
Если что поправьте
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Сумма,
ВложенныйЗапрос.Количество,
(ВложенныйЗапрос.Сумма + ВложенныйЗапрос.СуммаНДС) / ВложенныйЗапрос.Количество КАК ЦенаДок,
ВложенныйЗапрос.НоменклатураТип,
ВложенныйЗапрос.Цена
ИЗ
(ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
ПоступлениеТоваровУслугТовары.Сумма КАК Сумма,
ПоступлениеТоваровУслугТовары.Количество КАК Количество,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Номенклатура, &ПустаяНоменклатура) КАК НоменклатураТип,
ПоступлениеТоваровУслугТовары.СуммаНДС КАК СуммаНДС
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ПО (ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка) КАК ВложенныйЗапрос
ГДЕ
(ВложенныйЗапрос.Цена <> (ВложенныйЗапрос.Сумма + ВложенныйЗапрос.СуммаНДС) / ВложенныйЗапрос.Количество
ИЛИ ВложенныйЗапрос.НоменклатураТип = &ПустаяНоменклатура)
Расшифровка параметров
&ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупочные")
&ПустаяНоменклатура=Справочники.Номенклатура.ПустаяСсылка
&Ссылка=ЭтотОбъект
Если что поправьте
13.02.2009
17:00
#8
Нельзя использовать ПОЛНОЕ СОЕДИНЕНИЕ. Из-за этого не попадет в запрос номенклатура, которая отсутствуе в регистре сведений. А это как раз та номенклатура, которую по определению мы должны найти. Значит - ЛЕВОЕ СОЕДИНЕНИЕ. Далее, зачем равенство "ВложенныйЗапрос.Номенклатура <> &ПустаяНоменклатура" Заменили на равенство "ВложенныйЗапрос.НоменклатураТип = &ПустаяНоменклатура". Теперь будут попадать в запрос только позиции с пустой номенклатурой, т.е. ничего. Использование выражение "(ВложенныйЗапрос.Цена <> (ВложенныйЗапрос.Сумма + ВложенныйЗапрос.СуммаНДС) / ВложенныйЗапрос.Количество
" опасно, посколку могут возникнуть ошибки округления. Точнее, наверняка возникнут. Лучше заново поставить задачу. Ведь цены в табличной части документа могут отличаться от цен в регистре. У них может быть разная валюта. Все это не аккуратно.
" опасно, посколку могут возникнуть ошибки округления. Точнее, наверняка возникнут. Лучше заново поставить задачу. Ведь цены в табличной части документа могут отличаться от цен в регистре. У них может быть разная валюта. Все это не аккуратно.
Читают тему
(гостей: 1)