Имя: Пароль:
1C
1С v8
Помогите построить запрос.Остатки по всей номенклатуре по каждому складу
0 protsenkodv
 
31.08.12
12:11
Нужно получить своб остаток по Номенклатуре по каждому складу.
Номенклатура и склад - параметры.
Причем если остатка на каком-то складе нет то нужно чтоб в результате все равно выдавался этот склад с остатком 0. И тоже самое по номенклатуре.
В моем запросе результат только по тем складам на которых остатки есть.

ВЫБРАТЬ
   ВсяНоменклатура.Номенклатура КАК Номенклатура,
   СвОстаткиПоВсемСкладам.Склад,
   СвОстаткиПоВсемСкладам.КоличествоОстаток
ИЗ
   (ВЫБРАТЬ
       Номенклатура.Ссылка КАК Номенклатура
   ИЗ
       Справочник.Номенклатура КАК Номенклатура
   ГДЕ
       Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)) КАК ВсяНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Склады.Ссылка КАК Склад,
           СвОстаткиСклады.Номенклатура КАК Номенклатура,
           СвОстаткиСклады.КоличествоОстаток КАК КоличествоОстаток
       ИЗ
           Справочник.Склады КАК Склады
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ТоварыНаСкладахОстатки.Склад КАК Склад,
                   ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                   ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
               ИЗ
                   РегистрНакопления.ТоварыНаСкладах.Остатки(
                           &ДатаКонца,
                           Номенклатура В ИЕРАРХИИ (&Группа)
                               И Склад В (&Склады)) КАК ТоварыНаСкладахОстатки
                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                               &ДатаКонца,
                               Номенклатура В ИЕРАРХИИ (&Группа)
                                   И Склад В (&Склады)) КАК ТоварыВРезервеНаСкладахОстатки
                       ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                           И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад) КАК СвОстаткиСклады
               ПО Склады.Ссылка = СвОстаткиСклады.Склад
       ГДЕ
           Склады.Ссылка В(&Склады)) КАК СвОстаткиПоВсемСкладам
       ПО ВсяНоменклатура.Номенклатура = СвОстаткиПоВсемСкладам.Номенклатура
ГДЕ
   ВсяНоменклатура.Номенклатура.ЭтоГруппа = ЛОЖЬ

УПОРЯДОЧИТЬ ПО
   Номенклатура
1 Drock
 
31.08.12
12:13
ЕстьNull (Остаток,0)
2 mikecool
 
31.08.12
12:13
полное соединение номенклатуры, складов и остатков
3 Zmich
 
31.08.12
12:13
Полное соединение делай, а не левое.
4 pessok
 
31.08.12
12:13
2пц...

ВЫБРАТЬ
   СвободныеОстаткиОстаткиИОбороты.Склад,
   СвободныеОстаткиОстаткиИОбороты.Номенклатура,
   СвободныеОстаткиОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
   РегистрНакопления.СвободныеОстатки.ОстаткиИОбороты(
           &НачалоПериода,
           &КонецПериода,
           ,
           ,
           Склад = &Склад
               И Номенклатура = &Номенклатура) КАК СвободныеОстаткиОстаткиИОбороты
5 pessok
 
31.08.12
12:16
у складам слева зацепи этот запрос и естьnull(СвободныеОстаткиОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
6 Reset
 
31.08.12
12:41
(0)
Ниже вариант для случая, "когда товара нет ни на одном складе, то не выводить вообще".
Если нужно выводить для всех товаров,даже если нигде нет ==> вместо пакета заполняющего НоменклатураВНаличии использовать выборку со справочника номенклатура.
Если нужно выводить все склады, даже если на них ничего нет ==> вместо пакета заполняющего СкладыСНаличием использовать выборку со справочника склады.

ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура
ПОМЕСТИТЬ НоменклатураВНаличии
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(
           ,
           Склад В (&Склады)
               И Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Склад
ПОМЕСТИТЬ СкладыСНаличием
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки(
           ,
           Склад В (&Склады)
               И Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СкладыСНаличием.Склад,
   НоменклатураВНаличии.Номенклатура
ПОМЕСТИТЬ СкладыНоменклатура
ИЗ
   НоменклатураВНаличии КАК НоменклатураВНаличии
       ПОЛНОЕ СОЕДИНЕНИЕ СкладыСНаличием КАК СкладыСНаличием
       ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СкладыНоменклатура.Склад КАК Склад,
   СкладыНоменклатура.Номенклатура,
   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество
ИЗ
   СкладыНоменклатура КАК СкладыНоменклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
               ,
               Склад В (&Склады)
                   И Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки
       ПО СкладыНоменклатура.Склад = ТоварыНаСкладахОстатки.Склад
           И СкладыНоменклатура.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура

7 protsenkodv
 
31.08.12
14:29
Спасибо за ответы.
Сделал по своему. Вроде получилось.

ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.Склады,
   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ
   (ВЫБРАТЬ
       Номенклатура.Ссылка КАК Номенклатура,
       Склады.Ссылка КАК Склады
   ИЗ
       Справочник.Номенклатура КАК Номенклатура,
       Справочник.Склады КАК Склады
   ГДЕ
       Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
       И Склады.Ссылка В(&Склады)) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
               &ДатаКонца,
               Номенклатура В ИЕРАРХИИ (&Группа)
                   И Склад В (&Склады)) КАК ТоварыНаСкладахОстатки
       ПО ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
           И ВложенныйЗапрос.Склады = ТоварыНаСкладахОстатки.Склад
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
               &ДатаКонца,
               Номенклатура В ИЕРАРХИИ (&Группа)
                   И Склад В (&Склады)) КАК ТоварыВРезервеНаСкладахОстатки
       ПО ВложенныйЗапрос.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
           И ВложенныйЗапрос.Склады = ТоварыВРезервеНаСкладахОстатки.Склад
8 Sammo
 
31.08.12
14:31
(7) Обычно лучше через временные таблицы, тогда более предсказуемый план в скуле
9 protsenkodv
 
31.08.12
15:33
(8) поясните, пожалуста, "более предсказуемый план в скуле".
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший