Имя: Пароль:
1C
1С v8
Как в запросе получить все склады?
0 Zombi
 
11.03.12
14:30
Делаю запрос по остаткам и реализации, обращаюсь к регистрам "ПартииТоваров", объединяю с "ТоварыНаСкладах", получаю необходимые данные. Список складов у меня ограничен списком значений, но если на каком то складе не было ни остатков ни оборотов, я в результате запроса его вообще не вижу. Вопрос: Как сделать так, чтобы в результате запроса я видел все склады(пусть с нулевыми показателями), которые есть в списке значений?
1 Wobland
 
11.03.12
14:31
список левое соединение...
2 Рэйв
 
11.03.12
14:31
Помести список во временную таблицу и соединяй с ней
3 Zombi
 
11.03.12
14:33
Вот мой запрос:

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


Как его со списком соединить? Список.Склад =ПартииТоваровНаСкладах.Склад ?
4 Wobland
 
11.03.12
14:36
(3) выбрать * из &ТвойСписок поместить ВТ;
выбрать что-то из вт левое соединение регистр по...
5 Zombi
 
11.03.12
14:46
А у меня на выборку из регистра куча условий стоит, то есть левого соединения не получится ведь?
6 ИС-2
 
11.03.12
14:47
(4) За чем так усложнять.

В первой ВТ выбираем все склады из справочника, где условие Ссылка в &СписокСкладов.
А потом условиях виртуальных таблица партии и остатки проверяем на нахождение в ВТ_Склады.
7 ИС-2
 
11.03.12
14:47
(5) запрос в студию
8 0xFFFFFF
 
11.03.12
14:48
(3) открой для себя параметры виртуальной таблицы.
9 hhhh
 
11.03.12
14:52
(6) тогда не получишь ответа на (0)
10 Zombi
 
11.03.12
14:55
(7) См (3)
(8) В виртуальных таблицах РН "ПартииТоваровНаСкладах" можно обратиться к реквизиту "КодОперации"?
11 hhhh
 
11.03.12
14:57
(10) в остатках точно нет, а в оборотах через Регистратор. Но это нехилые тормоза тогда получатся.
12 Zombi
 
11.03.12
15:00
(11) Поэтому я и не стал использовать виртуальную таблицу.
13 mehfk
 
11.03.12
15:03
Zombi,все еще воюешь с продажами и остатками сводно в одной таблице?
14 0xFFFFFF
 
11.03.12
15:07
(10) ну да - нелогичное сложно в реализации
Это типа
Приход 10 (код операции 1)
Приход 10 (код операции 2)
Расход 15 (код операции 3)
Вопрос - в каком коде операции на остатках 5 штук? :)))
15 Zombi
 
11.03.12
15:07
(13) Так точно! Как освобождаюсь от экстренных задач, берусь за это вот.
16 Zombi
 
11.03.12
15:09
(14) Вопрос: Где тут продажа, а не перемещение?
17 ptrtss
 
11.03.12
15:44
Чорт, решил открыть в конструкторе, да так и просидел пол часа)))

Вот так пойдет?

ВЫБРАТЬ
   Склады.Ссылка
ПОМЕСТИТЬ втСклады
ИЗ
   Справочник.Склады КАК Склады
ГДЕ
   Склады.Ссылка В(&СписокСклады)
   И Склады.Ссылка = &СкладОтправитель
;

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

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладах.Склад,
   ПартииТоваровНаСкладах.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Подзапрос.Номенклатура,
   Подзапрос.Склад,
   СУММА(Подзапрос.Количество) КАК Количество,
   СУММА(Подзапрос.КоличествоОстаток) КАК КоличествоОстаток,
   СУММА(Подзапрос.КолОснСклад) КАК КолОснСклад,
   СУММА(Подзапрос.РасходОснСклад) КАК РасходОснСклад
ПОМЕСТИТЬ втОстаткиИОбороты
ИЗ
   (ВЫБРАТЬ
       Расход.Номенклатура КАК Номенклатура,
       Расход.Склад КАК Склад,
       Расход.Количество КАК Количество,
       0 КАК КоличествоОстаток,
       0 КАК КолОснСклад,
       ВЫБОР
           КОГДА Расход.Склад = &СкладОтправитель
               ТОГДА Расход.Количество
       КОНЕЦ КАК РасходОснСклад
   ИЗ
       втРасход КАК Расход
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ОстаткиНаСкладах.Номенклатура,
       ОстаткиНаСкладах.Склад,
       0,
       ОстаткиНаСкладах.КоличествоОстаток,
       ВЫБОР
           КОГДА ОстаткиНаСкладах.Склад = &СкладОтправитель
               ТОГДА ОстаткиНаСкладах.КоличествоОстаток
       КОНЕЦ,
       0
   ИЗ
       втОстаткиНаСкладах КАК ОстаткиНаСкладах) КАК Подзапрос

СГРУППИРОВАТЬ ПО
   Подзапрос.Номенклатура,
   Подзапрос.Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Склады.Ссылка КАК Склад,
   ОстаткиИОбороты.Номенклатура,
   ОстаткиИОбороты.Количество КАК Количество,
   ОстаткиИОбороты.КоличествоОстаток КАК КоличествоОстаток,
   ОстаткиИОбороты.КолОснСклад КАК КолОснСклад,
   ОстаткиИОбороты.РасходОснСклад КАК РасходОснСклад
ИЗ
   втСклады КАК Склады
       ЛЕВОЕ СОЕДИНЕНИЕ втОстаткиИОбороты КАК ОстаткиИОбороты
       ПО Склады.Ссылка = ОстаткиИОбороты.Склад
ИТОГИ
   СУММА(Количество),
   СУММА(КоличествоОстаток),
   СУММА(КолОснСклад),
   СУММА(РасходОснСклад)
ПО
   Склад
18 Zombi
 
11.03.12
15:51
(17) Нифига себе, ушел долго ковыряться :) Спасибо
19 Zombi
 
12.03.12
10:56
Вот что соорудил в итоге:

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


Всем спасибо за помощь!