Имя: Пароль:
1C
 
Оптимизация запроса!
0 Hipocrisy2013
 
04.12.19
14:26
Будет ли 2 способ отрабатывать быстрее?

1.

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)
И (ВТ_Даты.Ссылка.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
И (РеализацияТоваровУслуг.Проведен)

2.

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
И ВЫБОР КОГДА (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента) ТОГДА
     (ВТ_Даты.Ссылка.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
  ИНАЧЕ ЛОЖЬ
  КОНЕЦ
И (РеализацияТоваровУслуг.Проведен)
1 1С Ассенизатор ПРОФ
 
04.12.19
14:33
Все в кучу напихал
2 Hipocrisy2013
 
04.12.19
14:33
Вопрос в принципе состоит в том, что если в запросе первое условие не прошло, будет ли проводиться проверка на следующие условие при связи условий через "И"?
3 Fragster
 
гуру
04.12.19
14:35
самый большой косяк в ВТ_Даты.Ссылка.ДокументОснование
4 Fragster
 
гуру
04.12.19
14:35
остальное - как оптимизатор СУБД решит
5 H A D G E H O G s
 
04.12.19
14:36
(0) Давайте подбросим монетку, орел или решка. Ой, закатилась под кровать.
6 H A D G E H O G s
 
04.12.19
14:37
(4) Классический отмаз. Оптимизатор СУБД ничего не решает.
7 1С Ассенизатор ПРОФ
 
04.12.19
14:38
(1) А вообще оба варианта говно. Кто учил вообще такие запросы писать?
8 piter3
 
04.12.19
14:39
(0)Может начать,а что ты хотел добиться?
9 Hipocrisy2013
 
04.12.19
14:43
(8) ВТ_Даты.Ссылка это заказПостащику, нужно вытащить реализацию, если таково имеется. Связь ЗаказаПоставщика и Реализации только через заказКлиента есть
10 VladZ
 
04.12.19
14:43
(0) Не тот кусок оптимизируешь.
11 Windyhead
 
04.12.19
14:43
(0)
Зачем писать так:
"И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)"
когда можно просто
"И ВТ_Даты.Ссылка.ДокументОснование ССЫЛКА Документ.ЗаказКлиента"

к чему ВЫРАЗИТЬ?
12 H A D G E H O G s
 
04.12.19
14:44
(7) Я как бэ и имел это ввиду в (5)
Но у меня есть версия лучше
"Шо то фигня, шо это - фигня".
13 1С Ассенизатор ПРОФ
 
04.12.19
14:46
(11) Тсс. Тихо.
14 Fragster
 
гуру
04.12.19
14:47
(6) ну хорошо, как оптимизатор субд не решит
15 Hipocrisy2013
 
04.12.19
14:48
(11) Я уже это пробывал, результат тот же самый, тестирую разные варианты
16 1С Ассенизатор ПРОФ
 
04.12.19
14:50
(15) зачем и для чего?
17 Hipocrisy2013
 
04.12.19
14:54
(16) На (0) ни кто не дал ответа, потому что не знают, лучший способ замерять время, вот и я замеряю, когда не знаю, что быстрее, а если такие умные, то ответе тогда (2)
18 dezss
 
04.12.19
14:55
(11) +1.
Оптимизировать, скорей всего, надо другие места)
19 1С Ассенизатор ПРОФ
 
04.12.19
14:56
(17) Лучший способ замерять время это профайлер. Тебе сказали уже что оба варианта неправильные изначально.
20 sqr4
 
04.12.19
14:57
(17) не должно вроде
21 sevod
 
04.12.19
14:58
(9) что за конфа? Мне кажется ты не в том месте оптимизируешь
22 Hipocrisy2013
 
04.12.19
15:01
(21) Может быть, Конфа УТ, мне нужно сделать связь между заказом поставщика и реализацией, связь имеется только через реквизит ДокументОснование и ЗаказКлиента - оба реквизита состовные
23 H A D G E H O G s
 
04.12.19
15:01
(17) Ты не в ту сторону воюешь.
24 H A D G E H O G s
 
04.12.19
15:02
(22) Полный текст запроса
25 sevod
 
04.12.19
15:05
(22) УТ которая? Давай запрос целиком. Тебя как буха пытать приходится
26 leonidkorolev
 
04.12.19
15:07
(17) Тут сильно зависит от плана запроса на стороне скл. Один и тот же запрос может выполняться разными способами, иногда совершенно немыслимыми. И кстати обращение через две точки в соединении очень не хорошо. Недавно видел такой план в скл. Лучше вынести в врем. Таб и потом соединить
27 Hipocrisy2013
 
04.12.19
15:08
ВЫБРАТЬ
    ЗаказПоставщикуТовары.Ссылка КАК Ссылка,
    ЗаказПоставщикуТовары.ДатаПоступления КАК ДатаДоставки
ПОМЕСТИТЬ ВТ_Даты
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ГДЕ
    ЗаказПоставщикуТовары.Ссылка.Проведен
    И ЗаказПоставщикуТовары.Ссылка.СамоВывоз
    И ВЫБОР
            КОГДА &ТолькоМаркетПлейс
                ТОГДА ЗаказПоставщикуТовары.Ссылка.МаркетПлейс
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И ЗаказПоставщикуТовары.Ссылка.Склад В(&Склад)
    И ЗаказПоставщикуТовары.ДатаПоступления <= &ДатаДо
    И ЗаказПоставщикуТовары.ДатаПоступления >= &ДатаC

СГРУППИРОВАТЬ ПО
    ЗаказПоставщикуТовары.ДатаПоступления,
    ЗаказПоставщикуТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Даты.Ссылка КАК Распоряжение,
    ВТ_Даты.ДатаДоставки КАК Дата,
    ЗаказПоставщику.ЖелаемоеВремяДоставки КАК Время,
    ЗаказПоставщику.АдресСкладаПоставщика КАК АдресДоставки,
    ЗаказПоставщику.Склад КАК Склад,
    ЗаказПоставщику.Склад КАК Получатель,
    ЗаказПоставщику.Партнер КАК Партнер,
    ЗаказПоставщику.ДокументОснование.Номер КАК НомерЗаказа,
    ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка, ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)) КАК Реализация
ПОМЕСТИТЬ ВТ_Распоряжения
ИЗ
    ВТ_Даты КАК ВТ_Даты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
        ПО ВТ_Даты.Ссылка = ЗаказПоставщику.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
            И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)
            И (ВТ_Даты.Ссылка.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
            И (РеализацияТоваровУслуг.Проведен)
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Распоряжения.Распоряжение,
    ВТ_Распоряжения.Дата,
    ВТ_Распоряжения.Время,
    ВТ_Распоряжения.АдресДоставки,
    ВТ_Распоряжения.Склад,
    ВТ_Распоряжения.Получатель,
    ВТ_Распоряжения.Партнер,
    ВТ_Распоряжения.НомерЗаказа,
    ВТ_Распоряжения.Реализация
ИЗ
    ВТ_Распоряжения КАК ВТ_Распоряжения
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Задания КАК ВТ_Задания
        ПО ВТ_Распоряжения.Распоряжение = ВТ_Задания.Распоряжение
            И ВТ_Распоряжения.Получатель = ВТ_Задания.Получатель
            И ВТ_Распоряжения.Дата = ВТ_Задания.Дата
ГДЕ
    ВТ_Задания.Получатель ЕСТЬ NULL
    И ВТ_Распоряжения.Дата <= &ДатаДо
    И ВТ_Распоряжения.Дата >= &ДатаC

УПОРЯДОЧИТЬ ПО
    ВТ_Распоряжения.Дата



Я добавил соединение с реализацией во втором пакете, из-за чего бывают появляются зависания, которых раньше не было
28 H A D G E H O G s
 
04.12.19
15:08
"иногда совершенно немыслимыми."

Дадада.
29 sevod
 
04.12.19
15:10
(27) ты реально бух. Целиком давай запрос, а не огрызок
30 sevod
 
04.12.19
15:10
(29) упс, это я форумом пользоваться не могу :)
31 leonidkorolev
 
04.12.19
15:10
(27) вот именно. Из-за обращения через две точки был бесконечный запрос на скуле
32 Cyberhawk
 
04.12.19
15:12
Ну хоть время выполнения каждого запроса из пакета померил бы
33 Cyberhawk
 
04.12.19
15:13
Добавил левое соединение с кучей проведенных реализаций и удивляешься почему стало медленнее?
34 D_E_S_131
 
04.12.19
15:13
(22) "связь имеется только через реквизит ДокументОснование и ЗаказКлиента" - у вас реально все ЗаказыПокупателя только через закупку обеспечиваются и ничего со склада? И все Поступления только обеспечивают ЗаказыПоставщику?
35 Cyberhawk
 
04.12.19
15:13
ЗаказКлиента в РТУ не индексированный реквизит
36 1С Ассенизатор ПРОФ
 
04.12.19
15:17
(35) Да ТС даже про составной тип не совсем понимает. А ты ему про индексы)
37 Hipocrisy2013
 
04.12.19
15:20
(35) Я  в курсе, (31) - поправлю, посмотрю что будет
38 palsergeich
 
04.12.19
15:20
(27) А запрос по документам делается принципиально?)
39 Cyberhawk
 
04.12.19
15:23
(37) При чем тут (31)? Ты ничего не поправишь
40 sevod
 
04.12.19
15:31
(39) Если вот это ВТ_Даты.Ссылка.ДокументОснование имеет множественный тип данных, то делается соединение со всеми таблицами, которые там указаны.
В 10 ут будет с 3 таблицами соединять, в ут 11 с 9.

Афтор, гугли что такое не явный запрос, оно же обращение через точку. Вот это "ВТ_Даты.Ссылка.ДокументОснование" надо править
41 lodger
 
04.12.19
15:36
(27) (37) а значешь как это убрать?
добавь документ основание в первом запросе пакета...
42 unregistered
 
04.12.19
15:37
(27) В первый запрос пакета добавьте поле.


ВЫРАЗИТЬ(ЗаказПоставщикуТовары.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) КАК ЗаказКлиента


Можно ещё добавить индексы в эту ВТ по полям Ссылка и этому добавленному полю ЗаказКлиента.
Во втором запросе пакета поменять условие соединения.


ПО ВТ_Даты.ЗаказКлиента = РеализацияТоваровУслуг.ЗаказКлиента
   И (ВТ_Даты.ЗаказКлиента <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
     И (РеализацияТоваровУслуг.Проведен)


Как-то так.
43 Cyberhawk
 
04.12.19
15:46
(40) Там нету множественной ссылки, у него ж первый запрос пакета это ТЧ одного вида документа
44 sevod
 
04.12.19
16:27
(43)
"ВТ_Даты.Ссылка" вот тут нет множественного типа данных, а вот дальше "ВТ_Даты.Ссылка.ДокументОснование" ДокументОснование имеет или 3 или 9 типов данных (еще бы он написал УТ 11 или 10). При таком обращении "ВТ_Даты.Ссылка.ДокументОснование" может идти неявный запрос ко всем таблицам которые в типе указаны.
Но если честно, я не уверен что из за этого тормозит. Соединение выполняется уже с конкретной таблицой и в момент соединения, не выполняется куча соединений (выше в (39) я это не правильно  написал, не доглядел), но там дальше в условиях везде фигурирует "ВТ_Даты.Ссылка.ДокументОснование" и хз тормозит оно там или нет.

Как выше советовали, нужно в первом запросе это "ДокументОснование получить" и дальше уже в явном виде с ним оперировать.
45 Cyberhawk
 
05.12.19
13:04
(44) "При таком обращении "ВТ_Даты.Ссылка.ДокументОснование" может идти неявный запрос ко всем таблицам которые в типе указаны" // Нет.
46 palsergeich
 
05.12.19
13:06
(44) это было бы верно в случае ВТ_Даты.Ссылка.ДокументОснование.Дата, а в случае с ВТ_Даты.Ссылка.ДокументОснование не будет никаких сюрпризов
47 sevod
 
05.12.19
15:14
(45)(46) Почему нет?
"ВТ_Даты.Ссылка.ДокументОснование"
В таблице ВТ_Даты находится Ссылка, а ДокументОснование там не находится. Для его получения база делает дополнительный неявный запрос (хотя бы из за этого так не надо писать). Поскольку у ДокументОснование множественный тип данных, то неявный запрос идет ко всем таблицам. Это в общем случае. В этом конкретном я не знаю. Я в таком стиле не пишу. Достаточно было написать в пером запросе:
ЗаказПоставщикуТовары.ДокументОснование КАК ДокументОснование
и дальше уже:
ВТ_Даты.ДокументОснование

Что то вы меня заинтриговали. Потестить что ли на чем то.
48 Fragster
 
гуру
05.12.19
15:18
(47) не так. если обращения к реквизитам поля составного типа нет, то и запроса нет.  Другое дело, что получение реквизитов может быть неявным, например при получении представления.
49 sevod
 
05.12.19
16:14
(48) это почему нет обращения?
"ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента"
что бы сделать сравнение в этой строке, сначала нужно получить ДокументОснование. Это и будет не явный запрос.  

Попробовал сделать тестовые запросы... и нет подходящей базы под рукой. Открыл демо версию УТ 11, но там данных кот наплакал, оба варианта мгновенно отрабатывают.
50 Fragster
 
гуру
05.12.19
16:19
(49) будет одно неявное левое соединение с таблицей Документ.ЗаказПоставщику, а не с кучей таблиц возможных типов ДокументОснование
51 DexterMorgan
 
05.12.19
16:21
(49) в ДокументОснование - гуид, он сравнивается с гуидом в РТУ.ЗаказКлиента, какие соединения?
52 Fragster
 
гуру
05.12.19
16:30
(51) строго говоря там три поля, а не только гуид
53 Fragster
 
гуру
05.12.19
16:30
причем 1с упорно не хочет одно из них удалять (оно удалено только у регистраторов регистров)
54 sevod
 
05.12.19
16:31
(51) во временной таблице "ВТ_Даты" нет такой вещи как ДокументОснование. Вот это "ВТ_Даты.Ссылка.ДокументОснование" называется неявный запрос. 1С будет делать запрос, который прогеры поленились в явном виде написать. ДокументОснование имеет множественный тип данных, отсуда и проблемы.
55 Fragster
 
гуру
05.12.19
16:32
(54) прочитай внимательно (50)
56 sevod
 
05.12.19
16:34
(50) "будет одно неявное левое соединение с таблицей Документ.ЗаказПоставщику, а не с кучей таблиц возможных типов ДокументОснование"
Вообще тебя не понял.
вот это "ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента" как работает? Причем тут "Документ.ЗаказПоставщику" ?
57 eTmy
 
05.12.19
16:35
Срочно открывайте профайлер)
58 sevod
 
05.12.19
17:01
У меня есть круче чем профайлер.

Пять лет назад, мне удалось обьяснить почему вот так делать нельзя
ОстаткиНоменклатурыОстатки.Партия.МоментВремени

Чистовский форум по подготовке к экзамену спец по 1С. https://forum.chistov.pro/index.php?topic=2670.msg33526#msg33526
Мой пост второй сверху.

Это если вы не знали что такое неявный запрос. А если вы знаете, то где косяк в моих размышлениях? Если кто реально обьяснит, буду благодарен. Просто подозреваю, не все понимают о чем тут речь идет.
Вот это "ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента" мне не нравится.
59 sevod
 
05.12.19
17:11
(58) давно это было :) тогда и сам до конца не знал что там происходит :) знал что на экзамене нельзя так делать. На моей второй работе уже обьснили, почему нельзя. А на экзамене, надо было в явном виде все запросы делать, что бы показать что ты знаешь, что есть не явные.
60 VS-1976
 
05.12.19
17:14
(58) ВТ_Даты.Ссылка.ДокументОснование тут есть неявное соединение с шапкой документа и вытаскивание поля ДокументОснование

---------

ВТ_Даты КАК ВТ_Даты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
        ПО ВТ_Даты.Ссылка = ЗаказПоставщику.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента

Здесь будет два соединения:

ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику

и 2-е неявное

По этому нужно было конечно же писать лучше так ( хотя скорость шибко не возрастёт, и сильно памяти больше не отест ):

ВТ_Даты КАК ВТ_Даты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
        ПО ВТ_Даты.Ссылка = ЗаказПоставщику.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ЗаказПоставщику.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
61 VS-1976
 
05.12.19
17:19
(60) Да первое правило. Не думайте что оптимизатор тождественен искусственному интеллекту. Он будет делать то, что написали, и у него свобода выбора только в методах получения данных...
62 sevod
 
05.12.19
17:22
(60) спасибо тебе друг :) а то у меня уже мозг начал взрываться. Как будто снова в 2014 году, две недели до экзамена и мне пишут что с такими зпросами надо с эказмена выгонять :)

"Севод я нашла Ваш код.. в Вашем файле 11-го билета в оперативной задаче в приходе денег

Я не знаю как это в Двух словах объяснить, но э... с таким соединением с документом Расходная накладная мне кажется сразу с экзамена выгонят..."

https://forum.chistov.pro/index.php?topic=2670.510

Путешествие в прошлое :)
63 sevod
 
05.12.19
17:25
И кстати не факт что из за этого тормозит "ВТ_Даты.Ссылка.ДокументОснование", там и другие косяки могут быть. Но так писать не надо. Но как подобными конструкциями базы клали, я видел.
64 sevod
 
05.12.19
17:36
(60) и ДокументОснование я всетаки предлагаю получать в первом запросе, что бы потом писать
"ВТ_Даты.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента"
65 VS-1976
 
05.12.19
17:44
(63) Не будет там из-за этого тормозить, данные в кэше уже, либо первым запросом
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
Либо вторым

Но что точно, что параллелизма не будет при соединении ( соединения будут последовательно идти друг за другом )

ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
        ПО ВТ_Даты.Ссылка = ЗаказПоставщику.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ЗаказПоставщику.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
66 sevod
 
05.12.19
17:50
(65) мне уже насрать, будет тормозить или нет. Но руки лучше оторвать. Это по любому надо было в первый запрос писать.
"ВТ_Даты.Ссылка.ДокументОснование" на некоторых собеседованиях подобное используют. Не обьяснишь в чем косяк, минус в карму. Правда обычно говорят, что ДокументОснование имеет множественный тип данных.
67 VS-1976
 
05.12.19
17:55
ВЫБРАТЬ
    ЗаказПоставщикуТовары.Ссылка КАК Ссылка,
    ЗаказПоставщикуТовары.ДатаПоступления КАК ДатаДоставки
ПОМЕСТИТЬ ВТ_Даты
ИЗ
    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ГДЕ
    ЗаказПоставщикуТовары.Ссылка.Проведен
    И ЗаказПоставщикуТовары.Ссылка.СамоВывоз
    И ВЫБОР
            КОГДА &ТолькоМаркетПлейс
                ТОГДА ЗаказПоставщикуТовары.Ссылка.МаркетПлейс
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И ЗаказПоставщикуТовары.Ссылка.Склад В(&Склад)
    И ЗаказПоставщикуТовары.ДатаПоступления <= &ДатаДо
    И ЗаказПоставщикуТовары.ДатаПоступления >= &ДатаC

СГРУППИРОВАТЬ ПО
    ЗаказПоставщикуТовары.ДатаПоступления,
    ЗаказПоставщикуТовары.Ссылка
;

Вот эта концепция изначально неправильная

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

PS: Я понимаю почему это происходит, визадр - зло, хотя если нужна скорость написания, то простительно наверное, потом можно рефакторинг сделать...
68 VS-1976
 
05.12.19
17:59
(66) Тут то ладно, но если множественный и ЗаказПоставщику.ДокументОснование.[Поле] тогда батарея будет левых, если не будет как минимум приведения данных "ВЫРАЗИТЬ"...

PS: Я лично лучше соединения руками пропишу, ну кроме если шибко нужно что-то подобно этого

ВЫБРАТЬ
  ДокументОснование.Дата КАК ДатаОснования

...
69 VS-1976
 
05.12.19
18:06
(68)         ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
            И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)
            И (ВТ_Даты.Ссылка.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка))
            И (РеализацияТоваровУслуг.Проведен)

Зачем тут это так?..

И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)

Это же бред...

Просто написал бы

Т_Даты.Ссылка.ДокументОснование ССЫЛКА Документ.ЗаказКлиента

этого достаточно :)
70 VS-1976
 
05.12.19
18:21
(27) Беглый взгляд на запрос подсказывает мне, что ты не знаешь что творишь. И не понимаешь когда пишешь запрос какую работу будет проделывать база данных в каждом конкретном случае...
71 unregistered
 
05.12.19
18:51
(66) >> Но руки лучше оторвать.

Может уже хватит бредить и флудить?
Тебе вроде как русским языком написали несколько человек в разных постах.

В (50).
>> будет одно неявное левое соединение с таблицей Документ.ЗаказПоставщику, а не с кучей таблиц возможных типов ДокументОснование

И в (51).
>> в ДокументОснование - гуид, он сравнивается с гуидом в РТУ.ЗаказКлиента, какие соединения?

А ты упорно несешь какую-то ахинею про множество неявных соединений, которых тут не будет, оторванные руки, "так писать нельзя", "с экзамена выгонят" и пр.
73 sevod
 
06.12.19
09:50
(71) >> будет одно неявное левое соединение с таблицей Документ.ЗаказПоставщику, а не с кучей таблиц возможных типов ДокументОснование


ПО ВТ_Даты.Ссылка.ДокументОснование = РеализацияТоваровУслуг.ЗаказКлиента
И (ВЫРАЗИТЬ(ВТ_Даты.Ссылка.ДокументОснование КАК Документ.ЗаказКлиента) ССЫЛКА Документ.ЗаказКлиента)

Во второй строке "ВЫРАЗИТЬ" есть, в первой нет. Вторая строка отработает раньше перовой, закешурует данные и после этого первая отработает без проблем? Может и так, а может там еще где раньше будет не явный запрос.
Только чем этим бредом заниматься, вот это выкидывают "ВТ_Даты.Ссылка.ДокументОснование", а вот это добавляют "ВТ_Даты.ДокументОснование как ДокументОснование " в первый запрос. И тогда во втором запросе вообще не будет неявных соединений и будет однозначно быстрее.

П.С. для тех кто наблюдает со стороны и не понимает чего я тут кипишую. Вот небольшая статья про "обращение через точку" и неявный запрос. https://pro1c8.ru/vyrazit-v-zaprosah/ Там вся суть проблемы показана. И даже "множественные неявные соединения" там в явном виде показаны. Зачем тут некоторые упираются что так "ВТ_Даты.Ссылка.ДокументОснование" можно писать, я не понимаю.
74 eTmy
 
06.12.19
09:53
Люди упорно продолжают игнорировать документацию 1с


Получение полей через точку от полей, ссылающихся на несколько объектов

Если поле, через которое получается другое поле, является ссылкой на несколько таблиц, то при выполнении запроса будет осуществлено столько соединений, в скольких ссылаемых таблицах будет найдено требуемое поле.

Пример. Пусть поле «Регистратор» регистра накопления ссылается на два документа: «РасходнаяНакладная» и «ПриходнаяНакладная». В таком случае следующий запрос:

ВЫБРАТЬ
    УчетНоменклатуры.Регистратор.Номер,
    УчетНоменклатуры.Количество
ИЗ
    РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры

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

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

Если же поле, через которое получается другое поле, является любой ссылкой, то возможны ситуации, при которых будет происходить неявное соединение со всеми объектными таблицами конфигурации. Так, например, если мы получаем от поля типа «любая ссылка» поле «Представление», а в нашей конфигурации присутствует 50 справочников и 100 документов, то будет произведено 150 соединений с различными таблицами.

На это стоит обращать внимание при разработке структуры данных, также об этом следует помнить при составлении запросов.
75 unregistered
 
06.12.19
10:08
(73) Какой же ты тугоооооой....
Не будет тут никаких неявных соединений.
Перечитай уже текст запроса. ВНИМАТЕЛЬНО!!!

Всё, что ту тут пишешь об обращениях через точку и неявных соединениях все прекрасно понимают. Но к данному конкретному примеру это не имеет никакого отношения.

Поле ВТ_Даты.Ссылка имеет вполне конкретный тип - Документ.ЗаказПоставщику. НЕ(!!!) множественный. Соответственно поле запроса ВТ_Даты.Ссылка.ДокументОснование не может никак породить множественных соединений. Будет одно единственное соединение к этой самой таблице документа ЗаказПоставщику.

А вот если ДокументОснование в заказе поставщику составное и если бы (!!!) было запрошено ещё одно поле через точку от него (например, ВТ_Даты.Ссылка.ДокументОснование.Дата), то это породило бы неявные соединения, о которых ты тут так распереживался.
76 eTmy
 
06.12.19
10:13
Он создаст столько соединений сколько типов документов является документом основания для заказа поставщику
77 unregistered
 
06.12.19
10:17
(76) Нет. При чем тут вообще ДокументОснование? К его полям вообще нет обращений. От слова "совсем". С какого перепугу вообще должны родиться соединения?
78 eTmy
 
06.12.19
10:24
Мы точно про один и тот же запрос в (27)?
79 hhhh
 
06.12.19
10:32
(77) вот здесь у него будет соедиение

   ЗаказПоставщику.ДокументОснование.Номер КАК НомерЗаказа,
80 eTmy
 
06.12.19
13:14
(79) Именно
81 pechkin
 
06.12.19
13:16
разве
ВЫРАЗИТЬ(Таб.Поле КАК НуженыйТип) = &Значение
и
Таб.Поле= &Значение
не одно и тоже?
82 sevod
 
06.12.19
23:01
(78) похоже он (42) обсуждал, где уже давно правильно решение выложил :)
Если что, я тоже (27) обсуждал :)