Имя: Пароль:
1C
1С v8
Помогите с запросом
0 lanc2233
 
24.01.13
23:28
Нужно получить список номенклатуры с дополнительными реквизитами, которые хранятся в регистре сведений.

Пытаюсь так :

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

В итоге получаю на каждую позицию по две строки. В одной заполнено К1, в другой заполнено К2.

Как написать чтобы на одну позицию была одна строка?
1 Classic
 
24.01.13
23:29
Два раза соединять.
2 Beduin
 
24.01.13
23:29
К1 и К2 тут ни при чем, видимо в регистре сведений по две записи на каждую номенклатуру
3 Beduin
 
24.01.13
23:31
А так тут группировать по номенклатуре
4 Fragster
 
гуру
24.01.13
23:31
(1)+1. или свернуть и Максимум
5 Fragster
 
гуру
24.01.13
23:31
(2) ага, одна  - с одним свойством, другая - с другим...
6 lanc2233
 
24.01.13
23:33
Да, на каждое допсвойство по одной записи. Так что лучше сделать?
7 Fragster
 
гуру
24.01.13
23:34
(6) пофиг что
8 Classic
 
24.01.13
23:36
(6)
Шикарно в шестом посте спрашивать "так что сделать", учитывая, что в первых 5 ответах было уже два варианта
(4)
А что максимум с нулом даст?
(0)
И вообще, что за привычка писать ВЫБОР без ИНАЧЕ
9 lanc2233
 
24.01.13
23:36
Может написать как будет выглядеть блок с соединениями?
10 lanc2233
 
24.01.13
23:36
Может = можете
11 Fragster
 
гуру
24.01.13
23:37
(8) нул меньше всего
12 Fragster
 
гуру
24.01.13
23:37
ну и нул можно заменить на 0 или неопределено
13 lanc2233
 
25.01.13
00:05
Можете написать как будет выглядеть блок с соединениями?
14 Classic
 
25.01.13
00:14
Нужно получить список номенклатуры с дополнительными реквизитами, которые хранятся в регистре сведений.


ВЫБРАТЬ
   ЗначениеСвойствНоменклатуры.Номенклатура.Ссылка КАК Товар,
   ЗначениеСвойствНоменклатуры1.Значение КАК К1,
   ЗначениеСвойствНоменклатуры2.Значение КАК К2,
   ЗначениеСвойствНоменклатуры.ВидСвойства
ИЗ
   Справочник.Номенклатура КАК НОМ
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначениеСвойствНоменклатуры КАК ЗначениеСвойствНоменклатуры1
       ПО НОМ.Ссылка = ЗначениеСвойствНоменклатуры1.Номенклатура
И ЗначениеСвойствНоменклатуры1.ВидСвойства = &К1
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначениеСвойствНоменклатуры КАК ЗначениеСвойствНоменклатуры2
       ПО НОМ.Ссылка = ЗначениеСвойствНоменклатуры2.Номенклатура
И ЗначениеСвойствНоменклатуры2.ВидСвойства = &К2
ГДЕ
   НОМ.Ссылка В ИЕРАРХИИ(&Группа)
15 sapphire
 
25.01.13
00:15
(0) Запрос глупо написан:
ЗначениеСвойствНоменклатуры.ВидСвойства В(&СпВидСВ)

, значит &К1 и &К2 должны принадлежать &СпВидСВ

Если поле ВидСвойства в РегистрСведений.ЗначениеСвойствНоменклатуры инедексировано,
тогда лучше использовать ОБЪЕДИНИТЬ ВСЕ

ЗначениеСвойствНоменклатуры.ВидСвойства в выборке по-любому приведет к множественности, как ни крути.
16 sapphire
 
25.01.13
00:16
(14) Это не совсем то...
Но, отчасти так.

Еще раз,
Если поле ВидСвойства в РегистрСведений.ЗначениеСвойствНоменклатуры индексировано,
тогда лучше использовать ОБЪЕДИНИТЬ ВСЕ
17 Classic
 
25.01.13
00:16
(14)
Вот эту фигню

   ЗначениеСвойствНоменклатуры.ВидСвойства

Надо убрать из запроса
18 Classic
 
25.01.13
00:17
(16)
Твое ОБЪЕДИНИТЬ ВСЕ одну результирующую строчку никак не даст. А ТС попросил одну
19 sapphire
 
25.01.13
00:17
(17) Мы ж не заем, надо ему убрать это или нет
20 Classic
 
25.01.13
00:18
(19)
Надо :)
21 sapphire
 
25.01.13
00:19
(20) Ну, я, лично, не знаю :)
22 sapphire
 
25.01.13
00:19
(18) Потом агрегировать
23 sapphire
 
25.01.13
00:20
Подзапрос с Union all & inner join, потом агрегат MAX по K1,K2
24 Classic
 
25.01.13
00:22
(23)
Зачем Юнион, если агрегировать можно и то, что написано в (0)?
25 sapphire
 
25.01.13
00:23
+(23) в (15)(16) подразумевалось наличие мозга у писателя запроса. Просто идея задействовать индекс.
26 lanc2233
 
25.01.13
00:23
Спасибо, работает )
27 sapphire
 
25.01.13
00:23
(24) см (23)