Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос!
0 mzelensky
 
13.10.11
11:29
Доброго всем! Можно ли как-то ускорить/оптимизировать выполнение этого запроса:

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ПосещениеКлиента.Ссылка,
   ПосещениеКлиента.Контрагент,
   0,
   ИСТИНА
ИЗ
   Документ.ПосещениеКлиента КАК ПосещениеКлиента
ГДЕ
   ПосещениеКлиента.ПометкаУдаления = ЛОЖЬ
   И (НЕ ПосещениеКлиента.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент КАК ВД
               ИЗ
                   РегистрСведений.ВыгруженныеДокументы.СрезПоследних(, ВыгруженныйДокумент ССЫЛКА Документ.ПосещениеКлиента) КАК ВыгруженныеДокументыСрезПоследних))

УПОРЯДОЧИТЬ ПО
   Документ,
   Контрагент
АВТОУПОРЯДОЧИВАНИЕ
1 Fragster
 
гуру
13.10.11
11:30
да
2 mikecool
 
13.10.11
11:30
1) внутреннее соединение ВД по не
2) попробовать ВТ и 1)
))
3 mzelensky
 
13.10.11
11:31
((2) думаешь соединение будет быстрее, чем "ГДЕ" ?!
4 Maxus43
 
13.10.11
11:31
И (НЕ ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент КАК ВД
               ИЗ
                   РегистрСведений.ВыгруженныеДокументы.СрезПоследних(, ВыгруженныйДокумент ССЫЛКА Документ.ЗаказПокупателя) КАК

это в ВТ или просто соединение с ней, а не в условие ГДЕ
5 mikecool
 
13.10.11
11:32
(3) смотря какое соединение, но обычно да
6 mzelensky
 
13.10.11
11:34
(4) а смысл ее в ВТ запихивать??? я данные всего 1 раз беру!

с соединением попробую
7 mzelensky
 
13.10.11
11:35
просто дело в том, что на сервере у меня все и так летает...я не замечаю тормозов, а вот на ноуте (где все это в итоге работает) уже заметно...
8 Maxus43
 
13.10.11
11:37
(6) план запроса неоптимальный может выбрать СКЛ если по вложеному запросу соединение или ГДЕ, так написано в библии 1с, так будет по феншую
9 Fragster
 
гуру
13.10.11
11:38
надо сделать ВТ с записями регистра обоих типов и полем, разделяющим по типам. индекс по этому полю (первый) и по ссылке (второй). потом соединение вместо ГДЕ
10 Ненавижу 1С
 
гуру
13.10.11
11:38
а если так:

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

ОБЪЕДИНИТЬ ВСЕ

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

УПОРЯДОЧИТЬ ПО
   Документ,
   Контрагент
АВТОУПОРЯДОЧИВАНИЕ
11 mzelensky
 
13.10.11
11:40
Чет тогда не совсем понимаю, как сделать соединение....чтобы мне вышли те записи, которые есть в первой выборке данных и НЕТ во второй ?!
12 НЕА123
 
13.10.11
11:41
(7)если файловая то
попробовать типа так

...
ГДЕ
Выбор КОГДА    ЗаказПокупателя.Проведен = ИСТИНА ТОГДА
  Выбор КОГДА  (НЕ ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент КАК ВД
               ИЗ
                   РегистрСведений.ВыгруженныеДокументы.СрезПоследних(, ВыгруженныйДокумент ССЫЛКА Документ.ЗаказПокупателя)
КАК ВыгруженныеДокументыСрезПоследних)) ТОГДА ИСТИНА
   Иначе ЛОЖЬ КОНЕЦ
ИНАЧЕ ЛОЖЬ КОНЕЦ
13 Maxus43
 
13.10.11
11:41
(11) соединение по НЕ, произвольное выражение галку тыкни в соединении
14 mzelensky
 
13.10.11
11:44
(13) ну я вот так попробовал...но это не правильно:

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



ГДЕ
   ПосещениеКлиента.ПометкаУдаления = ЛОЖЬ
15 mzelensky
 
13.10.11
11:44
(12) а зачем такие извращения?!
16 mzelensky
 
13.10.11
11:52
(13) так какой выражение прописать в "ПО" ?!
17 Ненавижу 1С
 
гуру
13.10.11
11:53
пробовал (10)?
18 mzelensky
 
13.10.11
11:56
(17) еще нет, хочу сперва с соединением разобраться.
19 mzelensky
 
13.10.11
12:04
(2) (13) ТАК КАК ЭТО "НЕ" ПОСТАВИТЬ???
20 Ненавижу 1С
 
гуру
13.10.11
12:05
(19) никак, ставь равенство и условие потом:

ГДЕ ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент ЕСТЬ NULL
21 mzelensky
 
13.10.11
12:08
(20) и чем это будет принципиально отличаться от первоисточника (запроса) в (0) ?
22 НЕА123
 
13.10.11
12:09
(15)
в файловой работает оптимизатор проверки лог.выражений? в файловой 81 - нет.
23 Ненавижу 1С
 
гуру
13.10.11
12:15
(21) может отличаться, но вообще предлагаю юзать (10)
24 mzelensky
 
13.10.11
12:22
(23) т.е. вот так:

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ПосещениеКлиента.Ссылка,
   ПосещениеКлиента.Контрагент,
   0,
   ИСТИНА
ИЗ
   Документ.ПосещениеКлиента КАК ПосещениеКлиента
ГДЕ
   ПосещениеКлиента.ПометкаУдаления = ЛОЖЬ
   И (НЕ ПосещениеКлиента.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент КАК ВД
               ИЗ
                   РегистрСведений.ВыгруженныеДокументы.СрезПоследних(, ВыгруженныйДокумент ССЫЛКА Документ.ПосещениеКлиента) КАК ВыгруженныеДокументыСрезПоследних
               ГДЕ
                   ВыгруженныеДокументыСрезПоследних.ВыгруженныйДокумент = ПосещениеКлиента.Ссылка))

УПОРЯДОЧИТЬ ПО
   Документ,
   Контрагент
АВТОУПОРЯДОЧИВАНИЕ
25 НЕА123
 
13.10.11
12:24
ТС - писатель, однако... (с)
26 mzelensky
 
13.10.11
12:39
(25) что вас навело на подобные выводы?
27 hhhh
 
13.10.11
12:46
(26) ну просто тебе полдня уже пишут, что

Ссылка В
           (ВЫБРАТЬ РАЗЛИЧНЫЕ

в файловой версии - это нереальные тормоза, а ты как глухой, то же самое в запросе у тебя.
28 mzelensky
 
13.10.11
12:49
(27) так ничео другого мне так и не предложили...написано ток "соединение через НЕ"..а как это соединение через НЕ сделать - бог его знает, называется стелепатируй из космоса!
29 НЕА123
 
13.10.11
13:05
каждый день появляются темы "новичков" вот с такими вот вопросами (как в 0)...надо нарыть свои первые темы...неужели я тоже так тупил?!?!? стремно то как :(
(с) mzelensky
30 mzelensky
 
13.10.11
13:14
(29) прости пост (20). Он тоже новичок?
31 НЕА123
 
13.10.11
13:16
(30)
ну не ставь равенство. а вот про NULL в (20) ты и не прочитал.
32 mzelensky
 
13.10.11
13:20
(31) прочел, но ведь он в (10) использует тот же прием "Ссылка в (...)", что и я...ну + небольшие доработки, а ты говоришь .что от этого нужно уходить!?

да и ты в (12) предлагаешь использовать "НЕ ЗаказПокупателя.Ссылка В" ... а доходить туда она будет, т.к. условие "Выбор КОГДА    ЗаказПокупателя.Проведен = ИСТИНА ТОГДА" будет выполняться в 99,9% случаев!

в итоге пришли к тому, с чего начинали!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший