Имя: Пароль:
1C
 
Отобрать в соединении запроса все записи
0 Штурман
 
03.12.19
08:28
Есть запрос к одному документу.
Однако при выполнении он выводит только запись об одном товаре, который отбирается в условии (справа), в то время как нужно вывести все товары, которые слева.
Что не так с запросом?



ВЫБРАТЬ
    ВложенныйЗапрос.Наименование КАК Наименование,
    Товары.Наименование КАК Наименование1,
    Товары.ВидТовара,
    Товары.СрокХраненияС,
    Товары.СрокХраненияДо
ИЗ
    (ВЫБРАТЬ
        НакладныеНаименование.Наименование КАК Наименование
    ИЗ
        Документ.Накладные.Наименование КАК НакладныеНаименование
    ГДЕ
        НакладныеНаименование.Ссылка = &Ссылка
    
    СГРУППИРОВАТЬ ПО
        НакладныеНаименование.Наименование) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Накладные.Наименование КАК Товары
        ПО ВложенныйЗапрос.Наименование = Товары.Наименование
ГДЕ
    Товары.Ссылка = &Ссылка
    И Товары.ВидТовара = &ВидТовара
АВТОУПОРЯДОЧИВАНИЕ
1 Штурман
 
03.12.19
08:30
Допустим таблица такая:

Груши Фрукт
Яблоки Фрукт
Картошка Овощ

При выполнении запроса и отборе условия вид товара - Овощ, выводится только
Картошка Картошка

А нужно так:
Груши    -
Яблоки   -
Картошка Картошка
2 ДенисЧ
 
03.12.19
08:33
Условие из ГДЕ перенеси в соединение
3 Случайный прохожий
 
03.12.19
08:36
Кто додумался табличную часть назвать "Наименование"?
4 Штурман
 
03.12.19
08:37
(2) можете уточнить куда конретнее?
5 Штурман
 
03.12.19
08:37
(3) это просто пример )
6 Случайный прохожий
 
03.12.19
08:38
Я бы сделал без соединения. Просто в список полей написал ВЫБОР КОГДА ВидТовара = &ВидТовара ТОГДА ... ИНАЧЕ ...
7 Штурман
 
03.12.19
08:39
(6) в самой таблице много дубликатов
8 catena
 
03.12.19
08:40
(4)Условия на левую таблицу превращают левое соединение во внутреннее.
9 Штурман
 
03.12.19
08:41
(8) и куда условие переместить?
10 Случайный прохожий
 
03.12.19
08:42
(7) И?

ВЫБРАТЬ РАЗЛИЧНЫЕ
        НакладныеНаименование.Наименование КАК Наименование,
    ВЫБОР КОГДА НакладныеНаименование.ВидТовара = &ВидТовара
    ТОГДА НакладныеНаименование.ВидТовара
    ИНАЧЕ "----"
    КОНЕЦ КАК ВидТовара
    ИЗ
        Документ.Накладные.Наименование КАК НакладныеНаименование
    ГДЕ
        НакладныеНаименование.Ссылка = &Ссылка

Не то?
11 Сияющий в темноте
 
03.12.19
08:43
что нужно?
показать все документы,где есть товар в условии?
12 Штурман
 
03.12.19
08:44
(11) нет, вывести без дубликатов все товары из документов, плюс чтобы слева был еще столбец, где есть эти же товары с определенным условием
13 Случайный прохожий
 
03.12.19
08:47
ВЫБРАТЬ
        НакладныеНаименование.Наименование КАК Наименование,
    ВЫБОР КОГДА НакладныеНаименование.ВидТовара = &ВидТовара
    ТОГДА НакладныеНаименование.Наименование
    ИНАЧЕ "----"
    КОНЕЦ КАК ВидТовара
    ИЗ
        Документ.Накладные.Наименование КАК НакладныеНаименование
    ГДЕ
        НакладныеНаименование.Ссылка = &Ссылка

Снова не то? :)
14 Штурман
 
03.12.19
08:52
А вообще табица примерно такая:

Наименование    ДатаС   ДатаДо   Тип
Яблоки          13.07   03.08    основная
Груши           11.07   07.08    основная
Груши           08.08   23.08    дополнительная
Картофель       20.07   28.07    основная
Картофель       29.07   13.08    дополнительная
Картофель       14.08   16.08    факическая

Нужно сократить таблицу, допустим, если после основной идет дополнительная, то группируем, то же самое с фактической
т.е. в итоге таблица должна быть примерно такая:

Наименование    ДатаС   ДатаДо
Яблоки          13.07   03.08
Груши           11.07   28.08
Картофель       20.07   16.08

Я хотел две таблицы соеденить, чтобы получилось примерно так:
Яблоки 13.07   03.08
Груши  11.07   07.08   Груши   08.08   23.08
А дальше уже приводить к виду
15 catena
 
03.12.19
08:52
(9)В соединение.
16 catena
 
03.12.19
08:53
(14)Эту задачу запрос из (0)Не решит. Сроки-то разные.
17 Штурман
 
03.12.19
08:54
(16) это предполагалось будет часть большого запроса )

вот я основную задачу выложил, может есть другие варианты?
не как в (0), а другим способом?
18 catena
 
03.12.19
08:56
ВЫБРАТЬ
    НакладныеНаименование.Наименование КАК Наименование1,
    НакладныеНаименование.ВидТовара,
    НакладныеНаименование.СрокХраненияС,
    НакладныеНаименование.СрокХраненияДо
ИЗ
          Документ.Накладные.Наименование КАК НакладныеНаименование
ГДЕ
    НакладныеНаименование.Ссылка = &Ссылка
    И НакладныеНаименование.ВидТовара = &ВидТовара
АВТОУПОРЯДОЧИВАНИЕ
19 Случайный прохожий
 
03.12.19
08:58
Мб колонку "тип" отбросить и двумя левыми соединениями по минимальной и максимальной дате?
20 Штурман
 
03.12.19
09:00
(18) так выводит один товар
21 Штурман
 
03.12.19
09:01
(19) а группировку еще же делать придется, не сойдется может?
22 Штурман
 
03.12.19
09:04
в общем актуальна проблема с запросом к таблице в (14)

Нужно как-то сравнить, и если ДатаПо равна ДатаС плюс 1 день на следующей строке, то объеденить
23 Штурман
 
03.12.19
09:05
может банально вытянуть все записи запросом из таблицы, а потом кодом вогнать в массив, и там уже объединять?
24 Случайный прохожий
 
03.12.19
09:07
(22) А если они в один период не схлапываются, то выводить в разных строках? Здесь скорей всего нужно в ТЗ выгружать и ее обрабатывать
25 Штурман
 
03.12.19
09:08
(24) выводить в разных )
26 vicof
 
03.12.19
09:17
(8) На правую
27 Штурман
 
03.12.19
09:21
тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Фрукт");
    тз.Колонки.Добавить("ДатаС");
    тз.Колонки.Добавить("ДатаПо");
    тз.Колонки.Добавить("Вид");
    
    Стр = тз.Добавить();
    стр.Фрукт = "Яблоки";
    стр.ДатаС = Дата(2019, 07, 13);
    стр.ДатаПо = Дата(2019, 08, 03);
    стр.Вид = "основная";
    
    Стр = тз.Добавить();
    стр.Фрукт = "Груши";
    стр.ДатаС = Дата(2019, 07, 11);
    стр.ДатаПо = Дата(2019, 08, 07);
    стр.Вид = "основная";
    
    Стр = тз.Добавить();
    стр.Фрукт = "Груши";
    стр.ДатаС = Дата(2019, 08, 08);
    стр.ДатаПо = Дата(2019, 08, 23);
    стр.Вид = "дополнительная";
28 catena
 
03.12.19
09:48
(22)так это другая задача. Тут либо таблицу обрабатывать, либо запросом соединять с собой, при чем не один раз.