Имя: Пароль:
1C
1С v8
Несколько вложенных запросов
,
0 St-Anger
 
11.01.17
18:00
Добрый день.
Запрос состоит из 2х вложенных запросов.

    |ВЫБРАТЬ
    |    ВложенныйЗапрос.ДатаПроверки КАК ДатаПроверки,
    |    ВложенныйЗапрос1.ДатаПечати КАК ДатаПечати
    |ИЗ
    |    (ВЫБРАТЬ ПЕРВЫЕ 1
    |        ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПроверки
    |    ИЗ
    |        Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
    |    ГДЕ
    |        ЗаказПокупателяВремяПечати.Ссылка = &Док
    |        И ЗаказПокупателяВремяПечати.ПечатнаяФорма = "Проверен"
    |    
    |    УПОРЯДОЧИТЬ ПО
    |        ДатаПроверки) КАК ВложенныйЗапрос,
    |    (ВЫБРАТЬ ПЕРВЫЕ 1
    |        ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПечати
    |    ИЗ
    |        Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
    |    ГДЕ
    |        ЗаказПокупателяВремяПечати.Ссылка = &Док
    |        И ЗаказПокупателяВремяПечати.ПечатнаяФорма = "На склад"
    |    
    |    УПОРЯДОЧИТЬ ПО
    |        ДатаПечати) КАК ВложенныйЗапрос1
    |";

Если результат одного вложенного запроса пустой, то и общий результат пустой. Хотя результат второго вложенного запроса не пустой.
1 Волшебник
 
модератор
11.01.17
18:01
соедини их конструкцией ОБЪЕДИНИТЬ ВСЕ
2 St-Anger
 
11.01.17
18:08
(1) каким образом, если у меня вложенные запросы?
3 Мимохожий Однако
 
11.01.17
18:12
(0) В чём цель сего творения? Попробуй модные пакетные.
4 mkalimulin
 
11.01.17
18:13
(0) Умножение на 0 дает 0. Ты в курсе?
5 Джинн
 
11.01.17
18:14
(0) Хрень какая-то :(
6 mehfk
 
11.01.17
18:15
(0) https://ru.wikipedia.org/wiki/Пустое_множество
7 St-Anger
 
11.01.17
18:21
(3) Есть табличная часть в документе заказ, в которую записываются строки с разным значением "ПечатнаяФорма" и разным значением даты (типа протоколирование). Мне нужно выбрать от туда самые ранние значения по определенным значениям "ПечатнаяФорма".
8 St-Anger
 
11.01.17
18:22
(4) а где идет перемножение?
9 Alexandr_U1982
 
11.01.17
18:24
(8)Если не указано соединение между таблица, то СУБД выполняет декартово произведение таблиц(множеств).
10 mehfk
 
11.01.17
18:25
11 St-Anger
 
11.01.17
18:26
(10) не открывается
12 Мимохожий Однако
 
11.01.17
18:26
Я не вижу смысла использовать вложенные запросы. Пакеты - наше всё ))
13 St-Anger
 
11.01.17
18:27
(12) мусорные пакеты? )))
14 mehfk
 
11.01.17
18:30
(11) К Лефмихалыч обратись
15 St-Anger
 
11.01.17
18:33
Сделал так, но как-то не кошерно выходит. Результаты от запросов в разных строках.

    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПечати,
    |    NULL КАК ДатаПроверки
    |ИЗ
    |    Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
    |ГДЕ
    |    ЗаказПокупателяВремяПечати.Ссылка = &док
    |    И ЗаказПокупателяВремяПечати.ПечатнаяФорма = "На склад"
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    NULL,
    |    ЗаказПокупателяВремяПечати.ДатаПечати
    |ИЗ
    |    Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
    |ГДЕ
    |    ЗаказПокупателяВремяПечати.Ссылка = &док
    |    И ЗаказПокупателяВремяПечати.ПечатнаяФорма = "Проверен"
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДатаПечати
    |";
16 VladZ
 
11.01.17
18:34
(0) Что за бред?
17 Мимохожий Однако
 
11.01.17
18:35
(13) Да.
18 Мимохожий Однако
 
11.01.17
18:35
А еще , я слышал, есть временные таблицы
19 St-Anger
 
11.01.17
18:35
(16) какие будут предложения?
20 St-Anger
 
11.01.17
18:36
(18) пробовал, такой же результат.
21 mehfk
 
11.01.17
18:36
(15) Оберни в подзапрос и выбери максимум каждого поля.
22 VladZ
 
11.01.17
18:37
(19) А что нужно в итоге получить?
23 Мимохожий Однако
 
11.01.17
18:37
Делай тогда перебором ТЧ
24 St-Anger
 
11.01.17
18:38
(23) хотелось одним запросом красиво сделать
25 St-Anger
 
11.01.17
18:38
(22) (7)
26 Мимохожий Однако
 
11.01.17
18:40
(20) Покажи этот вариант
27 VladZ
 
11.01.17
18:41
(25) Тогда вариант (21)
28 St-Anger
 
11.01.17
18:44
(26)
"ВЫБРАТЬ ПЕРВЫЕ 1
                             |    ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПечати
                             |ПОМЕСТИТЬ втДатаПечати
                             |ИЗ
                             |    Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
                             |ГДЕ
                             |    ЗаказПокупателяВремяПечати.Ссылка = &док
                             |    И ЗаказПокупателяВремяПечати.ПечатнаяФорма = ""На склад""
                             |
                             |УПОРЯДОЧИТЬ ПО
                             |    ДатаПечати
                             |;
                             |
                             |////////////////////////////////////////////////////////////////////////////////
                             |ВЫБРАТЬ ПЕРВЫЕ 1
                             |    ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПроверки
                             |ПОМЕСТИТЬ втДатаПроверки
                             |ИЗ
                             |    Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
                             |ГДЕ
                             |    ЗаказПокупателяВремяПечати.Ссылка = &док
                             |    И ЗаказПокупателяВремяПечати.ПечатнаяФорма = ""Проверен""
                             |
                             |УПОРЯДОЧИТЬ ПО
                             |    ДатаПроверки
                             |;
                             |
                             |////////////////////////////////////////////////////////////////////////////////
                             |ВЫБРАТЬ
                             |    втДатаПечати.ДатаПечати,
                             |    втДатаПроверки.ДатаПроверки
                             |ИЗ
                             |    втДатаПечати КАК втДатаПечати,
                             |    втДатаПроверки КАК втДатаПроверки
                             |;
                             |
                             |////////////////////////////////////////////////////////////////////////////////
                             |УНИЧТОЖИТЬ втДатаПечати
                             |;
                             |
                             |////////////////////////////////////////////////////////////////////////////////
                             |УНИЧТОЖИТЬ втДатаПроверки";
29 Мимохожий Однако
 
11.01.17
18:46
Почему Выбрать первые? В первую таблицу выбери различные и определи максимальную таблицу, а потом её соедини с максимальными датами.
30 Фрэнки
 
11.01.17
18:49
по моему тс издевается над нами.
ему выше разжевали, что разные таблицы в одном запросе нужно соединять, а в коде снова влеплено без соединения
31 mehfk
 
11.01.17
18:51
Можно вообще в самом первом запросе из (0) вот к этому ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПроверки
применить какую-нибудь агрегатную функцию :)
32 St-Anger
 
11.01.17
18:53
(30) не,не издеваюсь. это был старый код до подсказок.
33 St-Anger
 
11.01.17
18:54
(31) эммм..так у нас все равно будет пустой результат, что с агрегатной, что без.
34 Фрэнки
 
11.01.17
18:56
сделай Левое соединение с условием ИСТИНА
А поскольку в обоих табличках всего по одной строчке, то поля окажутся в одной строке
35 Фрэнки
 
11.01.17
18:58
в конструкторе, когда две таблички подзапросов выбраны на первой закладке, перейди на связи (это вторая) и соедини их с условием произвольным ИСТИНА
36 mehfk
 
11.01.17
19:00
(33) Ну-ну
37 St-Anger
 
13.01.17
10:23
Вот такая конструкция отлично отрабатывает:

"ВЫБРАТЬ
                             |    ВложенныйЗапрос.ДатаПечати,
                             |    ВложенныйЗапрос1.ДатаПроверки
                             |ИЗ
                             |    (ВЫБРАТЬ ПЕРВЫЕ 1
                             |        ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПечати
                             |    ИЗ
                             |        Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
                             |    ГДЕ
                             |        ЗаказПокупателяВремяПечати.Ссылка = &Док
                             |        И ЗаказПокупателяВремяПечати.ПечатнаяФорма = ""На склад""
                             |    
                             |    УПОРЯДОЧИТЬ ПО
                             |        ЗаказПокупателяВремяПечати.ДатаПечати) КАК ВложенныйЗапрос
                             |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
                             |            ЗаказПокупателяВремяПечати.ДатаПечати КАК ДатаПроверки
                             |        ИЗ
                             |            Документ.ЗаказПокупателя.ВремяПечати КАК ЗаказПокупателяВремяПечати
                             |        ГДЕ
                             |            ЗаказПокупателяВремяПечати.Ссылка = &Док
                             |            И ЗаказПокупателяВремяПечати.ПечатнаяФорма = ""Проверен""
                             |        
                             |        УПОРЯДОЧИТЬ ПО
                             |            ЗаказПокупателяВремяПечати.ДатаПечати) КАК ВложенныйЗапрос1
                             |        ПО (ИСТИНА)"
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс