Имя: Пароль:
1C
1С v8
Запрос по остаткам товаров в разрезе характеристик номенклатуры и цен
0 Kuryshev
 
25.04.12
17:41
Подскажите пожалуйста, как выбрать цены номенклатуры (одна номенклатура может быть как с характеристикой, так и без нее). Написал запрос, но есть проблема: если номенклатуре устанавливали цену без характеристики (что тоже резонно), то результат запроса - цена без характеристики пустая. Конфигурация КА 8.
ВЫБРАТЬ
   Остатки.Склад,
   ВЫБОР
       КОГДА Остатки.МестоХранения = ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
           ТОГДА ВложенныйЗапрос.МестоХранения
       ИНАЧЕ Остатки.МестоХранения
   КОНЕЦ КАК МестоХранения,
   Остатки.Номенклатура,
   Остатки.ХарактеристикаНоменклатуры,
   СУММА(Остатки.СвободныйОстаток) КАК СвободныйОстаток,
   СУММА(Остатки.ОстатокНаСкладе) КАК ОстатокНаСкладе,
   СУММА(Остатки.Резерв) КАК Резерв,
   СРЕДНЕЕ(ЦеныНоменклатурыСрезПоследних.Цена * ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент) КАК Цена,
   СУММА(ЦеныНоменклатурыСрезПоследних.Цена * ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * Остатки.ОстатокНаСкладе) КАК Сумма,
   ЦеныНоменклатурыСрезПоследних.Период
ИЗ
   (ВЫБРАТЬ
       СвободныеОстаткиОстатки.Склад КАК Склад,
       СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
       СвободныеОстаткиОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) КАК СвободныйОстаток,
       0 КАК ОстатокНаСкладе,
       0 КАК Резерв,
       СвободныеОстаткиОстатки.МестоХранения КАК МестоХранения
   ИЗ
       РегистрНакопления.СвободныеОстатки.Остатки(&Период, ) КАК СвободныеОстаткиОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад,
       ТоварыНаСкладахОстатки.Номенклатура,
       ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
       0,
       ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0),
       0,
       ТоварыНаСкладахОстатки.МестоХранения
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыВРезервеНаСкладахОстатки.Склад,
       ТоварыВРезервеНаСкладахОстатки.Номенклатура,
       ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры,
       0,
       0,
       ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0),
       NULL
   ИЗ
       РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ) КАК ТоварыВРезервеНаСкладахОстатки) КАК Остатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
       ПО Остатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
           И Остатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
           МестаХраненияНоменклатуры.Склад КАК Склад,
           МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения
       ИЗ
           РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
       ГДЕ
           МестаХраненияНоменклатуры.Приоритет = 0) КАК ВложенныйЗапрос
       ПО Остатки.Склад = ВложенныйЗапрос.Склад
           И Остатки.Номенклатура = ВложенныйЗапрос.Номенклатура
ГДЕ
   1 = 1

СГРУППИРОВАТЬ ПО
   Остатки.Склад,
   Остатки.Номенклатура,
   Остатки.ХарактеристикаНоменклатуры,
   ВЫБОР
       КОГДА Остатки.МестоХранения = ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
           ТОГДА ВложенныйЗапрос.МестоХранения
       ИНАЧЕ Остатки.МестоХранения
   КОНЕЦ,
   ЦеныНоменклатурыСрезПоследних.Период
1 palpetrovich
 
25.04.12
17:46
Извиняюсь, в код не вникал, а разве у РС ЦеныНоменклатуры нет измерения ХарактеристикаНоменклатуры? ...в смысле - код должен выглядеть попроще ;)
2 palpetrovich
 
25.04.12
17:50
+1 зря не вникал, в сабже немного не так сказано  :)
3 Нуф-Нуф
 
25.04.12
17:50
разбивай запросы на пакетные и отлаживай
4 Нуф-Нуф
 
25.04.12
17:52
а по сабжу - запрос жесть
5 Buster007
 
25.04.12
17:56
ГДЕ
   1 = 1
Класс )
Закон Брукера: Даже маленькая практика стоит большой теории.