|
ЛЕВОЕ СОЕДИНЕНИЕ с Срез Последних в динамическом списке | ☑ | ||
---|---|---|---|---|
0
MistaEr
05.07.17
✎
14:48
|
Как оптимизировать данный запрос для динамического списка:
ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Артикул, Номенклатура.ЕдиницаИзмерения, ЦеныНоменклатурыСрезПоследних.Цена ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура |
|||
1
Лефмихалыч
05.07.17
✎
14:50
|
отбор по типу цены добавь в параметры виртуальной таблицы
|
|||
2
runoff_runoff
05.07.17
✎
14:55
|
в условия виртуальной таблицы добавить..
Номенклатура В (Выбрать Товары.Ссылка ИЗ Справочник.Номенклатура как Товары) |
|||
3
Лефмихалыч
05.07.17
✎
14:56
|
вот так (2) не надо делать
|
|||
4
runoff_runoff
05.07.17
✎
14:56
|
по идее по сонвной таблице отбор ограничен видимыми строками..
|
|||
5
Вафель
05.07.17
✎
14:57
|
в регистре итоги хранятся?
|
|||
6
runoff_runoff
05.07.17
✎
14:57
|
1с использует внутренние соединения с основной таблицей в настройках "сложных" динамических списков..
|
|||
7
MistaEr
05.07.17
✎
15:07
|
(1) Будем считать, что у меня нет там измерения ТипЦены (ВидЦены), а в форме есть отбор по типу товара. Вот такой запрос:
ВЫБРАТЬ СправочникНоменклатура.Ссылка, ЦеныНоменклатурыСрезПоследних.Цена ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура.ТипНоменклатуры = &ТипНоменклатуры)}) КАК ЦеныНоменклатурыСрезПоследних ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура {ГДЕ (СправочникНоменклатура.ТипНоменклатуры = &ТипНоменклатуры)} |
|||
8
MistaEr
05.07.17
✎
15:08
|
Нет, даже вот такой:
ВЫБРАТЬ СправочникНоменклатура.Ссылка, ЦеныНоменклатурыСрезПоследних.Цена ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура.ТипНоменклатуры = &ТипНоменклатуры)}) КАК ЦеныНоменклатурыСрезПоследних ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура {ГДЕ (СправочникНоменклатура.ТипНоменклатуры = &ТипНоменклатуры)} Как оптимизировать его, чтоб не было соединений |
|||
9
Лефмихалыч
05.07.17
✎
15:08
|
(7) это совсем другой запрос.
В этом запросе соединение нафиг не нужно абсолютно |
|||
10
Лефмихалыч
05.07.17
✎
15:09
|
(8) а это превратит левое во внутреннее при установке отбора на форме
|
|||
11
Лефмихалыч
05.07.17
✎
15:09
|
+(10) и соединение опять станет ненужным
|
|||
12
Вафель
05.07.17
✎
15:09
|
из 2х таблиц нельзщя получить данные без соединения
|
|||
13
Лефмихалыч
05.07.17
✎
15:09
|
нахер тебе справочник сдался, если тебя интересуют только те записи, для которых есть цена?
|
|||
14
Лефмихалыч
05.07.17
✎
15:09
|
(12) так ему данные из одной нужны!
|
|||
15
Вафель
05.07.17
✎
15:10
|
А цена?
|
|||
16
MistaEr
05.07.17
✎
15:10
|
(14) Да, Номенклатура вся нужна
|
|||
17
MistaEr
05.07.17
✎
15:10
|
цены может не быть, ну ладно там ЕстьNull приму
|
|||
18
Вафель
05.07.17
✎
15:10
|
Даже если по регистру выбирать, то все равно неявные соединения будут
|
|||
19
Лефмихалыч
05.07.17
✎
15:11
|
(16) тогда все свои запросы выкидывай в лес и верни, как было, только в параметр виртульной аблицы добавь {(Номенклатура.ТипНоменклатуры = &ТипНоменклатуры)}
|
|||
20
Лефмихалыч
05.07.17
✎
15:11
|
(17) убери из ГДЕ этот отбор насовсем
|
|||
21
MistaEr
05.07.17
✎
15:12
|
(20) Где устанавливает отбор в талицу самого справочника, без него никак
|
|||
22
Лефмихалыч
05.07.17
✎
15:13
|
(21) а! точно, в справочнике тоже есть это поле. Ты прав. ну, тогда оставь (8). Как-то сильнее ты это уже не оптимизируешь.
|
|||
23
MistaEr
05.07.17
✎
15:14
|
(19) А параметр виртуальной таблицы чтоб лишние записи не рассматривать
|
|||
24
Вафель
05.07.17
✎
15:14
|
Галка по итогам регистра включена?
|
|||
25
MistaEr
05.07.17
✎
15:16
|
есть что нибудь подобное в типовых решениях?
|
|||
26
MistaEr
05.07.17
✎
15:16
|
(24) Разрешить итоги: срез последних? Нет
|
|||
27
runoff_runoff
05.07.17
✎
15:20
|
искать слово Соединение во всех элементах форм
|
|||
28
Вафель
05.07.17
✎
15:20
|
(26) так поставь. ускорение будет громадное
|
|||
29
MistaEr
05.07.17
✎
15:23
|
Может как то так?
ВЫБРАТЬ СправочникНоменклатура.Ссылка, 0 КАК Цена ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ГДЕ СправочникНоменклатура.ТипНоменклатуры = &ТипНоменклатуры {ГДЕ (СправочникНоменклатура.ТипНоменклатуры = &ТипНоменклатуры)} ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура.ТипНоменклатуры = &ТипНоменклатуры)}) КАК ЦеныНоменклатурыСрезПоследних |
|||
30
MistaEr
05.07.17
✎
15:24
|
(28) А почему ее не поставили разработчики?
|
|||
31
Timon1405
05.07.17
✎
15:24
|
у вас что в базе всего один вид цен? иначе ДС должен выдавать "Дублирование ключевых полей в поле ссылка"
|
|||
32
MistaEr
05.07.17
✎
15:28
|
(31) Не суть. Вопрос в другом. Я хотел без соединений. А если СрезПоследних в отдельной вложенной таблице?
|
|||
33
Вафель
05.07.17
✎
15:28
|
(30) в ерп стоит
|
|||
34
MistaEr
05.07.17
✎
15:29
|
А может как то в общей функции такие вещи рассчитывать и получать как в СКД Вычисляемые поля
|
|||
35
MistaEr
05.07.17
✎
15:32
|
(27) Так нашел я. В общем в типовых конфигурациях тоже практикуется левое соединение
|
|||
36
MistaEr
05.07.17
✎
15:34
|
(28) А можно подробнее про это?
|
|||
37
Timon1405
05.07.17
✎
15:37
|
||||
38
Buster007
05.07.17
✎
15:51
|
странно, если условия соединения написаны корректно, то это не то место, которое стоит пытаться оптимизировать.
|
|||
39
MistaEr
05.07.17
✎
15:51
|
(37) Если есть такое условие как у меня (через точку)
СрезПоследних(, {(Номенклатура.ТипНоменклатуры = &ТипНоменклатуры)}) НЕ рекомендуется ставить флажок итогов |
|||
40
MistaEr
05.07.17
✎
15:52
|
(38) Для обычного запроса да, но для динамического списка не помешает
|
|||
41
Buster007
05.07.17
✎
15:54
|
ТипНоменклатуры проиндексировано?
|
|||
42
MistaEr
05.07.17
✎
15:59
|
(41) Нет
|
|||
43
EugeniaK
05.07.17
✎
16:33
|
Нормальный запрос. Даже для динамического списка.
Можно добавить отбор по остальным полям регистра. И проверить, что итоги по регистру включены (срез последних) |
|||
44
Timon1405
05.07.17
✎
16:52
|
(43) почитайте (37) на ИТС пишут что если есть обращение к полям через точку, то итоги использовать не рекомендуется
|
|||
45
Buster007
05.07.17
✎
17:50
|
(39) ты можешь сделать запрос как в (0) с включенным итогом по регистру и в условии где написать СпрНоменклатура.ТипНоменклатуры = тратата
Не забудь проиндексировать по ТипНоменклатуры Тогда у тебя не будет выполняться лишнее соединение и получение максимума по дате при обращении к срезу последних. Это самый быстрый вариант. Наверное, если тебе уж ппц как быстро, можешь сделать фоновое задание, которое будет кешировать последнюю цену в самом элементе номенклатуры. так будет ваще летать. |
|||
46
Вафель
05.07.17
✎
17:52
|
(44) не совсем понятно эта рекомендация
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |