![]() |
![]() |
![]() |
|
Забавный запросик, я и не знал, что так можно, сижу не могу вкурить его смы | ☑ | ||
---|---|---|---|---|
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) и как он себя ведет? Разложи, как работает этот отчет, почему так долго?
Типовой? Это типовой запрос? Да не гони, это запрос с ошибкой, он не типовой |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |