Имя: Пароль:
1C
1С v8
Соединение таблиц в запросе
0 tommi
 
20.04.15
16:03
Есть справочник Номенклатуры  и 3 таблицы с колонками : Склад,Ном-ра,КолВо. И такой запрос :

    ВЫБРАТЬ
    ВыбНоменклатура.Номенклатура,
    ЕСТЬNULL(Буфер1.Склад, ЕСТЬNULL(Буфер2.Склад, Буфер3.Склад)) КАК Склад,
    Буфер1.Количество1,
    Буфер2.Количество2,
    Буфер3.Количество3
ИЗ
    ВыбНоменклатура КАК ВыбНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Буфер1 КАК Буфер1
            ПОЛНОЕ СОЕДИНЕНИЕ Буфер3 КАК Буфер3
            ПО Буфер1.Номенклатура = Буфер3.Номенклатура
                И Буфер1.Склад = Буфер3.Склад
            ПОЛНОЕ СОЕДИНЕНИЕ Буфер2 КАК Буфер2
            ПО Буфер1.Номенклатура = Буфер2.Номенклатура
                И Буфер1.Склад = Буфер2.Склад
        ПО ВыбНоменклатура.Номенклатура = Буфер1.Номенклатура

Если в Буфер1 нет ном-ры то и остальные таблицы не соединяются с этой ном-ой.
1 shuhard_серый
 
20.04.15
16:04
(0) используй объединить все
2 D_E_S_131
 
20.04.15
16:06
А чего бы "левым соединением" не получать данные из таблиц "Буфер"?
3 DrShad
 
20.04.15
16:08
буферы соединить во вложенном запросе
4 tommi
 
20.04.15
16:09
нет мне надо что было так ,если
Ном-ра:
Ном1
Ном2

Буфер1:
Ном1 Скл1 К1

Буфер2:
Ном1 Скл1 К2
Ном2 Скл2 К2

Буфер3:
Ном1 Скл1 К3
Ном1 Скл3 К3

То получилось бы

Ном1 Скл1 К1 К2 К3
Ном1 Скл2 -  К2 -
Ном1 Скл3 -   - К3

"-" - null
5 tommi
 
20.04.15
16:09
понятно что можно было во вложенном,но буферы слишком большие,а но-ра там несколько позиций,неоптимально
6 tommi
 
20.04.15
16:10
можно ли как то в одном так сказать соединении?
7 DrShad
 
20.04.15
16:12
соединяй каждый буфер с номенклатурой, а не между собой
8 tommi
 
20.04.15
16:13
тогда будут склады повторятся
Ном Скл1 К1 - -
Ном Скл1 - К2 -
9 DrShad
 
20.04.15
16:14
(8) с фига ли?
10 DrShad
 
20.04.15
16:15
ааааа, ну да будут
11 DrShad
 
20.04.15
16:15
ну тогда либо вложенный либо никак
12 AntonH851
 
20.04.15
16:16
Выбрать
  Данные.Ном,
  Данные.Скл,
  СУММА(Данные.Кол1) КАК Кол1,
  СУММА(Данные.Кол2) КАК Кол2,
  СУММА(Данные.Кол3) КАК Кол4
ИЗ
(Выбрать
Ном,
Скл,
Кол Как Кол1,
0 Как Кол2,
0 Как Кол3
Из
буффер1

объединить все

Выбрать
ном,
скл,
0,
Кол,
0
Из
буффер2

Объединить все

Выбрать
ном,
скл,
0,
0,
Кол
Из
буффер3)
КАК Данные
Сгруппировать по Ном, скл
13 tommi
 
20.04.15
16:18
тогда вылезут лишние ном-ры,можно конечно условие потом поставить.Но я так понимаю соединением никак?
14 fishb1
 
20.04.15
16:58
(13)
> Но я так понимаю соединением никак?
Соединение не получится, потому что это задача на ОБЪЕДИНЕНИЕ :)
> тогда вылезут лишние ном-ры,можно конечно условие потом поставить.

Если сделать так, то не вылезут:

ВЫБРАТЬ
    ВыбНоменклатура.Номенклатура КАК Номенклатура,
    Буфера.Склад КАК Склад,
    Буфера.К1,
    Буфера.К2,
    Буфера.К3
ИЗ
    ВыбНоменклатура КАК ВыбНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            Буфера.Номенклатура КАК Номенклатура,
            Буфера.Склад КАК Склад,
            СУММА(Буфера.К1) КАК К1,
            СУММА(Буфера.К2) КАК К2,
            СУММА(Буфера.К3) КАК К3
        ИЗ
            (ВЫБРАТЬ
                Буфер1.Номенклатура КАК Номенклатура,
                Буфер1.Склад КАК Склад,
                Буфер1.Количество КАК К1,
                0 КАК К2,
                0 КАК К3
            ИЗ
                Буфер1 КАК Буфер1
            
            ОБЪЕДИНИТЬ ВСЕ
            
            ВЫБРАТЬ
                Буфер2.Номенклатура,
                Буфер2.Склад,
                0,
                Буфер2.Количество,
                0
            ИЗ
                Буфер2 КАК Буфер2
            
            ОБЪЕДИНИТЬ ВСЕ
            
            ВЫБРАТЬ
                Буфер3.Номенклатура,
                Буфер3.Склад,
                0,
                0,
                Буфер3.Количество
            ИЗ
                Буфер3 КАК Буфер3) КАК Буфера
        
        СГРУППИРОВАТЬ ПО
            Буфера.Номенклатура,
            Буфера.Склад) КАК Буфера
        ПО ВыбНоменклатура.Номенклатура = Буфера.Номенклатура
Программист всегда исправляет последнюю ошибку.