Имя: Пароль:
1C
 
Забавный запросик, я и не знал, что так можно, сижу не могу вкурить его смы
0 Гений 1С
 
гуру
23.11.07
11:38
В общем в запросе была ошибка, из-за чего он долго выполнялся.
Ошибку я нашел, но честно гря я так и не понял смысл этого запроса.
Смотрите, наслаждайтесь, созерцайте, может вкурите как 1С его интерпретировала (Ошибка была такая - во вложенном запросе нужно было писать Т.Ссылка, а не пимЗадача.Ссылка)!


ВЫБРАТЬ
   пимЗадача.Ссылка
ИЗ
   Справочник.пимЗадача КАК пимЗадача
ГДЕ
   (Ссылка В (ВЫБРАТЬ
   пимЗадача.Ссылка
ИЗ
   Справочник.пимЗадача КАК Т
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимАктуальностьЗадачи.СрезПоследних(&Дата, ) КАК Р
       ПО Р.Задача = Т.Ссылка
ГДЕ
   ЕСТЬNULL(Р.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1))<=&_47e5c9fc7cc24c7ab9bb62e02e84182c))
1 BabySG
 
23.11.07
12:13
Цикл...?
2 Гений 1С
 
гуру
23.11.07
12:17
(1) Вот и я не могу просечь... Подзапрос обращается к полю запроса... Лажа какая-то
3 Defender aka LINN
 
23.11.07
12:26
(0) Ипанись... Ты всегда так запросы пишешь? 0_о
4 igork1966
 
23.11.07
12:28
Если замененить

   (Ссылка В (ВЫБРАТЬ
   пимЗадача.Ссылка

на

   (Ссылка В (ВЫБРАТЬ
   Т.Ссылка

То тоже совсем ничего не понятно... какая-то фигня.
5 Rovan
 
гуру
23.11.07
12:48
&_47e5c9fc7cc24c7ab9bb62e02e84182c - хороша трава, отсыпьте...   :-)
6 Гений 1С
 
гуру
23.11.07
13:10
(5) (3) Запрос строит генератор запросов, используется гуид, потому что условие может повторяться. Это что-то вроде отбора.
Ладно, вот вам, перепишу...
(4) так о том и речь, что непонятно, как и зачем работает, но тупит долго, я сначала подумал, что нужно оптимизировать запрос, но потом понял, что ошибка - ведь другие подобные отборы работали нормально...

ВЫБРАТЬ
   пимЗадача.Ссылка
ИЗ
   Справочник.пимЗадача КАК пимЗадача
ГДЕ
   (Ссылка В (ВЫБРАТЬ
   пимЗадача.Ссылка
ИЗ
   Справочник.пимЗадача КАК Т
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимАктуальностьЗадачи.СрезПоследних(&Дата, ) КАК Р
       ПО Р.Задача = Т.Ссылка
7 Вектор3
 
23.11.07
13:28
такое странное ощущение, что вы исхитрились реализовать коррелированный запрос...
8 i-rek
 
23.11.07
13:29
(0) выбирается список задач, имеющих просроченные чего-то. Видимо подзадачи
Или ещё что-то, список чего для каждой задачи хранится в пимАктуальностьЗадачи

конечно удивительно что это вообще работает.... а откуда взял ?
9 i-rek
 
23.11.07
13:34
мне почему-то кажется что от наружнего запроса и заодно от тормозов, можно избавиться, указав во внутреннем РАЗЛИЧНЫЕ.
10 BabySG
 
23.11.07
13:37
Собственно говоря, это я и имел ввиду в (1)...
"Коррелированный подзапрос может быть исполнен несколько раз в процессе обработки оператора T-SQL, содержащего такой подзапрос. Он будет исполняться для каждой строки, отобранной во внешнем запросе. На каждом из этих шагов поля внешнего запроса, на которые ссылается коррелированный подзапрос, будут сравниваться с результатами выборки коррелированного подзапроса. Результат выполнения коррелированного подзапроса определит, попадет ли строка внешнего запроса в результирующую выборку."
http://www.sql.ru/articles/mssql/2005/032101UsingCorrelatedSubquery.shtml
11 Гений 1С
 
гуру
23.11.07
13:45
Вот это запрос с ошибкой - тормозит:

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


Вот это запрос исправленный - летает:

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



Мне не надо решать задачу, я просто делюсь забавным запросом, я лично не понимаю, как он вообще работает. ;-)
12 Вектор3
 
23.11.07
13:55
(10) таки можно создавать в 1С коррелированные запросы или нет????
13 Вектор3
 
23.11.07
13:56
ветку в мемориз
14 BabySG
 
23.11.07
13:59
(11) Хм... Это два разных запроса, типа как условие ГДЕ и параметр в вирт. таблицах.
(12) Судя по всему - у кого-то получилось :)
15 Вектор3
 
23.11.07
14:04
(14) оффтоп: Уважаемый, а фирма 1С что нибудь вообще про коррелированные запросы говорит??? Вы , случайно, не знаете??
16 BabySG
 
23.11.07
14:14
Тут написано, что отличается Книга знаний: v8: Сходства и различия языка запросов 1С и стандартного SQL
но, походу, уже работает...
Сейчас попробую прикрутить к чему-нить :)
17 hhhh
 
23.11.07
14:25
(15) я думаю, что они некорелированные. Это две разные таблицы. Причем вторая очень большая - в нее входят все задачи, поэтому и тормозит.

То есть запрос эквивалентен запросу:

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

Получается полное содинение двух справочников пимЗадача ПО Истина
и поэтому офигенные тормоза.
18 asady
 
23.11.07
14:29
(0) не понял чего-то

такой запрос

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

КонецПроцедуры


в 8.0 и в 8.1 не работает.
19 Гений 1С
 
гуру
23.11.07
14:42
(18) не знаю, у меня работает в 1С:Предприятие 8.1 (8.1.7.37)
Может ты аналогию неверную подобрал?

ВЫБРАТЬ
   пимЗадача.Ссылка
ИЗ
   Справочник.пимЗадача КАК пимЗадача
ГДЕ
   пимЗадача.Ссылка В
           (ВЫБРАТЬ
               пимЗадача.Ссылка
           ИЗ
               Справочник.пимЗадача КАК Т ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимАктуальностьЗадачи.СрезПоследних(&Дата, ) КАК Р
                   ПО
                       Р.Задача = Т.Ссылка
           ГДЕ
               ЕСТЬNULL(Р.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1)) <= &_47e5c9fc7cc24c7ab9bb62e02e84182c)
   И пимЗадача.Ссылка В
           (ВЫБРАТЬ
               пимЗадача.Ссылка
           ИЗ
               Справочник.пимЗадача КАК Т ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пимАктуальностьЗадачи.СрезПоследних(&Дата, ) КАК Р
                   ПО
                       Р.Задача = Т.Ссылка
           ГДЕ
               ЕСТЬNULL(Р.ДатаАктуальности, ДАТАВРЕМЯ(1, 1, 1)) <> &_30ba71a235ae411898908a9db3eeed17)
20 Гений 1С
 
гуру
23.11.07
14:42
и конструктор адекватно воспринимает
21 Гений 1С
 
гуру
23.11.07
14:43
Надо было что-то вроде так:
Построитель.Текст="    ВЫБРАТЬ
|    пимЗадача.Ссылка
|ИЗ
|    Справочник.Валюты КАК пимЗадача
|ГДЕ
|    пимЗадача.Ссылка В (ВЫБРАТЬ
|    пимЗадача.Ссылка
|ИЗ
|    Справочник.Валюты КАК Т
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК Р
|        ПО Р.Валюта = Т.Ссылка
22 asady
 
23.11.07
14:52
(21)

так заработал - но



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

КонецПроцедуры



Ссылка    
руб.    
USD    
EUR    
   

смысл прикрутки в ГДЕ невкурил.....
23 Dionisious
 
23.11.07
14:55
(18) закрывающие скобки забыл.
А может это просто глюк релиза? Примерно как в 8.0.(не помню что вроде 12) была возможность в запросе таблицы значений использовать.
24 Гений 1С
 
гуру
23.11.07
15:03
(23) Все может быть в мире проприетарного софта! ;-)
25 Dionisious
 
23.11.07
15:04
(22) смысл вроде в том что во вложенном запросе не должна быть доступна таблица пимЗадача. Гений, я правильно понял?
26 Гений 1С
 
гуру
23.11.07
15:07
(25) Если она доступна, то получается декартово произведение. ;-)
27 asady
 
23.11.07
15:16
(25) фигасе

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

КонецПроцедуры





работает!!!!!
28 asady
 
23.11.07
15:22
(0) в воженных запросах конструкции ГДЕ можно(!!!!) обращаться к таблицам запроса по псевдониму.

Эта фича вполне может быть использована - Буду иметь ввиду.
29 Гений 1С
 
гуру
23.11.07
15:46
(28) Век жыви - век мУчись!
30 Garkin
 
24.11.07
18:22
(28)Помоему об этом "феномене" написано в КЖК стр. 2-1291 (последний пример на странице), или я что-то упустил :(.
31 Гений 1С
 
гуру
26.11.07
09:53
(30) Если ты процитируешь, я тебе скажу. У меня нет ЖКК
32 Garkin
 
26.11.07
10:08
К сожалению тоже под рукой нету, если никто не процитирует, то вечером.
33 Гений 1С
 
гуру
26.11.07
12:24
(32) ждемс
34 Garkin
 
26.11.07
14:50
"1С:Предприятие 8.0 Описание встроенного языка" Часть 2, Москва, Фирма 1С 2006
Стр 2-1291
Цитата:
"Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.
ВЫБРАТЬ
   Товар.Наименование
        ИЗ
            Справочник.Товары КАК Товары
        ГДЕ
            Товары.Ссылка В
                    (ВЫБРАТЬ
                        РасхНаклСостав.Товар
                    ИЗ
                     Документ.РасхНакл.Состав Как РасхНаклСостав                                  ГДЕ
                        РасхНаклСостав.Товар  = Товары.Ссылка
           )
"

оно?
35 КонецЦикла
 
26.11.07
14:52
А курсоры есть в восьмерке?
36 marvak
 
26.11.07
14:57
так, гению больше не наливать.
37 Гений 1С
 
гуру
26.11.07
15:01
(34) аналогия понятна, но речь идет об использовании этого поля не в ГДЕ вложенного запроса, а в списке выбираемых полей! ;-) Вот этого я понять не могу, вернее предполагаю что он строит декартово произведение.
38 Гений 1С
 
гуру
26.11.07
15:02
(35) нэту, дарагой
39 Garkin
 
26.11.07
15:22
(37) Так я вроде-бы о (28), без претензий на осознание
40 Гений 1С
 
гуру
26.11.07
16:06
(39) так я тоже без претензий тему создал, просто поделился забавной фичей
41 France
 
26.11.07
16:08
таки же, где фича?.. типовое поведение типового запроса..
42 Гений 1С
 
гуру
26.11.07
16:45
(41) и как он себя ведет? Разложи, как работает этот отчет, почему так долго?
Типовой? Это типовой запрос? Да не гони, это запрос с ошибкой, он не типовой