Имя: Пароль:
1C
1С v8
Помогите с запросом.
,
0 H A D G E H O G s
 
21.05.13
13:43
День добрый.

Стыдно признать, но не катит что то.

Есть запрос вида:

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


Он выдаст:

Рожь      Серия12092012
Рожь      Серия18092012
Ячмень    ПустаяСсылка

Мне надо каждую номенклатуру дополнить пустой серией (ПустаяСсылка), например

Рожь      Серия12092012
Рожь      Серия18092012
Рожь      ПустаяСсылка
Ячмень    ПустаяСсылка
1 Shurjk2
 
21.05.13
13:45
Не удивительно, почему ты решил что при левом соединении у тебя будут налы из левой таблицы?
2 shuhard
 
21.05.13
13:45
(0) объединить все
3 Maxus43
 
21.05.13
13:45
Объеденить ВСЁ
ВЫБРАТЬ
   Номенклатура.Ссылка КАК Номенклатура,
   ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК СерияНоменклатуры
всё во вложенный или ВТ, потом Группируй и упорядочить
4 Shurjk2
 
21.05.13
13:45
Делай правое соединение тогда взлетит.
5 H A D G E H O G s
 
21.05.13
13:46
(3) Бррр., там стока условий на номенклатуру.
6 mikecool
 
21.05.13
13:47
"Шелдон, я знаю почему у тебя такие плохие результаты! Это все потому, что ты встречаешься с девушкой!" (с) ТБВ, Крипки
7 H A D G E H O G s
 
21.05.13
13:47
Еще одну ВТ запилить придется.
8 H A D G E H O G s
 
21.05.13
13:47
(4) Как это?
9 Shurjk2
 
21.05.13
13:48
(8) Просто в запросе поменяй слово левое на правое.
10 Maxus43
 
21.05.13
13:49
(5) в (0) не видно было условий) Самый простой способ с Объеденить. О чем товарисч (9) я тоже не въехал пока
11 H A D G E H O G s
 
21.05.13
13:50
(9) В Номенклатурах иногда не бывает Серий.
12 Shurjk2
 
21.05.13
13:51
(11) Так ты серии берешь из справочника серии, сейчас ты выбираешь все серии, а тебе надо выбрать все номенклатуры из справочника номенклатура.
13 Рэйв
 
21.05.13
13:51
Может так?


Выбрать* ИЗ (ВЫБРАТЬ
   Номенклатура.Ссылка КАК Номенклатура,
   СерииНоменклатуры.Ссылка СерияНоменклатуры
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       Правое СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
       ПО (СерииНоменклатуры.Владелец = Номенклатура.Ссылка)
Объеденить ВСЁ
ВЫБРАТЬ
   Номенклатура.Ссылка ,
   ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
ИЗ
   Справочник.Номенклатура КАК Номенклатура) ВнЗапрос
Сгруппировать По
ВнЗапрос.Номенклатура,
ВнЗапрос.СерияНоменклатуры

Упроядочить По
ВнЗапрос.Номенклатура,
ВнЗапрос.СерияНоменклатуры
14 Maxus43
 
21.05.13
13:51
(12) ему надо "каждую номенклатуру дополнить пустой серией (ПустаяСсылка)"
15 Рэйв
 
21.05.13
13:53
+ВСЁ наверное лишнее в объединении
16 Shurjk2
 
21.05.13
13:53
А нет, все таки таблица номенклатура слева, все должно работать.
17 H A D G E H O G s
 
21.05.13
13:53
(13) Бррр.
2 поиска по справочнику номенлактуры. Спасибо, не надо.
Я лучше через ВТ, отсекая все лишнее предварительно.
18 Maxus43
 
21.05.13
13:53
(15) не принципиально, или потеря производительности предполагается?) не слышал о таком
19 Ёпрст
 
21.05.13
13:54
тока ежели с юнионом, будет по несколько значений с нулом, группировать придётся еще
20 H A D G E H O G s
 
21.05.13
13:55
(19) Вместо
ОБЪЕДИНИТЬ ВСЕ
написать
ОБЪЕДИНИТЬ
21 Shurjk2
 
21.05.13
13:56
А если просто добавить ВТ в которой пустые серии будут и с ней соеденить?
22 Maxus43
 
21.05.13
13:56
(20) что даст?
23 H A D G E H O G s
 
21.05.13
13:58
(22) Дублей не будет.
24 chelentano
 
21.05.13
13:59
(22) объединить все - выбирает все, объединить - только уникальные
25 Ёпрст
 
21.05.13
13:59
(23) потеряешь в скорости
26 H A D G E H O G s
 
21.05.13
13:59
(25) А как лучше?
27 Ёпрст
 
21.05.13
14:00
хотя неизвестно, что быстрее будет, сгруппировать(или дистиникт) потом, или просто объединить сразу
28 Ёпрст
 
21.05.13
14:00
(26) :) замерить надо.
29 GANR
 
21.05.13
14:00
(0) И в чем проблема??? Да ты, имхо, просто решил подкинуть форуму задачку для разминки мозга :)))). Не верю я, что H A D G E H O G s не справится с такой задачкой.
30 H A D G E H O G s
 
21.05.13
14:02
(29) Hadgehogs не хотел городить еще одну ВТ в уже целый зоопарк.
31 Maxus43
 
21.05.13
14:09
(30) может таки легче будет при обработке результата добавить? или только запрос?
32 H A D G E H O G s
 
21.05.13
14:10
(31) Это фильтр для последующих Виртуальных таблиц.
33 Серго62
 
21.05.13
14:29
(0) У меня вот это сработало:
ВЫБРАТЬ
   Номенклатура.Ссылка,
   ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК СерияНоменклатуры
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
       ПО (СерииНоменклатуры.Владелец = Номенклатура.Ссылка)
ГДЕ
   НЕ Номенклатура.ЭтоГруппа
34 Серго62
 
21.05.13
14:40
Если для каждой номенклатуры надо добавить запись с пустой серией то тогда вот так:
ВЫБРАТЬ РАЗЛИЧНЫЕ
   Запрос.Ссылка,
   Запрос.СерияНоменклатуры КАК СерияНоменклатуры
ИЗ
   (ВЫБРАТЬ
       Номенклатура.Ссылка КАК Ссылка,
       ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК СерияНоменклатуры
   ИЗ
       Справочник.Номенклатура КАК Номенклатура
           ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
           ПО (СерииНоменклатуры.Владелец = Номенклатура.Ссылка)
   ГДЕ
       НЕ Номенклатура.ЭтоГруппа
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       Номенклатура.Ссылка,
       ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
   ИЗ
       Справочник.Номенклатура КАК Номенклатура
   ГДЕ
       НЕ Номенклатура.ЭтоГруппа) КАК Запрос

УПОРЯДОЧИТЬ ПО
   Запрос.Ссылка.Код,
   СерияНоменклатуры
35 zippygrill
 
21.05.13
14:47
)))
36 Speshuric
 
21.05.13
15:03
(0)есть такой прием:
37 Speshuric
 
21.05.13
15:03
ВЫБРАТЬ
   Номенклатура.Ссылка КАК Номенклатура,
   ЕСТЬNULL(СерииНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК СерияНоменклатуры
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           0 КАК ВариантМультипликатора
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           1) КАК Мультипликатор
       ПО (ИСТИНА)
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
       ПО (СерииНоменклатуры.Владелец = Номенклатура.Ссылка)
           И (Мультипликатор.ВариантМультипликатора = 0)
38 Speshuric
 
21.05.13
15:04
Ой, ЛЕВОЕ СОЕДИНЕНИЕ заменить на ВНУТРЕННЕЕ СОЕДИНЕНИЕ
39 Speshuric
 
21.05.13
15:06
Я тупой под вечер - ничего заменять не надо
40 Очевидно
 
21.05.13
15:08
(34) +1 , взлетит.
41 Maxus43
 
21.05.13
15:11
(40) это уже предлагали 3-4 раза, конечно взлетит