|
Оптимизация запроса получения остатков на каждый день. | ☑ | ||
---|---|---|---|---|
0
serg-lom89
11.01.18
✎
10:27
|
добрый день
прошу помощи по оптимизации запроса для получения остатков на каждый день. вот запрос который получает остатки (количество ) //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Движения.Номенклатура КАК Номенклатура, ДНИ.Период КАК Дата_, ВЫБОР КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.КоличествоКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА Движения.Период <= ДНИ.Период ТОГДА Движения.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК КоличествоОстаток, 0 КАК ПересчитаннаяЦена, 0 КАК Стоимость, Движения.Склад КАК Склад, ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов ПОМЕСТИТЬ втБезЦены ИЗ Дни КАК ДНИ, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций ПО Движения.Склад = СкладыОрганизаций.Склад ИНДЕКСИРОВАТЬ ПО Номенклатура, Склад ; вот запрос Который получается для литража //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Движения.Номенклатура КАК Номенклатура, ДНИ.Период КАК Дата_, ВЫБОР КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.КоличествоКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА Движения.Период <= ДНИ.Период ТОГДА Движения.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ * Движения.Номенклатура.ЕдиницаХраненияОстатков.Литраж КАК КоличествоОстаток, 0 КАК ПересчитаннаяЦена, 0 КАК Стоимость, Движения.Склад КАК Склад, ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов ПОМЕСТИТЬ втБезЦены ИЗ Дни КАК ДНИ, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций ПО Движения.Склад = СкладыОрганизаций.Склад ИНДЕКСИРОВАТЬ ПО Номенклатура, Склад понятно что все получается через точку и это не есть хорошо. Подскажите как можно оптимизировать? |
|||
1
Borteg
11.01.18
✎
10:30
|
(0) РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа),
сначала в запросе определить все склады которые там нужны, потом передать склад в (вложенный запрос по складам) |
|||
2
serg-lom89
11.01.18
✎
10:32
|
(1)
вопрос в том что если по всем складам |
|||
3
Borteg
11.01.18
✎
10:32
|
(2) Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный)
|
|||
4
Borteg
11.01.18
✎
10:33
|
(3) эта конструкция адски усложняет оптимизатору жизнь и сам запрос. Если там будут уже склады в которых значение не виртуальный будет намного лучше
|
|||
5
cw014
11.01.18
✎
10:36
|
А зачем тут дни тянутся без связи?
|
|||
6
serg-lom89
11.01.18
✎
10:45
|
(5) потом вывожу периодичностью по дням
|
|||
7
serg-lom89
11.01.18
✎
11:05
|
что то не могу "допереть" насчет условия по датам
|
|||
8
Borteg
11.01.18
✎
11:29
|
(7) склады переделал уже? у зачемвообще оптимизируешь? запрос выполняет долго?
|
|||
9
Вафель
11.01.18
✎
11:44
|
а почему дни и движения никак не соединяются?
|
|||
10
Вафель
11.01.18
✎
11:45
|
(8) не поможет с вероятностью 99.9999%
|
|||
11
Timon1405
11.01.18
✎
11:48
|
http://catalog.mista.ru/public/515689/ пробовали?
|
|||
12
Borteg
11.01.18
✎
12:34
|
(10) поможет 100%, скорей всего это скд и связь там произведена.
|
|||
13
Antony8x
11.01.18
✎
12:39
|
(12) Что сомнительно в плане производительности
|
|||
14
breezee
11.01.18
✎
12:56
|
(1) Лучше во внутреннее соединение, так вроде (!ВРОДЕ!) быстрее будет работать
|
|||
15
VS-1976
11.01.18
✎
13:26
|
Так как конструктор непонятно как построит запрос ( может быть очень ужасный план исполнения ), то лучше сделать что-то подобное. Не перетендую на истину. В выборке { Номенклатура }, не всегда хорошо если иерархия большая, это сильно сказывается на произодительности...
ВЫБРАТЬ спрСклад.Ссылка КАК Склад ПОМЕСТИТЬ втФильтрПоСкладам ИЗ Справочник.Склады КАК спрСклад ГДЕ ТипСклада <> ЗНАЧЕНИЕ( перечисление.типыСкладов.виртуальный ) { ГДЕ спрСклад.Ссылка КАК Склад } ; ВЫБРАТЬ Склад, Номенклатура, ... ПОМЕСТИТЬ втДанные ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, ДЕНЬ, , Склад В ( ВЫБРАТЬ Склад ИЗ втФильтрПоСкладам ) {Номенклатура} ) ; ВЫБРАТЬ втНоменклатура.Номенклатура ПОМЕСТИТЬ втФильтрПоНоменклатуре ИЗ ( ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ втДанные ) КАК втНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура по спрНоменклатура.Ссылка = втНоменклатура.Номенклатура { ГДЕ спрНоменклатура.НоменклатурнаяГруппа, Номенклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик, спрНоменклатура.Закрыт, спрНоменклатура.ОсновнойПоставщик, спрНоменклатура.Распродажа } ИНДЕКСИРОВАТЬ ПО втНоменклатура.Номенклатура ; ВЫБРАТЬ ... ИЗ втДанные СОЕДИНЕНИЕ втФильтрПоНоменклатуре ПО втФильтрПоНоменклатуре.Номенклатура = втДанные.Номенклатура |
|||
16
VS-1976
11.01.18
✎
13:54
|
Ошибка
Номенклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик, Читать как спрНоменклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик, |
|||
17
Радим1987
11.01.18
✎
13:59
|
Если СКД то лучше использовать 2 НабораДанных и в первым даты+ некоторые параметры во втором остатки из регистра РегистрНакопления.ТоварыНаСкладах.ОСТАТКИ
|
|||
18
Timon1405
11.01.18
✎
14:02
|
(17) то есть фактически поиметь запрос в цикле + что еще печальнее, соединение наборов происходит на клиенте.
|
|||
19
VS-1976
11.01.18
✎
14:02
|
(17) На каждый день в течении месяца, при больших движения за день? Вы хотите к примеру за 31 день взять остатки? Это может сильно замедлить...
|
|||
20
Радим1987
11.01.18
✎
14:05
|
(19) Личный опыт одним запросом медленнее, чем 2 мя наборами
|
|||
21
VS-1976
11.01.18
✎
14:06
|
(18) Остатки вычисляются так: Остаток текущий - движения до даты..., а ОстаткиИОбороты ( Остаток + Сгруппированные Движения ) для периода ДЕНЬ рассчитываются после выборки, а не отбираются на каждый день...
|
|||
22
Радим1987
11.01.18
✎
14:11
|
(21) Это тоже самое на каждый день
|
|||
23
VS-1976
11.01.18
✎
14:11
|
(22) С чего ты взял что тоже самое, я всё расписал. Прочти несколько раз до просветления
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |