Имя: Пароль:
1C
1С v8
Как в запросе при соед-нии "один ко многим" поместить результаты в колонки, а не в строки?
,
0 Механик
 
23.07.20
10:00
Возьмём типовой справочник "Номенклатура" из УНФ, в нём есть ТЧ "Дополнительные реквизиты". Видов реквизитов для номенклатуры - 10 штук. Если сделать такой запрос:

"ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
    |    НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ";

В выборке будет таблица с несколькими строками, где будет заполнено дополнительными значениями, а также NULL`ами, если значение доп. реквизита у конкретной номенклатуры отсутствует. И одна и та же номенклатуры будет выведена несколько раз.

А как лучше и проще сделать, чтобы в выборке номенклатура выводилась единожды, а для каждого значения доп. реквизита выводилась отдельная колонка в этой же строке?

Отдельную колонку с заранее известным именем доп. реквизита вывожу так:

    "ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    ЕСТЬNULL(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулПоставщика
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулПоставщика
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ";

Но как сделать, чтобы все доп. реквизиты в одну строку с владельцем-товаром "свернулись"?
1 Механик
 
23.07.20
10:03
(0) То есть чтобы в итоге в выборке было:

Товар1|ЗначениеДопРеквизита1|ЗначениеДопРеквизита2|ЗначениеДопРеквизита3||ЗначениеДопРеквизита4
Товар2|ЗначениеДопРеквизита1|ЗначениеДопРеквизита2|ЗначениеДопРеквизита3||ЗначениеДопРеквизита4
2 Aleksey
 
23.07.20
10:05
типизировать колонки. Т.е. в каждую колонку получать конкретное свойство
3 hhhh
 
23.07.20
10:08
(1) |ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты1
    |        ПО НоменклатураДополнительныеРеквизиты1.Ссылка = Товары.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты2
    |        ПО НоменклатураДополнительныеРеквизиты2.Ссылка = Товары.Ссылка    
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты3
    |        ПО НоменклатураДополнительныеРеквизиты3.Ссылка = Товары.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты4
    |        ПО НоменклатураДополнительныеРеквизиты4.Ссылка = Товары.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты5
    |        ПО НоменклатураДополнительныеРеквизиты5.Ссылка = Товары.Ссылка
4 Aleksey
 
23.07.20
10:30
(3) Почти только в каждом левом соединение указать свойство

Допустим вам нужно вывести из доп реквизитов только вес, как бы вы в запросе сделали?

А теперь вес и масса

А теперь вес, масса и ....
5 D_E_S_131
 
23.07.20
13:56
|ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты1
    |        ПО НоменклатураДополнительныеРеквизиты1.Ссылка = Товары.Ссылка И НоменклатураДополнительныеРеквизиты1.Свойство = &СвойствоВес
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты2
    |        ПО НоменклатураДополнительныеРеквизиты2.Ссылка = Товары.Ссылка И НоменклатураДополнительныеРеквизиты2.Свойство = &СвойствоМасса
6 Garykom
 
гуру
23.07.20
14:00
Можно через Когда
7 Garykom
 
гуру
23.07.20
14:01
8 bootini
 
24.07.20
09:10
"ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    МАКСИМУМ(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулПоставщика
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулПоставщика,
    |    МАКСИМУМ(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулКлиента
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулКлиента
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ"
СГРУППИРОВАТЬ ПО
    Товары.Ссылка;



как то так
9 Конструктор1С
 
24.07.20
09:30
(0) только через СКД. В запросах 1с нет PIVOT или чего-то подобного